1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#
# Make.common
# Common make rules for building with gnu-efi
#
EFIINC = /usr/include/efi
GNUEFILIB = /usr/lib
EFILIB = /usr/lib
EFICRT0 = /usr/lib
ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,)
CPPFLAGS = -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol -DCONFIG_$(ARCH)
OPTIMFLAGS = -O2 -fno-strict-aliasing
DEBUGFLAGS = -Wall
CFLAGS = $(OPTIMFLAGS) -mcpu=i386 -fpic -fshort-wchar $(DEBUGFLAGS)
LDFLAGS = -nostdlib -znocombreloc
prefix = /usr/bin/
CC = $(prefix)gcc
AS = $(prefix)as
LD = $(prefix)ld
AR = $(prefix)ar
RANLIB = $(prefix)ranlib
OBJCOPY = $(prefix)objcopy
ifeq ($(ARCH),ia64)
# EFI specs allows only lower floating point partition to be used
CFLAGS += -frename-registers -mfixed-range=f32-f127
endif
CRTOBJS = $(EFICRT0)/crt0-efi-$(ARCH).o
LDSCRIPT = $(EFICRT0)/elf_$(ARCH)_efi.lds
LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L$(EFILIB) -L$(GNUEFILIB) $(CRTOBJS)
LIBS = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name)
FORMAT = efi-app-$(ARCH)
# general rules
%.o: %.c
$(CC) $(LOCAL_CPPFLAGS) $(CPPFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) -c $< -o $@
# rules for EFI applications
ifneq (,$(filter %.efi,$(TARGET)))
SHLIB_TARGET = $(subst .efi,.so,$(TARGET))
$(SHLIB_TARGET): $(OBJS)
$(LD) $(LOCAL_LDFLAGS) $(LDFLAGS) $(OBJS) -o $@ $(LOCAL_LIBS) $(LIBS)
$(TARGET): $(SHLIB_TARGET)
$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
-j .rela -j .reloc --target=$(FORMAT) $< $@
endif
# rules for libraries
ifneq (,$(filter %.a,$(TARGET)))
$(TARGET): $(OBJS)
$(AR) cq $@ $(OBJS)
endif
# utility rules
clean:
rm -f $(TARGET) *~ *.so $(OBJS)
# EOF
|