@@ -2,23 +2,65 @@ VERSION = 0.4
22ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,)
33DATADIR := /usr/share
44LIBDIR := /usr/lib64
5+ GNUEFIDIR ?= $(LIBDIR ) /gnuefi/
56CC = gcc
6- CFLAGS = -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -mno-red-zone -DCONFIG_$(ARCH ) -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args --std=c99 -I/usr/include/efi -I/usr/include/efi/$(ARCH ) -I/usr/include/efi/protocol
7+ CFLAGS ?= -O0 -g3
8+ BUILDFLAGS := $(CFLAGS ) -fpic -Werror -Wall -Wextra -fshort-wchar \
9+ -fno-merge-constants -ffreestanding \
10+ -fno-stack-protector -fno-stack-check --std=gnu11 -DCONFIG_$(ARCH ) \
11+ -I/usr/include/efi/ -I/usr/include/efi/$(ARCH ) / \
12+ -I/usr/include/efi/protocol
13+ CCLDFLAGS ?= -nostdlib -Wl,--warn-common \
14+ -Wl,--no-undefined -Wl,--fatal-warnings \
15+ -Wl,-shared -Wl,-Bsymbolic -L$(LIBDIR ) -L$(GNUEFIDIR ) \
16+ -Wl,--build-id=sha1 -Wl,--hash-style=sysv \
17+ $(GNUEFIDIR ) /crt0-efi-$(ARCH ) .o
718LD = ld
8- LDFLAGS = -nostdlib -T $(LIBDIR ) /gnuefi/elf_$(ARCH ) _efi.lds -shared -Bsymbolic -L$(LIBDIR ) $(LIBDIR ) /gnuefi/crt0-efi-$(ARCH ) .o
919OBJCOPY = objcopy
20+ OBJCOPY_GTE224 = $(shell expr `$(OBJCOPY ) --version |grep ^"GNU objcopy" | sed 's/^.* //g' | cut -f1-2 -d.` \>= 2.24)
21+
22+ ifeq ($(ARCH ) ,x86_64)
23+ FORMAT = --target efi-app-$(ARCH)
24+ BUILDFLAGS += -mno-mmx -mno-sse -mno-red-zone -nostdinc \
25+ -maccumulate-outgoing-args -DEFI_FUNCTION_WRAPPER \
26+ -DGNU_EFI_USE_MS_ABI -I$(shell $(CC) -print-file-name=include)
27+ endif
28+ ifeq ($(ARCH ) ,ia32)
29+ FORMAT = --target efi-app-$(ARCH)
30+ BUILDFLAGS += -mno-mmx -mno-sse -mno-red-zone -nostdinc \
31+ -maccumulate-outgoing-args -m32 \
32+ -I$(shell $(CC) -print-file-name=include)
33+ endif
34+
35+ ifeq ($(ARCH ) ,aarch64)
36+ FORMAT = -O binary
37+ CCLDFLAGS += -Wl,--defsym=EFI_SUBSYSTEM=0xa
38+ BUILDFLAGS += -ffreestanding -I$(shell $(CC) -print-file-name=include)
39+ endif
40+
41+ ifeq ($(ARCH ) ,arm)
42+ FORMAT = -O binary
43+ CCLDFLAGS += -Wl,--defsym=EFI_SUBSYSTEM=0xa
44+ BUILDFLAGS += -ffreestanding -I$(shell $(CC) -print-file-name=include)
45+ endif
1046
1147all : pesign-test-app.efi
1248
1349% .efi : % .so
14- $(OBJCOPY ) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
15- -j .rela -j .reloc --target=efi-app-$(ARCH ) $^ $@
50+ ifneq ($(OBJCOPY_GTE224 ) ,1)
51+ $(error objcopy >= 2.24 is required)
52+ endif
53+ $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym \
54+ -j .rel* -j .rela* -j .reloc -j .eh_frame \
55+ $(FORMAT) $^ $@
1656
1757% .so : % .o
18- $(LD ) $(LDFLAGS ) -o $@ $^ -lefi -lgnuefi
58+ $(CC ) $(CCLDFLAGS ) -o $@ $^ -lefi -lgnuefi \
59+ $(shell $(CC ) -print-libgcc-file-name) \
60+ -T $(GNUEFIDIR ) /elf_$(ARCH ) _efi.lds
1961
2062% .o : % .c
21- $(CC ) $(CFLAGS ) -c -o $@ $^
63+ $(CC ) $(BUILDFLAGS ) -c -o $@ $^
2264
2365clean :
2466 @rm -vf * .o * .so * .efi
0 commit comments