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