Commit | Line | Data |
---|---|---|
33bf0acc | 1 | #!/usr/bin/make -f |
33bf0acc | 2 | |
a65627a8 | 3 | SHELL=/bin/bash |
33bf0acc | 4 | |
2b1d392a | 5 | include /usr/share/dpkg/default.mk |
33bf0acc | 6 | |
1cc8f0e1 | 7 | BUILD_TYPE ?= RELEASE |
a65627a8 | 8 | EDK2_TOOLCHAIN = GCC5 |
33bf0acc | 9 | export $(EDK2_TOOLCHAIN)_AARCH64_PREFIX=aarch64-linux-gnu- |
8ed64dec | 10 | export $(EDK2_TOOLCHAIN)_RISCV64_PREFIX=riscv64-linux-gnu- |
33bf0acc | 11 | |
1345c3eb | 12 | export PYTHON3_ENABLE=TRUE |
1da98c7b | 13 | |
33bf0acc TL |
14 | ifeq ($(DEB_BUILD_ARCH),amd64) |
15 | EDK2_BUILD_ARCH=X64 | |
33bf0acc | 16 | endif |
a65627a8 TL |
17 | ifeq ($(DEB_BUILD_ARCH),i386) |
18 | EDK2_BUILD_ARCH=IA32 | |
19 | endif | |
33bf0acc TL |
20 | ifeq ($(DEB_BUILD_ARCH),arm64) |
21 | EDK2_BUILD_ARCH=AARCH64 | |
22 | endif | |
a65627a8 | 23 | |
d7298091 TL |
24 | PCD_RELEASE_DATE = $(shell date -d@$(SOURCE_DATE_EPOCH) "+%m/%d/%Y") |
25 | PCD_FLAGS = --pcd PcdFirmwareVendor=L"Proxmox distribution of EDK II\\0" | |
26 | PCD_FLAGS += --pcd PcdFirmwareVersionString=L"$(DEB_VERSION)\\0" | |
27 | PCD_FLAGS += --pcd PcdFirmwareReleaseDateString=L"$(PCD_RELEASE_DATE)\\0" | |
13d9aa9d | 28 | COMMON_FLAGS = -DNETWORK_HTTP_BOOT_ENABLE=TRUE |
a2b8eeec | 29 | COMMON_FLAGS += -DNETWORK_IP6_ENABLE=TRUE |
13d9aa9d TL |
30 | COMMON_FLAGS += -DNETWORK_TLS_ENABLE |
31 | COMMON_FLAGS += -DSECURE_BOOT_ENABLE=TRUE | |
dc578af2 | 32 | COMMON_FLAGS += -DPVSCSI_ENABLE=TRUE |
d7298091 TL |
33 | COMMON_FLAGS += $(PCD_FLAGS) |
34 | OVMF_COMMON_FLAGS = $(COMMON_FLAGS) | |
35 | OVMF_COMMON_FLAGS += -DTPM2_ENABLE=TRUE | |
a65627a8 | 36 | OVMF_4M_FLAGS = $(OVMF_COMMON_FLAGS) -DFD_SIZE_4MB |
a65627a8 TL |
37 | OVMF_4M_SMM_FLAGS = $(OVMF_4M_FLAGS) -DSMM_REQUIRE=TRUE |
38 | OVMF32_4M_FLAGS = $(OVMF_COMMON_FLAGS) -DFD_SIZE_4MB | |
39 | OVMF32_4M_SMM_FLAGS = $(OVMF32_4M_FLAGS) -DSMM_REQUIRE=TRUE | |
40 | ||
d7298091 TL |
41 | AAVMF_FLAGS = $(COMMON_FLAGS) |
42 | AAVMF_FLAGS += -DTPM2_ENABLE=TRUE | |
43 | AAVMF_FLAGS += -DTPM2_CONFIG_ENABLE=TRUE | |
1cc8f0e1 | 44 | AAVMF_FLAGS += -DCAVIUM_ERRATUM_27456=TRUE |
a65627a8 | 45 | |
8ed64dec | 46 | RISCV64_FLAGS = $(COMMON_FLAGS) |
8b68f76f | 47 | |
33bf0acc TL |
48 | # Clear variables used internally by the edk2 build system |
49 | undefine WORKSPACE | |
50 | undefine ECP_SOURCE | |
51 | undefine EDK_SOURCE | |
52 | undefine EFI_SOURCE | |
53 | undefine EDK_TOOLS_PATH | |
54 | undefine CONF_PATH | |
55 | ||
56 | %: | |
57 | dh $@ | |
58 | ||
8ed64dec | 59 | override_dh_auto_build: build-qemu-efi-aarch64 build-ovmf build-ovmf32 build-qemu-efi-riscv64 |
33bf0acc | 60 | |
a65627a8 | 61 | debian/setup-build-stamp: |
33bf0acc | 62 | cp -a debian/Logo.bmp MdeModulePkg/Logo/Logo.bmp |
a65627a8 | 63 | set -e; . ./edksetup.sh; \ |
33bf0acc | 64 | make -C BaseTools ARCH=$(EDK2_BUILD_ARCH) |
a65627a8 TL |
65 | touch $@ |
66 | ||
1cc8f0e1 TL |
67 | OVMF_INSTALL_DIR = debian/ovmf-install |
68 | OVMF_BUILD_DIR = Build/OvmfX64/$(BUILD_TYPE)_$(EDK2_TOOLCHAIN) | |
69 | OVMF3264_BUILD_DIR = Build/Ovmf3264/$(BUILD_TYPE)_$(EDK2_TOOLCHAIN) | |
a65627a8 TL |
70 | OVMF_ENROLL = $(OVMF3264_BUILD_DIR)/X64/EnrollDefaultKeys.efi |
71 | OVMF_SHELL = $(OVMF3264_BUILD_DIR)/X64/Shell.efi | |
72 | OVMF_BINARIES = $(OVMF_ENROLL) $(OVMF_SHELL) | |
8d856e13 TL |
73 | OVMF_IMAGES := $(addprefix $(OVMF_INSTALL_DIR)/,OVMF_CODE_4M.fd OVMF_CODE_4M.secboot.fd OVMF_VARS_4M.fd) |
74 | OVMF_PREENROLLED_VARS := $(addprefix $(OVMF_INSTALL_DIR)/,OVMF_VARS_4M.ms.fd OVMF_VARS_4M.snakeoil.fd) | |
33bf0acc | 75 | |
1cc8f0e1 TL |
76 | OVMF32_INSTALL_DIR = debian/ovmf32-install |
77 | OVMF32_BUILD_DIR = Build/OvmfIa32/$(BUILD_TYPE)_$(EDK2_TOOLCHAIN) | |
a65627a8 TL |
78 | OVMF32_SHELL = $(OVMF32_BUILD_DIR)/IA32/Shell.efi |
79 | OVMF32_BINARIES = $(OVMF32_SHELL) | |
d7298091 | 80 | OVMF32_IMAGES := $(addprefix $(OVMF32_INSTALL_DIR)/,OVMF32_CODE_4M.secboot.fd OVMF32_VARS_4M.fd) |
a65627a8 | 81 | |
1cc8f0e1 TL |
82 | QEMU_EFI_BUILD_DIR = Build/ArmVirtQemu-$(EDK2_HOST_ARCH)/$(BUILD_TYPE)_$(EDK2_TOOLCHAIN) |
83 | AAVMF_BUILD_DIR = Build/ArmVirtQemu-AARCH64/$(BUILD_TYPE)_$(EDK2_TOOLCHAIN) | |
a65627a8 TL |
84 | AAVMF_ENROLL = $(AAVMF_BUILD_DIR)/AARCH64/EnrollDefaultKeys.efi |
85 | AAVMF_SHELL = $(AAVMF_BUILD_DIR)/AARCH64/Shell.efi | |
86 | AAVMF_BINARIES = $(AAVMF_ENROLL) $(AAVMF_SHELL) | |
87 | AAVMF_CODE = $(AAVMF_BUILD_DIR)/FV/AAVMF_CODE.fd | |
88 | AAVMF_VARS = $(AAVMF_BUILD_DIR)/FV/AAVMF_VARS.fd | |
89 | AAVMF_IMAGES = $(AAVMF_CODE) $(AAVMF_VARS) | |
90 | AAVMF_PREENROLLED_VARS = $(addprefix $(AAVMF_BUILD_DIR)/FV/,AAVMF_VARS.ms.fd AAVMF_VARS.snakeoil.fd) | |
91 | ||
8ed64dec TL |
92 | RISCV64_BUILD_DIR = Build/RiscVVirtQemu/$(BUILD_TYPE)_$(EDK2_TOOLCHAIN) |
93 | RISCV64_IMAGES = $(addprefix $(RISCV64_BUILD_DIR)/FV/,RISCV_VIRT_CODE.fd RISCV_VIRT_VARS.fd) | |
94 | ||
a65627a8 TL |
95 | build-ovmf32: $(OVMF32_BINARIES) $(OVMF32_IMAGES) |
96 | $(OVMF32_BINARIES) $(OVMF32_IMAGES): debian/setup-build-stamp | |
1cc8f0e1 TL |
97 | rm -rf $(OVMF32_INSTALL_DIR) |
98 | mkdir $(OVMF32_INSTALL_DIR) | |
a65627a8 TL |
99 | set -e; . ./edksetup.sh; \ |
100 | build -a IA32 \ | |
101 | -t $(EDK2_TOOLCHAIN) \ | |
102 | -p OvmfPkg/OvmfPkgIa32.dsc \ | |
1cc8f0e1 | 103 | $(OVMF32_4M_SMM_FLAGS) -b $(BUILD_TYPE) |
a65627a8 | 104 | cp $(OVMF32_BUILD_DIR)/FV/OVMF_CODE.fd \ |
1cc8f0e1 | 105 | $(OVMF32_INSTALL_DIR)/OVMF32_CODE_4M.secboot.fd |
a65627a8 | 106 | cp $(OVMF32_BUILD_DIR)/FV/OVMF_VARS.fd \ |
1cc8f0e1 | 107 | $(OVMF32_INSTALL_DIR)/OVMF32_VARS_4M.fd |
a65627a8 TL |
108 | |
109 | build-ovmf: $(OVMF_BINARIES) $(OVMF_IMAGES) $(OVMF_PREENROLLED_VARS) | |
110 | $(OVMF_BINARIES) $(OVMF_IMAGES): debian/setup-build-stamp | |
1cc8f0e1 TL |
111 | rm -rf $(OVMF_INSTALL_DIR) |
112 | mkdir $(OVMF_INSTALL_DIR) | |
a65627a8 TL |
113 | rm -rf Build/OvmfX64 |
114 | set -e; . ./edksetup.sh; \ | |
115 | build -a IA32 -a X64 \ | |
116 | -t $(EDK2_TOOLCHAIN) \ | |
117 | -p OvmfPkg/OvmfPkgIa32X64.dsc \ | |
1cc8f0e1 | 118 | $(OVMF_4M_FLAGS) -b $(BUILD_TYPE) |
a65627a8 | 119 | cp $(OVMF3264_BUILD_DIR)/FV/OVMF_CODE.fd \ |
1cc8f0e1 | 120 | $(OVMF_INSTALL_DIR)/OVMF_CODE_4M.fd |
a65627a8 | 121 | cp $(OVMF3264_BUILD_DIR)/FV/OVMF_VARS.fd \ |
1cc8f0e1 | 122 | $(OVMF_INSTALL_DIR)/OVMF_VARS_4M.fd |
a65627a8 | 123 | rm -rf Build/OvmfX64 |
33bf0acc | 124 | set -e; . ./edksetup.sh; \ |
a65627a8 TL |
125 | build -a IA32 -a X64 \ |
126 | -t $(EDK2_TOOLCHAIN) \ | |
127 | -p OvmfPkg/OvmfPkgIa32X64.dsc \ | |
1cc8f0e1 | 128 | $(OVMF_4M_SMM_FLAGS) -b $(BUILD_TYPE) |
a65627a8 | 129 | cp $(OVMF3264_BUILD_DIR)/FV/OVMF_CODE.fd \ |
1cc8f0e1 | 130 | $(OVMF_INSTALL_DIR)/OVMF_CODE_4M.secboot.fd |
a65627a8 TL |
131 | |
132 | ifeq ($(call dpkg_vendor_derives_from_v1,ubuntu),yes) | |
133 | debian/PkKek-1-vendor.pem: debian/PkKek-1-Ubuntu.pem | |
134 | else | |
135 | debian/PkKek-1-vendor.pem: debian/PkKek-1-Debian.pem | |
136 | endif | |
137 | ln -sf `basename $<` $@ | |
138 | ||
139 | debian/oem-string-%: debian/PkKek-1-%.pem | |
140 | tr -d '\n' < $< | \ | |
141 | sed -e 's/.*-----BEGIN CERTIFICATE-----/4e32566d-8e9e-4f52-81d3-5bb9715f9727:/' -e 's/-----END CERTIFICATE-----//' > $@ | |
142 | ||
143 | %/AAVMF_VARS.ms.fd: %/AAVMF_CODE.fd %/AAVMF_VARS.fd debian/oem-string-vendor $(AAVMF_ENROLL) $(AAVMF_SHELL) | |
144 | PYTHONPATH=$(CURDIR)/debian/python \ | |
1cc8f0e1 | 145 | python3 ./debian/edk2-vars-generator.py \ |
a65627a8 TL |
146 | -f AAVMF -e $(AAVMF_ENROLL) -s $(AAVMF_SHELL) \ |
147 | -c $(AAVMF_CODE) -V $(AAVMF_VARS) \ | |
148 | -C `< debian/oem-string-vendor` -o $@ | |
149 | ||
150 | %/AAVMF_VARS.snakeoil.fd: %/AAVMF_CODE.fd %/AAVMF_VARS.fd debian/oem-string-snakeoil $(AAVMF_ENROLL) $(AAVMF_SHELL) | |
151 | PYTHONPATH=$(CURDIR)/debian/python \ | |
1cc8f0e1 | 152 | python3 ./debian/edk2-vars-generator.py \ |
a65627a8 TL |
153 | -f AAVMF -e $(AAVMF_ENROLL) -s $(AAVMF_SHELL) \ |
154 | -c $(AAVMF_CODE) -V $(AAVMF_VARS) \ | |
1cc8f0e1 | 155 | --no-default \ |
a65627a8 TL |
156 | -C `< debian/oem-string-snakeoil` -o $@ |
157 | ||
158 | %/OVMF_VARS.ms.fd: %/OVMF_CODE.fd %/OVMF_VARS.fd debian/oem-string-vendor $(OVMF_ENROLL) $(OVMF_SHELL) | |
159 | PYTHONPATH=$(CURDIR)/debian/python \ | |
1cc8f0e1 | 160 | python3 ./debian/edk2-vars-generator.py \ |
a65627a8 | 161 | -f OVMF -e $(OVMF_ENROLL) -s $(OVMF_SHELL) \ |
1cc8f0e1 TL |
162 | -c $(OVMF_INSTALL_DIR)/OVMF_CODE.fd \ |
163 | -V $(OVMF_INSTALL_DIR)/OVMF_VARS.fd \ | |
a65627a8 TL |
164 | -C `< debian/oem-string-vendor` -o $@ |
165 | ||
166 | %/OVMF_VARS_4M.ms.fd: %/OVMF_CODE_4M.fd %/OVMF_VARS_4M.fd debian/oem-string-vendor $(OVMF_ENROLL) $(OVMF_SHELL) | |
167 | PYTHONPATH=$(CURDIR)/debian/python \ | |
1cc8f0e1 | 168 | python3 ./debian/edk2-vars-generator.py \ |
a65627a8 | 169 | -f OVMF_4M -e $(OVMF_ENROLL) -s $(OVMF_SHELL) \ |
1cc8f0e1 TL |
170 | -c $(OVMF_INSTALL_DIR)/OVMF_CODE_4M.fd \ |
171 | -V $(OVMF_INSTALL_DIR)/OVMF_VARS_4M.fd \ | |
a65627a8 TL |
172 | -C `< debian/oem-string-vendor` -o $@ |
173 | ||
174 | %/OVMF_VARS_4M.snakeoil.fd: %/OVMF_CODE_4M.fd %/OVMF_VARS_4M.fd debian/oem-string-snakeoil $(OVMF_ENROLL) $(OVMF_SHELL) | |
175 | PYTHONPATH=$(CURDIR)/debian/python \ | |
1cc8f0e1 | 176 | python3 ./debian/edk2-vars-generator.py \ |
a65627a8 | 177 | -f OVMF_4M -e $(OVMF_ENROLL) -s $(OVMF_SHELL) \ |
1cc8f0e1 TL |
178 | -c $(OVMF_INSTALL_DIR)/OVMF_CODE_4M.fd \ |
179 | -V $(OVMF_INSTALL_DIR)/OVMF_VARS_4M.fd \ | |
180 | --no-default \ | |
a65627a8 TL |
181 | -C `< debian/oem-string-snakeoil` -o $@ |
182 | ||
183 | ArmPkg/Library/GccLto/liblto-aarch64.a: ArmPkg/Library/GccLto/liblto-aarch64.s | |
184 | $($(EDK2_TOOLCHAIN)_AARCH64_PREFIX)gcc -c -fpic $< -o $@ | |
185 | ||
1cc8f0e1 TL |
186 | ArmPkg/Library/GccLto/liblto-arm.a: ArmPkg/Library/GccLto/liblto-arm.s |
187 | $($(EDK2_TOOLCHAIN)_ARM_PREFIX)gcc -c -fpic $< -o $@ | |
188 | ||
a65627a8 | 189 | build-qemu-efi: debian/setup-build-stamp |
20ffa59c | 190 | set -e; . ./edksetup.sh; \ |
20ffa59c TL |
191 | build -a $(EDK2_HOST_ARCH) \ |
192 | -t $(EDK2_TOOLCHAIN) \ | |
193 | -p ArmVirtPkg/ArmVirtQemu.dsc \ | |
1cc8f0e1 | 194 | $(AAVMF_FLAGS) -b $(BUILD_TYPE) |
2cfb5323 TL |
195 | cp $(QEMU_EFI_BUILD_DIR)/FV/QEMU_EFI.fd \ |
196 | $(QEMU_EFI_BUILD_DIR)/FV/$(FW_NAME)_CODE.fd | |
197 | cp $(QEMU_EFI_BUILD_DIR)/FV/QEMU_VARS.fd \ | |
198 | $(QEMU_EFI_BUILD_DIR)/FV/$(FW_NAME)_VARS.fd | |
199 | # QEMU expects 64MiB CODE and VARS files on ARM/AARCH64 architectures | |
200 | # Truncate the firmware files to the expected size | |
201 | truncate -s 64M $(QEMU_EFI_BUILD_DIR)/FV/$(FW_NAME)_CODE.fd | |
202 | truncate -s 64M $(QEMU_EFI_BUILD_DIR)/FV/$(FW_NAME)_VARS.fd | |
a65627a8 | 203 | |
1cc8f0e1 TL |
204 | build-qemu-efi-aarch64: $(AAVMF_BINARIES) $(AAVMF_IMAGES) $(AAVMF_PREENROLLED_VARS) |
205 | $(AAVMF_BINARIES) $(AAVMF_IMAGES): ArmPkg/Library/GccLto/liblto-aarch64.a | |
20ffa59c TL |
206 | $(MAKE) -f debian/rules build-qemu-efi EDK2_ARCH_DIR=AArch64 EDK2_HOST_ARCH=AARCH64 FW_NAME=AAVMF |
207 | ||
8ed64dec TL |
208 | build-qemu-efi-riscv64: $(RISCV64_IMAGES) |
209 | $(RISCV64_IMAGES): debian/setup-build-stamp | |
210 | set -e; . ./edksetup.sh; \ | |
211 | build -a RISCV64 \ | |
212 | -t $(EDK2_TOOLCHAIN) \ | |
213 | -p OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc \ | |
214 | $(RISCV64_FLAGS) -b $(BUILD_TYPE) | |
215 | truncate -s 32M $(RISCV64_BUILD_DIR)/FV/RISCV_VIRT_CODE.fd | |
216 | truncate -s 32M $(RISCV64_BUILD_DIR)/FV/RISCV_VIRT_VARS.fd | |
217 | ||
33bf0acc | 218 | override_dh_auto_clean: |
a65627a8 TL |
219 | -. ./edksetup.sh; build clean |
220 | make -C BaseTools clean | |
221 | ||
222 | # Only embed code that is actually used; requested by the Ubuntu Security Team | |
223 | EMBEDDED_SUBMODULES += CryptoPkg/Library/OpensslLib/openssl | |
224 | EMBEDDED_SUBMODULES += ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 | |
225 | EMBEDDED_SUBMODULES += MdeModulePkg/Library/BrotliCustomDecompressLib/brotli | |
d7298091 | 226 | EMBEDDED_SUBMODULES += MdePkg/Library/MipiSysTLib/mipisyst |
a65627a8 TL |
227 | get-orig-source: |
228 | # Should be executed on a checkout of the upstream master branch, | |
229 | # with the debian/ directory manually copied in. | |
230 | rm -rf edk2.tmp && git clone . edk2.tmp | |
231 | # Embed submodules. Don't recurse - openssl will bring in MBs of | |
232 | # stuff we don't need | |
233 | set -e; cd edk2.tmp; \ | |
234 | for submodule in $(EMBEDDED_SUBMODULES); do \ | |
1cc8f0e1 | 235 | git submodule update --depth 1 --init $$submodule; \ |
a65627a8 TL |
236 | done |
237 | rm -rf edk2-$(DEB_VERSION_UPSTREAM) && \ | |
238 | mkdir edk2-$(DEB_VERSION_UPSTREAM) | |
239 | cd edk2.tmp && git archive HEAD | \ | |
240 | tar xv -C ../edk2-$(DEB_VERSION_UPSTREAM) | |
241 | cd edk2.tmp && git submodule foreach \ | |
242 | 'git archive HEAD | tar xv -C $$toplevel/../edk2-$(DEB_VERSION_UPSTREAM)/$$sm_path' | |
243 | ln -s ../debian edk2-$(DEB_VERSION_UPSTREAM) | |
244 | # Remove known-binary files | |
245 | cd edk2-$(DEB_VERSION_UPSTREAM) && python3 ./debian/remove-binaries.py | |
246 | # Look for possible unknown binary files | |
247 | cd edk2-$(DEB_VERSION_UPSTREAM) && python3 ./debian/find-binaries.py | |
248 | rm edk2-$(DEB_VERSION_UPSTREAM)/debian | |
249 | tar Jcvf ../edk2_$(DEB_VERSION_UPSTREAM).orig.tar.xz \ | |
250 | edk2-$(DEB_VERSION_UPSTREAM) | |
251 | rm -rf edk2.tmp edk2-$(DEB_VERSION_UPSTREAM) | |
252 | ||
8ed64dec | 253 | .PHONY: build-ovmf build-ovmf32 build-qemu-efi build-qemu-efi-aarch64 build-qemu-efi-riscv64 |