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)
19 CFLAGS = $(ARCH3264) $(OPTIMFLAGS) -fno-stack-protector -fpic -fshort-wchar $(DEBUGFLAGS)
21 LDFLAGS = -nostdlib -znocombreloc
28 RANLIB = $(prefix)ranlib
29 OBJCOPY = $(prefix)objcopy
32 # EFI specs allows only lower floating point partition to be used
33 CFLAGS += -frename-registers -mfixed-range=f32-f127
37 CFLAGS += -DEFI_FUNCTION_WRAPPER
40 ifeq ($(HOSTARCH),ia32)
43 GNUEFILIB := $(GNUEFILIB)64
45 EFICRT0 := $(EFICRT0)64
52 ifeq ($(HOSTARCH),x86_64)
55 GNUEFILIB := $(GNUEFILIB)32
57 EFICRT0 := $(EFICRT0)32
62 CRTOBJS = $(EFICRT0)/crt0-efi-$(ARCH).o
64 ifneq (,$(findstring FreeBSD,$(OS)))
66 LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_fbsd_efi.lds
68 LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_efi.lds
71 LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_efi.lds
74 LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L$(EFILIB) -L$(GNUEFILIB) $(CRTOBJS)
75 LIBS = -lefi -lgnuefi $(shell $(CC) $(ARCH3264) -print-libgcc-file-name)
76 FORMAT = efi-app-$(ARCH)
77 FORMAT_DRIVER = efi-bsdrv-$(ARCH)
83 $(CC) $(LOCAL_CPPFLAGS) $(CPPFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) -c $< -o $@
85 # rules for EFI applications
87 ifneq (,$(filter %.efi,$(TARGET)))
89 SHLIB_TARGET = $(subst .efi,.so,$(TARGET))
91 $(SHLIB_TARGET): $(OBJS)
92 $(LD) $(LOCAL_LDFLAGS) $(LDFLAGS) $(OBJS) -o $@ $(LOCAL_LIBS) $(LIBS)
94 #$(TARGET): $(SHLIB_TARGET)
95 # $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
96 # -j .rela -j .reloc --target=$(FORMAT) $< $@
100 # rules for libraries
102 ifneq (,$(filter %.a,$(TARGET)))
112 rm -f $(TARGET) *~ *.so $(OBJS) *.efi