OSDN Git Service

52d2e0737dcc32dadcf8e0b03f862487ee59845b
[alterlinux/alterlinux-pkgbuilds.git] / alter-stable / any / edk2 / PKGBUILD
1 # Maintainer: David Runge <dvzrv@archlinux.org>
2
3 _brotli_ver=1.0.7
4 _openssl_ver=1.1.1g
5 pkgbase=edk2
6 pkgname=('edk2-shell' 'edk2-ovmf')
7 pkgver=202005
8 pkgrel=3
9 pkgdesc="Modern, feature-rich firmware development environment for the UEFI specifications"
10 arch=('any')
11 url="https://github.com/tianocore/edk2"
12 license=('BSD')
13 makedepends=('acpica' 'iasl' 'util-linux-libs' 'nasm' 'python')
14 options=(!makeflags)
15 source=("$pkgbase-$pkgver.tar.gz::https://github.com/tianocore/${pkgbase}/archive/${pkgbase}-stable${pkgver}.tar.gz"
16         "https://www.openssl.org/source/openssl-${_openssl_ver}.tar.gz"
17         "brotli-${_brotli_ver}.tar.gz::https://github.com/google/brotli/archive/v${_brotli_ver}.tar.gz"
18         "${pkgbase}-202005-openssl-1.1.1g.patch"
19         "50-edk2-ovmf-i386-secure.json"
20         "50-edk2-ovmf-x86_64-secure.json"
21         "60-edk2-ovmf-i386.json"
22         "60-edk2-ovmf-x86_64.json")
23 sha512sums=('864e5b8babb28eea05f59e17581209c853c004993842a7a6b104e96bd1fd29d9dd3a1545fb44639f2442acc51b078c4996621e1f927fbf449dc1b86421b432ac'
24             '01e3d0b1bceeed8fb066f542ef5480862001556e0f612e017442330bbd7e5faee228b2de3513d7fc347446b7f217e27de1003dc9d7214d5833b97593f3ec25ab'
25             'a82362aa36d2f2094bca0b2808d9de0d57291fb3a4c29d7c0ca0a37e73087ec5ac4df299c8c363e61106fccf2fe7f58b5cf76eb97729e2696058ef43b1d3930a'
26             '3605c67d9c8870562086f63e96ffe8039cb394266298b382df61e12c777b6c37a2d2eb3fd5147cb3f00fabddc6dba139ba53da42ea81b1cbeb8f587c6d4cc251'
27             '55e4187b11b27737f61e528c02ff43b9381c0cb09140e803531616766f9cb9401115d88d946b56171784cc028f9571279640eb39b6a9fa8e02ec0c8d1b036a3e'
28             'a1236585b30d720540de2e9527d8c90ff2d428e800b3da545b23461dc698dc91fe441b62bb8cbca76e08f4ec1eb485619e9ab26157deb06e7fb33e7f5f9dd8b6'
29             'c81e072aabfb01d29cf5194111524e2c4c8684979de6b6793db10299c95bb94f7b1d0a98b057df0664d7a894a2b40e9b4c3576112fae400a95eaf5fe5fc9369b'
30             '2030dc1d49d56fce8af56c5777fd40f04041e39ff806dd8c021e161227bdd646982024db6758230b8332dc68f16bc6918e1d54ad3c022e21e148d6b65ea778b3')
31 _arch_list=('IA32' 'X64')
32 _build_type='RELEASE'
33 _build_plugin='GCC5'
34
35 prepare() {
36   mv -v "$pkgbase-$pkgbase-stable$pkgver" "$pkgbase-$pkgver"
37   cd "$pkgbase-$pkgver"
38
39   # applying fixes to build against openssl-1.1.1g
40   patch -Np1 -i "../${pkgbase}-202005-openssl-1.1.1g.patch"
41   # symlinking openssl into place
42   rm -rfv CryptoPkg/Library/OpensslLib/openssl
43   ln -sfv "${srcdir}/openssl-$_openssl_ver" CryptoPkg/Library/OpensslLib/openssl
44   # copying required pre-generated header into place (to not also have to patch openssl)
45   cp -v CryptoPkg/Library/Include/internal/dso_conf.h CryptoPkg/Library/OpensslLib/openssl/include/crypto/
46
47   # symlinking brotli into place
48   rm -rfv BaseTools/Source/C/BrotliCompress/brotli MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
49   ln -sfv "${srcdir}/brotli-${_brotli_ver}" BaseTools/Source/C/BrotliCompress/brotli
50   ln -sfv "${srcdir}/brotli-${_brotli_ver}" MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
51
52   # -Werror, not even once
53   sed -e 's/ -Werror//g' \
54       -i BaseTools/Conf/*.template BaseTools/Source/C/Makefiles/*.makefile
55 }
56
57 build() {
58   cd "$pkgbase-$pkgver"
59   local _arch
60   make -C BaseTools
61   . edksetup.sh
62   for _arch in ${_arch_list[@]}; do
63     # shell
64     echo "Building shell (${_arch})."
65     BaseTools/BinWrappers/PosixLike/build -p ShellPkg/ShellPkg.dsc \
66                                           -a "${_arch}" \
67                                           -b "${_build_type}" \
68                                           -n "$(nproc)" \
69                                           -t "${_build_plugin}"
70     # ovmf
71     if [[ "${_arch}" == 'IA32' ]]; then
72       echo "Building ovmf (${_arch}) with secure boot"
73       OvmfPkg/build.sh -p OvmfPkg/OvmfPkgIa32.dsc \
74                        -a "${_arch}" \
75                        -b "${_build_type}" \
76                        -n "$(nproc)" \
77                        -t "${_build_plugin}" \
78                        -D LOAD_X64_ON_IA32_ENABLE \
79                        -D NETWORK_IP6_ENABLE \
80                        -D TPM_ENABLE \
81                        -D HTTP_BOOT_ENABLE \
82                        -D TLS_ENABLE \
83                        -D FD_SIZE_2MB \
84                        -D SECURE_BOOT_ENABLE \
85                        -D SMM_REQUIRE \
86                        -D EXCLUDE_SHELL_FROM_FD
87       mv -v Build/Ovmf{Ia32,IA32-secure}
88       echo "Building ovmf (${_arch}) without secure boot"
89       OvmfPkg/build.sh -p OvmfPkg/OvmfPkgIa32.dsc \
90                        -a "${_arch}" \
91                        -b "${_build_type}" \
92                        -n "$(nproc)" \
93                        -t "${_build_plugin}" \
94                        -D LOAD_X64_ON_IA32_ENABLE \
95                        -D NETWORK_IP6_ENABLE \
96                        -D TPM_ENABLE \
97                        -D HTTP_BOOT_ENABLE \
98                        -D TLS_ENABLE \
99                        -D FD_SIZE_2MB
100       mv -v Build/Ovmf{Ia32,IA32}
101     fi
102     if [[ "${_arch}" == 'X64' ]]; then
103       echo "Building ovmf (${_arch}) with secure boot"
104       OvmfPkg/build.sh -p "OvmfPkg/OvmfPkg${_arch}.dsc" \
105                        -a "${_arch}" \
106                        -b "${_build_type}" \
107                        -n "$(nproc)" \
108                        -t "${_build_plugin}" \
109                        -D NETWORK_IP6_ENABLE \
110                        -D TPM_ENABLE \
111                        -D FD_SIZE_2MB \
112                        -D TLS_ENABLE \
113                        -D HTTP_BOOT_ENABLE \
114                        -D SECURE_BOOT_ENABLE \
115                        -D SMM_REQUIRE \
116                        -D EXCLUDE_SHELL_FROM_FD
117       mv -v Build/OvmfX64{,-secure}
118       echo "Building ovmf (${_arch}) without secure boot"
119       OvmfPkg/build.sh -p "OvmfPkg/OvmfPkg${_arch}.dsc" \
120                        -a "${_arch}" \
121                        -b "${_build_type}" \
122                        -n "$(nproc)" \
123                        -t "${_build_plugin}" \
124                        -D NETWORK_IP6_ENABLE \
125                        -D TPM_ENABLE \
126                        -D FD_SIZE_2MB \
127                        -D TLS_ENABLE \
128                        -D HTTP_BOOT_ENABLE
129     fi
130   done
131 }
132
133 package_edk2-shell() {
134   pkgdesc="EDK2 UEFI Shell"
135   provides=('uefi-shell')
136   cd "$pkgbase-$pkgver"
137   local _arch
138   # minimal UEFI shell, as defined in ShellPkg/Application/Shell/ShellPkg.inf
139   local _min='7C04A583-9E3E-4f1c-AD65-E05268D0B4D1'
140   # full UEFI shell, as defined in ShellPkg/ShellPkg.dsc
141   local _full='EA4BB293-2D7F-4456-A681-1F22F42CD0BC'
142   for _arch in ${_arch_list[@]}; do
143     install -vDm 644 "Build/Shell/${_build_type}_${_build_plugin}/${_arch}/Shell_${_min}.efi" \
144       "${pkgdir}/usr/share/${pkgname}/${_arch,,}/Shell.efi"
145     install -vDm 644 "Build/Shell/${_build_type}_${_build_plugin}/${_arch}/Shell_${_full}.efi" \
146       "${pkgdir}/usr/share/${pkgname}/${_arch,,}/Shell_Full.efi"
147   done
148   # license
149   install -vDm 644 License.txt -t "${pkgdir}/usr/share/licenses/${pkgname}"
150   # docs
151   install -vDm 644 {ReadMe.rst,Maintainers.txt} \
152     -t "${pkgdir}/usr/share/doc/${pkgname}"
153 }
154
155 package_edk2-ovmf() {
156   pkgdesc="Open Virtual Machine Firmware to support firmware for Virtual Machines"
157   provides=('ovmf')
158   conflicts=('ovmf')
159   replaces=('ovmf')
160   license+=('MIT')
161   install="${pkgname}.install"
162   cd "$pkgbase-$pkgver"
163   local _arch
164   # installing the various firmwares
165   for _arch in ${_arch_list[@]}; do
166     # installing OVMF.fd for xen: https://bugs.archlinux.org/task/58635
167     install -vDm 644 "Build/Ovmf${_arch}/${_build_type}_${_build_plugin}/FV/OVMF.fd" \
168       -t "${pkgdir}/usr/share/${pkgname}/${_arch,,}"
169     install -vDm 644 "Build/Ovmf${_arch}/${_build_type}_${_build_plugin}/FV/OVMF_CODE.fd" \
170       -t "${pkgdir}/usr/share/${pkgname}/${_arch,,}"
171     install -vDm 644 "Build/Ovmf${_arch}/${_build_type}_${_build_plugin}/FV/OVMF_VARS.fd" \
172       -t "${pkgdir}/usr/share/${pkgname}/${_arch,,}"
173     install -vDm 644 "Build/Ovmf${_arch}-secure/${_build_type}_${_build_plugin}/FV/OVMF_CODE.fd" \
174       "${pkgdir}/usr/share/${pkgname}/${_arch,,}/OVMF_CODE.secboot.fd"
175   done
176   # installing qemu descriptors in accordance with qemu:
177   # https://git.qemu.org/?p=qemu.git;a=tree;f=pc-bios/descriptors
178   # https://bugs.archlinux.org/task/64206
179   install -vDm 644 ../*"${pkgname}"*.json -t "${pkgdir}/usr/share/qemu/firmware"
180   # adding symlink for previous ovmf location
181   # https://bugs.archlinux.org/task/66528
182   ln -svf "/usr/share/${pkgname}" "${pkgdir}/usr/share/ovmf"
183   # adding a symlink for applications with questionable heuristics (such as lxd)
184   ln -svf "/usr/share/${pkgname}" "${pkgdir}/usr/share/OVMF"
185   # licenses
186   install -vDm 644 License.txt -t "${pkgdir}/usr/share/licenses/${pkgname}"
187   install -vDm 644 OvmfPkg/License.txt \
188     "${pkgdir}/usr/share/licenses/${pkgname}/OvmfPkg.License.txt"
189   # docs
190   install -vDm 644 {OvmfPkg/README,ReadMe.rst,Maintainers.txt} \
191     -t "${pkgdir}/usr/share/doc/${pkgname}"
192 }