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