[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 07/12] roms: build edk2 firmware binaries and
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-devel] [PATCH v2 07/12] roms: build edk2 firmware binaries and variable store templates |
Date: |
Thu, 14 Mar 2019 19:55:54 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 |
On 3/14/19 7:38 PM, Philippe Mathieu-Daudé wrote:
> Hi Laszlo,
>
> On 3/13/19 10:00 PM, Laszlo Ersek wrote:
>> Add the "efi" target to "Makefile".
>>
>> Introduce "Makefile.edk2" for building and cleaning the firmware images
>> and varstore templates.
>>
>> Collect the common bits from the recipes in the helper script
>> "edk2-build.sh".
>>
>> Signed-off-by: Laszlo Ersek <address@hidden>
>> ---
>>
>> Notes:
>> v2:
>>
>> - drop comma after copyright year, in both new files [Eric]
>>
>> - define the SHELL macro as /bin/bash near the top of "Makefile.edk2",
>> so that various bashisms (e.g. the "source" built-in, and the ==
>> operator of "[") work even if /bin/sh isn't bash [Phil, Eric]
>>
>> - rework "Makefile.edk2" to produce xz-compressed flash device files
>> [Dan, Michael, Phil]:
>>
>> - add implicit rule for compression,
>>
>> - mark uncompressed FD files as intermediate,
>>
>> - factor out the "flashdevs" macro for sharing between the "all" and
>> ".INTERMEDIATE" targets
>>
>> - due to said rework above, do not pick up Phil's R-b / T-b, and
>> Michal's and Michael's R-b's
>>
>> roms/Makefile | 5 +
>> roms/Makefile.edk2 | 148 ++++++++++++++++++++
>> roms/edk2-build.sh | 55 ++++++++
>> 3 files changed, 208 insertions(+)
>>
>> diff --git a/roms/Makefile b/roms/Makefile
>> index 2e83ececa25a..054b432834ba 100644
>> --- a/roms/Makefile
>> +++ b/roms/Makefile
>> @@ -61,6 +61,7 @@ default:
>> @echo " skiboot -- update skiboot.lid"
>> @echo " u-boot.e500 -- update u-boot.e500"
>> @echo " u-boot.sam460 -- update u-boot.sam460"
>> + @echo " efi -- update UEFI (edk2) platform firmware"
>>
>> bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k
>> cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin
>> @@ -143,6 +144,9 @@ skiboot:
>> $(MAKE) -C skiboot CROSS=$(powerpc64_cross_prefix)
>> cp skiboot/skiboot.lid ../pc-bios/skiboot.lid
>>
>> +efi: edk2-basetools
>> + $(MAKE) -f Makefile.edk2
>> +
>> clean:
>> rm -rf seabios/.config seabios/out seabios/builds
>> $(MAKE) -C sgabios clean
>> @@ -153,3 +157,4 @@ clean:
>> rm -rf u-boot/build.e500
>> $(MAKE) -C u-boot-sam460ex distclean
>> $(MAKE) -C skiboot clean
>> + $(MAKE) -f Makefile.edk2 clean
>> diff --git a/roms/Makefile.edk2 b/roms/Makefile.edk2
>> new file mode 100644
>> index 000000000000..e5c3036949c8
>> --- /dev/null
>> +++ b/roms/Makefile.edk2
>> @@ -0,0 +1,148 @@
>> +# Makefile for building firmware binaries and variable store templates for a
>> +# number of virtual platforms in edk2.
>> +#
>> +# Copyright (C) 2019 Red Hat, Inc.
>> +#
>> +# This program and the accompanying materials are licensed and made
>> available
>> +# under the terms and conditions of the BSD License that accompanies this
>> +# distribution. The full text of the license may be found at
>> +# <http://opensource.org/licenses/bsd-license.php>.
>> +#
>> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> WITHOUT
>> +# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> +SHELL = /bin/bash
>> +
>> +toolchain = $(shell source ./edk2-funcs.sh && qemu_edk2_get_toolchain $(1))
>> +
>> +licenses := \
>> + edk2/License.txt \
>> + edk2/OvmfPkg/License.txt \
>> + edk2/CryptoPkg/Library/OpensslLib/openssl/LICENSE
>> +
>> +# The "edk2-arm-vars.fd" varstore template is suitable for aarch64 as well.
>> +# Similarly, the "edk2-i386-vars.fd" varstore template is suitable for
>> x86_64
>> +# as well, independently of "secure" too.
>> +flashdevs := \
>> + aarch64-code \
>> + arm-code \
>> + i386-code \
>> + i386-secure-code \
>> + x86_64-code \
>> + x86_64-secure-code \
>> + \
>> + arm-vars \
>> + i386-vars
>> +
>> +all: $(foreach flashdev,$(flashdevs),../pc-bios/edk2-$(flashdev).fd.xz) \
>> + ../pc-bios/edk2-licenses.txt
>> +
>> +../pc-bios/edk2-%.fd.xz: ../pc-bios/edk2-%.fd
>> + xz -9 -e -c $< > $@
>
> I'm not sure but I think we should add new entries to .gitignore now:
>
> $ git status
> Changes not staged for commit:
> (use "git add <file>..." to update what will be committed)
> (use "git checkout -- <file>..." to discard changes in working directory)
>
> modified: pc-bios/edk2-aarch64-code.fd.xz
> modified: pc-bios/edk2-arm-code.fd.xz
> modified: pc-bios/edk2-i386-code.fd.xz
> modified: pc-bios/edk2-i386-secure-code.fd.xz
> modified: pc-bios/edk2-x86_64-code.fd.xz
> modified: pc-bios/edk2-x86_64-secure-code.fd.xz
>
> This change might be enough:
>
> -- >8 --
> diff --git a/.gitignore b/.gitignore
> @@ -96,7 +96,7 @@
> *.gcno
> *.gcov
> /pc-bios/bios-pq/status
> -/pc-bios/edk2-*.fd
> +/pc-bios/edk2-*.fd.xz
> /pc-bios/vgabios-pq/status
> /pc-bios/optionrom/linuxboot.asm
> /pc-bios/optionrom/linuxboot.bin
> ---
>
> I don't want to bikeshed again, but I understood the idea of that series
> was for Igor to use the binaries without having to rebuild them.
>
> Previously we had the .fd directly usable, and 'make .fd' would rebuild
> them. Now they aren't directly usable.
>
> IOW I was expecting the opposite Make rule:
>
> ../pc-bios/edk2-%.fd: ../pc-bios/edk2-%.fd.xz
> xz -d -c $< > $@
>
> And the next rules to include the final compression.
>
> So someone wanting to use simply decompress from the repository, while
> to rebuild a .fd you git clone and etc..
So I processed your series using your FIFO style and reached patch
11/12, and now understand:
- roms/Makefile does build + compression,
- Makefile does the decompression.
This is clever and indeed what I'm expecting, easier for QEMU
developpers as EDK2 consumers :)
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Next time I'll reuse my double FIFO scheme again ;)
>> +
>> +# When the build completes, we need not keep the uncompressed flash device
>> +# files.
>> +.INTERMEDIATE: $(foreach
>> flashdev,$(flashdevs),../pc-bios/edk2-$(flashdev).fd)
>> +
>> +submodules:
>> + cd edk2 && git submodule update --init --force
>> +
>> +# See notes on the ".NOTPARALLEL" target and the "+" indicator in
>> +# "tests/uefi-test-tools/Makefile".
>> +.NOTPARALLEL:
>> +
>> +../pc-bios/edk2-aarch64-code.fd: submodules
>> + +./edk2-build.sh \
>> + aarch64 \
>> + --arch=AARCH64 \
>> + --platform=ArmVirtPkg/ArmVirtQemu.dsc \
>> + -D NETWORK_IP6_ENABLE \
>> + -D HTTP_BOOT_ENABLE
>> + cp edk2/Build/ArmVirtQemu-AARCH64/DEBUG_$(call
>> toolchain,aarch64)/FV/QEMU_EFI.fd \
>> + $@
>> + truncate --size=64M $@
>> +
>> +../pc-bios/edk2-arm-code.fd: submodules
>> + +./edk2-build.sh \
>> + arm \
>> + --arch=ARM \
>> + --platform=ArmVirtPkg/ArmVirtQemu.dsc \
>> + -D NETWORK_IP6_ENABLE \
>> + -D HTTP_BOOT_ENABLE
>> + cp edk2/Build/ArmVirtQemu-ARM/DEBUG_$(call
>> toolchain,arm)/FV/QEMU_EFI.fd \
>> + $@
>> + truncate --size=64M $@
>> +
>> +../pc-bios/edk2-i386-code.fd: submodules
>> + +./edk2-build.sh \
>> + i386 \
>> + --arch=IA32 \
>> + --platform=OvmfPkg/OvmfPkgIa32.dsc \
>> + -D NETWORK_IP6_ENABLE \
>> + -D HTTP_BOOT_ENABLE \
>> + -D TLS_ENABLE \
>> + -D TPM2_ENABLE \
>> + -D TPM2_CONFIG_ENABLE
>> + cp edk2/Build/OvmfIa32/DEBUG_$(call toolchain,i386)/FV/OVMF_CODE.fd $@
>> +
>> +../pc-bios/edk2-i386-secure-code.fd: submodules
>> + +./edk2-build.sh \
>> + i386 \
>> + --arch=IA32 \
>> + --platform=OvmfPkg/OvmfPkgIa32.dsc \
>> + -D NETWORK_IP6_ENABLE \
>> + -D HTTP_BOOT_ENABLE \
>> + -D TLS_ENABLE \
>> + -D TPM2_ENABLE \
>> + -D TPM2_CONFIG_ENABLE \
>> + -D SECURE_BOOT_ENABLE \
>> + -D SMM_REQUIRE
>> + cp edk2/Build/OvmfIa32/DEBUG_$(call toolchain,i386)/FV/OVMF_CODE.fd $@
>> +
>> +../pc-bios/edk2-x86_64-code.fd: submodules
>> + +./edk2-build.sh \
>> + x86_64 \
>> + --arch=X64 \
>> + --platform=OvmfPkg/OvmfPkgX64.dsc \
>> + -D NETWORK_IP6_ENABLE \
>> + -D HTTP_BOOT_ENABLE \
>> + -D TLS_ENABLE \
>> + -D TPM2_ENABLE \
>> + -D TPM2_CONFIG_ENABLE
>> + cp edk2/Build/OvmfX64/DEBUG_$(call toolchain,x86_64)/FV/OVMF_CODE.fd $@
>> +
>> +../pc-bios/edk2-x86_64-secure-code.fd: submodules
>> + +./edk2-build.sh \
>> + x86_64 \
>> + --arch=IA32 \
>> + --arch=X64 \
>> + --platform=OvmfPkg/OvmfPkgIa32X64.dsc \
>> + -D NETWORK_IP6_ENABLE \
>> + -D HTTP_BOOT_ENABLE \
>> + -D TLS_ENABLE \
>> + -D TPM2_ENABLE \
>> + -D TPM2_CONFIG_ENABLE \
>> + -D SECURE_BOOT_ENABLE \
>> + -D SMM_REQUIRE
>> + cp edk2/Build/Ovmf3264/DEBUG_$(call toolchain,x86_64)/FV/OVMF_CODE.fd $@
>> +
>> +../pc-bios/edk2-arm-vars.fd: ../pc-bios/edk2-arm-code.fd
>> + cp edk2/Build/ArmVirtQemu-ARM/DEBUG_$(call
>> toolchain,arm)/FV/QEMU_VARS.fd \
>> + $@
>> + truncate --size=64M $@
>> +
>> +../pc-bios/edk2-i386-vars.fd: ../pc-bios/edk2-i386-code.fd
>> + cp edk2/Build/OvmfIa32/DEBUG_$(call toolchain,i386)/FV/OVMF_VARS.fd $@
>> +
>> +# The license file accumulates several individual licenses from under edk2,
>> +# prefixing each individual license with a header (generated by "tail") that
>> +# states its pathname.
>> +../pc-bios/edk2-licenses.txt: submodules
>> + tail -n $(shell cat $(licenses) | wc -l) $(licenses) > $@
>> + dos2unix $@
>> +
>> +clean:
>> + rm -rf edk2/Build
>> + cd edk2/Conf && \
>> + rm -rf .cache BuildEnv.sh build_rule.txt target.txt \
>> + tools_def.txt
>> diff --git a/roms/edk2-build.sh b/roms/edk2-build.sh
>> new file mode 100755
>> index 000000000000..4f46f8a6a217
>> --- /dev/null
>> +++ b/roms/edk2-build.sh
>> @@ -0,0 +1,55 @@
>> +#!/bin/bash
>> +
>> +# Wrapper shell script for building a virtual platform firmware in edk2.
>> +#
>> +# Copyright (C) 2019 Red Hat, Inc.
>> +#
>> +# This program and the accompanying materials are licensed and made
>> available
>> +# under the terms and conditions of the BSD License that accompanies this
>> +# distribution. The full text of the license may be found at
>> +# <http://opensource.org/licenses/bsd-license.php>.
>> +#
>> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> WITHOUT
>> +# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> +set -e -u -C
>> +
>> +# Save the command line arguments. We need to reset $# to 0 before sourcing
>> +# "edksetup.sh", as it will inherit address@hidden
>> +emulation_target=$1
>> +shift
>> +num_args=0
>> +args=()
>> +for arg in "$@"; do
>> + args[num_args++]="$arg"
>> +done
>> +shift $num_args
>> +
>> +cd edk2
>> +
>> +# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607>.
>> +export PYTHON_COMMAND=python2
>> +
>> +# Source "edksetup.sh" carefully.
>> +set +e +u +C
>> +source ./edksetup.sh
>> +ret=$?
>> +set -e -u -C
>> +if [ $ret -ne 0 ]; then
>> + exit $ret
>> +fi
>> +
>> +# Fetch some option arguments, and set the cross-compilation environment (if
>> +# any), for the edk2 "build" utility.
>> +source ../edk2-funcs.sh
>> +edk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target")
>> +edk2_thread_count=$(qemu_edk2_get_thread_count "$MAKEFLAGS")
>> +qemu_edk2_set_cross_env "$emulation_target"
>> +
>> +# Build the platform firmware.
>> +build \
>> + --cmd-len=65536 \
>> + -n "$edk2_thread_count" \
>> + --buildtarget=DEBUG \
>> + --tagname="$edk2_toolchain" \
>> + "address@hidden"
>>
>
> Tested-by: Philippe Mathieu-Daudé <address@hidden>
>
[Qemu-devel] [PATCH v2 07/12] roms: build edk2 firmware binaries and variable store templates, Laszlo Ersek, 2019/03/13
[Qemu-devel] [PATCH v2 06/12] roms/Makefile: replace the $(EFIROM) target with "edk2-basetools", Laszlo Ersek, 2019/03/13
[Qemu-devel] [PATCH v2 05/12] roms/edk2-funcs.sh: add the qemu_edk2_get_thread_count() function, Laszlo Ersek, 2019/03/13
[Qemu-devel] [PATCH v2 04/12] roms/edk2: advance to tag edk2-stable201903, Laszlo Ersek, 2019/03/13
[Qemu-devel] [PATCH v2 03/12] tests/uefi-test-tools/build.sh: work around TianoCore#1607, Laszlo Ersek, 2019/03/13
[Qemu-devel] [PATCH v2 02/12] roms/edk2-funcs.sh: require gcc-4.8+ for building i386 and x86_64, Laszlo Ersek, 2019/03/13
[Qemu-devel] [PATCH v2 01/12] roms: lift "edk2-funcs.sh" from "tests/uefi-test-tools/build.sh", Laszlo Ersek, 2019/03/13
Re: [Qemu-devel] [PATCH v2 00/12] bundle edk2 platform firmware with QEMU, Igor Mammedov, 2019/03/14