]>
Commit | Line | Data |
---|---|---|
031e5cce SM |
1 | |
2 | # load the local configuration if it exists | |
3 | -include Make.local | |
8119f718 | 4 | -include $(TOPDIR)/Make.local |
031e5cce | 5 | |
f892ac66 MTL |
6 | COMPILER ?= gcc |
7 | CC = $(CROSS_COMPILE)$(COMPILER) | |
031e5cce | 8 | HOSTCC = $(COMPILER) |
f892ac66 MTL |
9 | LD = $(CROSS_COMPILE)ld |
10 | OBJCOPY = $(CROSS_COMPILE)objcopy | |
031e5cce SM |
11 | DOS2UNIX ?= dos2unix |
12 | D2UFLAGS ?= -r -l -F -f -n | |
f892ac66 MTL |
13 | OPENSSL ?= openssl |
14 | HEXDUMP ?= hexdump | |
15 | INSTALL ?= install | |
16 | PK12UTIL ?= pk12util | |
17 | CERTUTIL ?= certutil | |
18 | PESIGN ?= pesign | |
19 | SBSIGN ?= sbsign | |
20 | prefix ?= /usr | |
21 | prefix := $(abspath $(prefix)) | |
22 | datadir ?= $(prefix)/share/ | |
23 | PKGNAME ?= shim | |
24 | ESPROOTDIR ?= boot/efi/ | |
25 | EFIBOOTDIR ?= $(ESPROOTDIR)EFI/BOOT/ | |
26 | TARGETDIR ?= $(ESPROOTDIR)EFI/$(EFIDIR)/ | |
27 | DATATARGETDIR ?= $(datadir)/$(PKGNAME)/$(VERSION)$(DASHRELEASE)/$(ARCH_SUFFIX)/ | |
28 | DEBUGINFO ?= $(prefix)/lib/debug/ | |
29 | DEBUGSOURCE ?= $(prefix)/src/debug/ | |
30 | OSLABEL ?= $(EFIDIR) | |
31 | DEFAULT_LOADER ?= \\\\grub$(ARCH_SUFFIX).efi | |
32 | DASHJ ?= -j$(shell echo $$(($$(grep -c "^model name" /proc/cpuinfo) + 1))) | |
33 | ||
34 | ARCH ?= $(shell $(CC) -dumpmachine | cut -f1 -d- | sed s,i[3456789]86,ia32,) | |
35 | OBJCOPY_GTE224 = $(shell expr `$(OBJCOPY) --version |grep ^"GNU objcopy" | sed 's/^.*\((.*)\|version\) //g' | cut -f1-2 -d.` \>= 2.24) | |
031e5cce SM |
36 | OPTIMIZATIONS ?= -Os |
37 | FA_OPTIMIZATIONS ?= -O2 | |
38 | ifneq ($(FANALYZER),) | |
39 | override OPTIMIZATIONS := $(FA_OPTIMIZATIONS) | |
40 | override CCACHE_DISABLE := true | |
41 | endif | |
42 | export OPTIMIZATIONS | |
43 | ifneq ($(CCACHE_DISABLE),) | |
44 | export CCACHE_DISABLE | |
45 | endif | |
f892ac66 MTL |
46 | |
47 | SUBDIRS = $(TOPDIR)/Cryptlib $(TOPDIR)/lib | |
48 | ||
031e5cce SM |
49 | EFI_INCLUDE ?= $(TOPDIR)/gnu-efi/inc |
50 | EFI_INCLUDES = -I$(EFI_INCLUDE) -I$(EFI_INCLUDE)/$(ARCH) -I$(EFI_INCLUDE)/protocol | |
51 | override EFI_INCLUDES := $(EFI_INCLUDES) | |
52 | EFI_CRT_OBJS = $(LOCAL_EFI_PATH)/crt0-efi-$(ARCH_GNUEFI).o | |
f892ac66 MTL |
53 | EFI_LDS = $(TOPDIR)/elf_$(ARCH)_efi.lds |
54 | ||
55 | CLANG_BUGS = $(if $(findstring gcc,$(CC)),-maccumulate-outgoing-args,) | |
56 | ||
57 | COMMIT_ID ?= $(shell if [ -e .git ] ; then git log -1 --pretty=format:%H ; elif [ -f commit ]; then cat commit ; else echo master; fi) | |
58 | ||
59 | ifeq ($(ARCH),x86_64) | |
60 | ARCH_CFLAGS ?= -mno-mmx -mno-sse -mno-red-zone -nostdinc \ | |
61 | $(CLANG_BUGS) -m64 \ | |
031e5cce SM |
62 | -DMDE_CPU_X64 -DPAGE_SIZE=4096 |
63 | ARCH_GNUEFI ?= x86_64 | |
f892ac66 MTL |
64 | ARCH_SUFFIX ?= x64 |
65 | ARCH_SUFFIX_UPPER ?= X64 | |
66 | ARCH_LDFLAGS ?= | |
031e5cce | 67 | TIMESTAMP_LOCATION := 136 |
f892ac66 MTL |
68 | endif |
69 | ifeq ($(ARCH),ia32) | |
70 | ARCH_CFLAGS ?= -mno-mmx -mno-sse -mno-red-zone -nostdinc \ | |
71 | $(CLANG_BUGS) -m32 \ | |
72 | -DMDE_CPU_IA32 -DPAGE_SIZE=4096 | |
031e5cce | 73 | ARCH_GNUEFI ?= ia32 |
f892ac66 MTL |
74 | ARCH_SUFFIX ?= ia32 |
75 | ARCH_SUFFIX_UPPER ?= IA32 | |
76 | ARCH_LDFLAGS ?= | |
77 | ARCH_CFLAGS ?= -m32 | |
031e5cce | 78 | TIMESTAMP_LOCATION := 136 |
f892ac66 MTL |
79 | endif |
80 | ifeq ($(ARCH),aarch64) | |
81 | ARCH_CFLAGS ?= -DMDE_CPU_AARCH64 -DPAGE_SIZE=4096 -mstrict-align | |
031e5cce | 82 | ARCH_GNUEFI ?= aarch64 |
f892ac66 MTL |
83 | ARCH_SUFFIX ?= aa64 |
84 | ARCH_SUFFIX_UPPER ?= AA64 | |
85 | FORMAT := -O binary | |
86 | SUBSYSTEM := 0xa | |
87 | ARCH_LDFLAGS += --defsym=EFI_SUBSYSTEM=$(SUBSYSTEM) | |
88 | ARCH_CFLAGS ?= | |
031e5cce | 89 | TIMESTAMP_LOCATION := 72 |
f892ac66 MTL |
90 | endif |
91 | ifeq ($(ARCH),arm) | |
031e5cce SM |
92 | ARCH_CFLAGS ?= -DMDE_CPU_ARM -DPAGE_SIZE=4096 -mno-unaligned-access |
93 | ARCH_GNUEFI ?= arm | |
f892ac66 MTL |
94 | ARCH_SUFFIX ?= arm |
95 | ARCH_SUFFIX_UPPER ?= ARM | |
96 | FORMAT := -O binary | |
97 | SUBSYSTEM := 0xa | |
98 | ARCH_LDFLAGS += --defsym=EFI_SUBSYSTEM=$(SUBSYSTEM) | |
031e5cce | 99 | TIMESTAMP_LOCATION := 72 |
f892ac66 MTL |
100 | endif |
101 | ||
031e5cce SM |
102 | DEFINES = -DDEFAULT_LOADER='L"$(DEFAULT_LOADER)"' \ |
103 | -DDEFAULT_LOADER_CHAR='"$(DEFAULT_LOADER)"' | |
104 | ||
105 | INCLUDES = -nostdinc \ | |
106 | -I$(TOPDIR)/Cryptlib -I$(TOPDIR)/Cryptlib/Include \ | |
107 | -I$(EFI_INCLUDE) -I$(EFI_INCLUDE)/$(ARCH_GNUEFI) -I$(EFI_INCLUDE)/protocol \ | |
108 | -I$(TOPDIR)/include -iquote $(TOPDIR) -iquote $(shell pwd) \ | |
109 | -isystem $(TOPDIR)/include/system \ | |
110 | -isystem $(shell $(CC) $(ARCH_CFLAGS) -print-file-name=include) | |
111 | ||
112 | override DEFAULT_FEATUREFLAGS = \ | |
113 | -std=gnu11 \ | |
114 | -ggdb \ | |
115 | -ffreestanding \ | |
116 | $(shell $(CC) -fmacro-prefix-map=./=./ -E -x c /dev/null >/dev/null 2>&1 && echo -fmacro-prefix-map='$(TOPDIR)/=$(DEBUGSRC)') \ | |
117 | -fno-stack-protector \ | |
118 | -fno-strict-aliasing \ | |
119 | -fpic \ | |
120 | -fshort-wchar | |
121 | $(call update-variable,FEATUREFLAGS) | |
122 | $(call conditional-add-flag,$(FANALYZER),analyzer,FEATUREFLAGS,-fanalyzer) | |
123 | $(call conditional-add-flag,$(COLOR),diagnostics-color,FEATUREFLAGS,-fdiagnostics-color=always) | |
124 | ||
125 | override DEFAULT_WARNFLAGS = \ | |
126 | -Wall \ | |
127 | -Wextra \ | |
128 | -Wno-missing-field-initializers | |
129 | $(call update-variable,WARNFLAGS) | |
130 | ||
131 | override DEFAULT_WERRFLAGS = \ | |
132 | -Werror | |
133 | $(call update-variable,WERRFLAGS) | |
134 | ||
135 | CFLAGS = $(FEATUREFLAGS) \ | |
136 | $(OPTIMIZATIONS) \ | |
137 | $(WARNFLAGS) \ | |
138 | $(ARCH_CFLAGS) \ | |
139 | $(WERRFLAGS) \ | |
140 | $(INCLUDES) \ | |
141 | $(DEFINES) | |
f892ac66 MTL |
142 | |
143 | ifneq ($(origin OVERRIDE_SECURITY_POLICY), undefined) | |
031e5cce | 144 | DEFINES += -DOVERRIDE_SECURITY_POLICY |
f892ac66 MTL |
145 | endif |
146 | ||
031e5cce SM |
147 | ifneq ($(origin REQUIRE_TPM), undefined) |
148 | DEFINES += -DREQUIRE_TPM | |
f892ac66 MTL |
149 | endif |
150 | ||
031e5cce SM |
151 | ifneq ($(origin DISABLE_EBS_PROTECTION), undefined) |
152 | DEFINES += -DDISABLE_EBS_PROTECTION | |
f892ac66 MTL |
153 | endif |
154 | ||
155 | LIB_GCC = $(shell $(CC) $(ARCH_CFLAGS) -print-libgcc-file-name) | |
156 | EFI_LIBS = -lefi -lgnuefi --start-group Cryptlib/libcryptlib.a Cryptlib/OpenSSL/libopenssl.a --end-group $(LIB_GCC) | |
157 | FORMAT ?= --target efi-app-$(ARCH) | |
031e5cce SM |
158 | LOCAL_EFI_PATH = gnu-efi/$(ARCH_GNUEFI)/gnuefi |
159 | LIBDIR = gnu-efi/$(ARCH_GNUEFI)/lib | |
f892ac66 MTL |
160 | |
161 | MMSTEM ?= mm$(ARCH_SUFFIX) | |
162 | MMNAME = $(MMSTEM).efi | |
163 | MMSONAME = $(MMSTEM).so | |
164 | FBSTEM ?= fb$(ARCH_SUFFIX) | |
165 | FBNAME = $(FBSTEM).efi | |
166 | FBSONAME = $(FBSTEM).so | |
167 | SHIMSTEM ?= shim$(ARCH_SUFFIX) | |
168 | SHIMNAME = $(SHIMSTEM).efi | |
169 | SHIMSONAME = $(SHIMSTEM).so | |
170 | SHIMHASHNAME = $(SHIMSTEM).hash | |
171 | BOOTEFINAME ?= BOOT$(ARCH_SUFFIX_UPPER).EFI | |
172 | BOOTCSVNAME ?= BOOT$(ARCH_SUFFIX_UPPER).CSV | |
173 | ||
031e5cce SM |
174 | DEFINES += -DEFI_ARCH='L"$(ARCH_SUFFIX)"' \ |
175 | -DDEBUGDIR='L"/usr/lib/debug/usr/share/shim/$(ARCH_SUFFIX)-$(VERSION)$(DASHRELEASE)/"' | |
f892ac66 | 176 | |
031e5cce SM |
177 | ifneq ($(origin VENDOR_DB_FILE), undefined) |
178 | DEFINES += -DVENDOR_DB_FILE=\"$(VENDOR_DB_FILE)\" | |
179 | endif | |
f892ac66 | 180 | ifneq ($(origin VENDOR_CERT_FILE), undefined) |
031e5cce | 181 | DEFINES += -DVENDOR_CERT_FILE=\"$(VENDOR_CERT_FILE)\" |
f892ac66 MTL |
182 | endif |
183 | ifneq ($(origin VENDOR_DBX_FILE), undefined) | |
031e5cce SM |
184 | DEFINES += -DVENDOR_DBX_FILE=\"$(VENDOR_DBX_FILE)\" |
185 | endif | |
186 | ||
187 | LDFLAGS = --hash-style=sysv -nostdlib -znocombreloc -T $(EFI_LDS) -shared -Bsymbolic -L$(LOCAL_EFI_PATH) -L$(LIBDIR) -LCryptlib -LCryptlib/OpenSSL $(EFI_CRT_OBJS) --build-id=sha1 $(ARCH_LDFLAGS) --no-undefined | |
188 | ||
189 | ifneq ($(DEBUG),) | |
190 | export DEBUG | |
191 | endif | |
192 | ifneq ($(VERBOSE),) | |
193 | export VERBOSE | |
f892ac66 MTL |
194 | endif |
195 | ||
031e5cce | 196 | # vim:filetype=make |