3 # Common make rules for building with gnu-efi
6 EFIINC = /usr/local/include/efi
7 GNUEFILIB = /usr/local/lib
8 EFILIB = /usr/local/lib
9 EFICRT0 = /usr/local/lib
11 HOSTARCH = $(shell uname -m | sed s,i[3456789]86,ia32,)
13 OS = $(shell uname -s)
14 CPPFLAGS = -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol -DCONFIG_$(ARCH)
16 OPTIMFLAGS = -O2 -fno-strict-aliasing
18 CFLAGS = $(ARCH3264) $(OPTIMFLAGS) -fpic -fshort-wchar $(DEBUGFLAGS)
20 LDFLAGS = -nostdlib -znocombreloc
27 RANLIB = $(prefix)ranlib
28 OBJCOPY = $(prefix)objcopy
31 # EFI specs allows only lower floating point partition to be used
32 CFLAGS += -frename-registers -mfixed-range=f32-f127
36 CFLAGS += -DEFI_FUNCTION_WRAPPER
39 ifeq ($(HOSTARCH),ia32)
42 GNUEFILIB := $(GNUEFILIB)64
44 EFICRT0 := $(EFICRT0)64
51 ifeq ($(HOSTARCH),x86_64)
54 GNUEFILIB := $(GNUEFILIB)32
56 EFICRT0 := $(EFICRT0)32
61 CRTOBJS = $(EFICRT0)/crt0-efi-$(ARCH).o
63 ifneq (,$(findstring FreeBSD,$(OS)))
65 LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_fbsd_efi.lds
67 LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_efi.lds
70 LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_efi.lds
73 LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L$(EFILIB) -L$(GNUEFILIB) $(CRTOBJS)
74 LIBS = -lefi -lgnuefi $(shell $(CC) $(ARCH3264) -print-libgcc-file-name)
75 FORMAT = efi-app-$(ARCH)
81 $(CC) $(LOCAL_CPPFLAGS) $(CPPFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) -c $< -o $@
83 # rules for EFI applications
85 ifneq (,$(filter %.efi,$(TARGET)))
87 SHLIB_TARGET = $(subst .efi,.so,$(TARGET))
89 $(SHLIB_TARGET): $(OBJS)
90 $(LD) $(LOCAL_LDFLAGS) $(LDFLAGS) $(OBJS) -o $@ $(LOCAL_LIBS) $(LIBS)
92 $(TARGET): $(SHLIB_TARGET)
93 $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
94 -j .rela -j .reloc --target=$(FORMAT) $< $@
100 ifneq (,$(filter %.a,$(TARGET)))
110 rm -f $(TARGET) *~ *.so $(OBJS)