# This is the recipe.sh script. It is executed by BPM in a temporary directory when compiling a source package # BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE # BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT prepare() { # Re-extract brotli for ShellPkg tar -xvf "$BPM_WORKDIR"/brotli.tar.gz --strip-components=1 -C "$BPM_SOURCE"/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/ cd "$BPM_SOURCE" # fix 32-bit instruction errors dos2unix "$BPM_SOURCE"/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm dos2unix "$BPM_SOURCE"/BaseTools/Source/C/EfiRom/EfiRom.c patch -Np1 -i "$BPM_WORKDIR"/nasm3.patch patch -Np1 -i "$BPM_WORKDIR"/fix-discarded-qualifiers-error.patch } # The build function is executed in the source directory # This function is used to compile the source code build() { local _common_args=(-b RELEASE -n $(nproc) -t GCC) local _efi_args=(-D NETWORK_IP6_ENABLE -D TPM_CONFIG_ENABLE -D TPM1_ENABLE -D TPM2_ENABLE) local _x86_args=(-D FD_SIZE_2MB -D HTTP_BOOT_ENABLE -D TLS_ENABLE) local _4mb_args=(-D FD_SIZE_4MB -D FD_SIZE_IN_KB=4096 -D HTTP_BOOT_ENABLE -D TLS_ENABLE) make -C BaseTools source edksetup.sh for arch in X64 IA32; do BaseTools/BinWrappers/PosixLike/build -p ShellPkg/ShellPkg.dsc -a "$arch" "${_common_args[@]}" done # X64 OVMF BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgIa32X64.dsc" -a IA32 -a X64 \ "${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" \ -D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD mv -v Build/Ovmf3264{,-secure-4mb} BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgIa32X64.dsc" -a IA32 -a X64 \ "${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" \ -D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD mv -v Build/Ovmf3264{,-secure} BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgX64.dsc" -a X64 "${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" mv -v Build/OvmfX64{,-4mb} BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgX64.dsc" -a X64 "${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/Microvm/MicrovmX64.dsc" -a X64 "${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" mv -v Build/MicrovmX64{,-4mb} BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/Microvm/MicrovmX64.dsc" -a X64 "${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" # IA32 OVMF BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgIa32.dsc" -a IA32 \ "${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" \ -D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD -D LOAD_X64_ON_IA32_ENABLE mv -v Build/Ovmf{Ia32,IA32-secure-4mb} BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgIa32.dsc" -a IA32 \ "${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" \ -D SECURE_BOOT_ENABLE -D SMM_REQUIRE -D EXCLUDE_SHELL_FROM_FD -D LOAD_X64_ON_IA32_ENABLE mv -v Build/Ovmf{Ia32,IA32-secure} BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgIa32.dsc" -a IA32 \ "${_common_args[@]}" "${_efi_args[@]}" "${_4mb_args[@]}" \ -D LOAD_X64_ON_IA32_ENABLE mv -v Build/Ovmf{Ia32,IA32-4mb} BaseTools/BinWrappers/PosixLike/build -p "OvmfPkg/OvmfPkgIa32.dsc" -a IA32 \ "${_common_args[@]}" "${_efi_args[@]}" "${_x86_args[@]}" \ -D LOAD_X64_ON_IA32_ENABLE mv -v Build/Ovmf{Ia32,IA32} } # The package function is executed in the source directory # This function is used to move the compiled files into the output directory package() { install -d "$BPM_OUTPUT"/usr/share/qemu/firmware install -d "$BPM_OUTPUT"/usr/share/AAVMF for arch in X64 IA32; do install -d "$BPM_OUTPUT"/usr/share/edk2/${arch,,} install -Dm644 Build/Shell/RELEASE_GCC/${arch}/Shell_7C04A583-9E3E-4f1c-AD65-E05268D0B4D1.efi usr/share/edk2/${arch,,}/Shell.efi install -Dm644 Build/Shell/RELEASE_GCC/${arch}/Shell_EA4BB293-2D7F-4456-A681-1F22F42CD0BC.efi usr/share/edk2/${arch,,}/Shell_Full.efi done # X64 OVMF install -Dm644 Build/OvmfX64/RELEASE_GCC/FV/OVMF.fd "$BPM_OUTPUT"/usr/share/edk2/x64 install -Dm644 Build/OvmfX64/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/x64 install -Dm644 Build/OvmfX64/RELEASE_GCC/FV/OVMF_VARS.fd "$BPM_OUTPUT"/usr/share/edk2/x64 install -Dm644 Build/OvmfX64-4mb/RELEASE_GCC/FV/OVMF.fd "$BPM_OUTPUT"/usr/share/edk2/x64/OVMF.4m.fd install -Dm644 Build/OvmfX64-4mb/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/x64/OVMF_CODE.4m.fd install -Dm644 Build/OvmfX64-4mb/RELEASE_GCC/FV/OVMF_VARS.fd "$BPM_OUTPUT"/usr/share/edk2/x64/OVMF_VARS.4m.fd install -Dm644 Build/Ovmf3264-secure/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/x64/OVMF_CODE.secure.fd install -Dm644 Build/Ovmf3264-secure-4mb/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/x64/OVMF_CODE.secure.4m.fd install -Dm644 Build/MicrovmX64/RELEASE_GCC/FV/MICROVM.fd "$BPM_OUTPUT"/usr/share/edk2/x64/MICROVM.fd install -Dm644 Build/MicrovmX64-4mb/RELEASE_GCC/FV/MICROVM.fd "$BPM_OUTPUT"/usr/share/edk2/x64/MICROVM.4m.fd install -Dm644 "$BPM_WORKDIR"/*x86_64*.json -t "$BPM_OUTPUT"/usr/share/qemu/firmware install -Dm644 "$BPM_WORKDIR"/*microvm*.json -t "$BPM_OUTPUT"/usr/share/qemu/firmware # IA32 OVMF install -Dm644 Build/OvmfIA32/RELEASE_GCC/FV/OVMF.fd "$BPM_OUTPUT"/usr/share/edk2/ia32 install -Dm644 Build/OvmfIA32/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/ia32 install -Dm644 Build/OvmfIA32/RELEASE_GCC/FV/OVMF_VARS.fd "$BPM_OUTPUT"/usr/share/edk2/ia32 install -Dm644 Build/OvmfIA32-4mb/RELEASE_GCC/FV/OVMF.fd "$BPM_OUTPUT"/usr/share/edk2/ia32/OVMF.4m.fd install -Dm644 Build/OvmfIA32-4mb/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/ia32/OVMF_CODE.4m.fd install -Dm644 Build/OvmfIA32-4mb/RELEASE_GCC/FV/OVMF_VARS.fd "$BPM_OUTPUT"/usr/share/edk2/ia32/OVMF_VARS.4m.fd install -Dm644 Build/OvmfIA32-secure/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/ia32/OVMF_CODE.secure.fd install -Dm644 Build/OvmfIA32-secure-4mb/RELEASE_GCC/FV/OVMF_CODE.fd "$BPM_OUTPUT"/usr/share/edk2/ia32/OVMF_CODE.secure.4m.fd install -Dm644 "$BPM_WORKDIR"/*i386*.json -t "$BPM_OUTPUT"/usr/share/qemu/firmware ln -s ./edk2 "$BPM_OUTPUT"/usr/share/OVMF # Install package licenses install -Dm644 "$BPM_SOURCE"/License.txt "$BPM_OUTPUT"/usr/share/licenses/edk2-ovmf/License.txt install -Dm644 "$BPM_SOURCE"/OvmfPkg/License.txt "$BPM_OUTPUT"/usr/share/licenses/edk2-ovmf/OvmfPkg-License.txt }