From 037973bb0d2b1a3c8618ccf41caa4da3666588c3 Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Fri, 20 Sep 2019 10:38:08 +0200 Subject: edk2 build scripts: work around TianoCore#1607 without forcing Python 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It turns out that forcing python2 for running the edk2 "build" utility is neither necessary nor sufficient. Forcing python2 is not sufficient for two reasons: - QEMU is moving away from python2, with python2 nearing EOL, - according to my most recent testing, the lacking dependency information in the makefiles that are generated by edk2's "build" utility can cause parallel build failures even when "build" is executed by python2. And forcing python2 is not necessary because we can still return to the original idea of filtering out jobserver-related options from MAKEFLAGS. So do that. While at it, cut short edk2's auto-detection of the python3.* minor version, by setting PYTHON_COMMAND to "python3" (which we expect to be available wherever we intend to build edk2). With this patch, the guest UEFI binaries that are used as part of the BIOS tables test, and the OVMF and ArmVirtQemu platform firmwares, will be built strictly in a single job, regardless of an outermost "-jN" make option. Alas, there appears to be no reliable way to build edk2 in an (outer make, inner make) environment, with a jobserver enabled. Cc: Eduardo Habkost Cc: John Snow Cc: Philippe Mathieu-Daudé Reported-by: John Snow Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé Reviewed-by: John Snow Signed-off-by: Laszlo Ersek Message-Id: <20190920083808.21399-3-lersek@redhat.com> Signed-off-by: Philippe Mathieu-Daudé --- tests/uefi-test-tools/Makefile | 1 + tests/uefi-test-tools/build.sh | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/uefi-test-tools/Makefile b/tests/uefi-test-tools/Makefile index 7e0177d..1dcddcd 100644 --- a/tests/uefi-test-tools/Makefile +++ b/tests/uefi-test-tools/Makefile @@ -100,6 +100,7 @@ Build/bios-tables-test.%.efi: build-edk2-tools build-edk2-tools: $(MAKE) -C $(edk2_dir)/BaseTools \ + PYTHON_COMMAND=$${EDK2_PYTHON_COMMAND:-python3} \ EXTRA_OPTFLAGS='$(EDK2_BASETOOLS_OPTFLAGS)' \ EXTRA_LDFLAGS='$(EDK2_BASETOOLS_LDFLAGS)' diff --git a/tests/uefi-test-tools/build.sh b/tests/uefi-test-tools/build.sh index 8aa7935..3b78f30 100755 --- a/tests/uefi-test-tools/build.sh +++ b/tests/uefi-test-tools/build.sh @@ -29,8 +29,7 @@ export PACKAGES_PATH=$(realpath -- "$edk2_dir") export WORKSPACE=$PWD mkdir -p Conf -# Work around . -export PYTHON_COMMAND=python2 +export PYTHON_COMMAND=${EDK2_PYTHON_COMMAND:-python3} # Source "edksetup.sh" carefully. set +e +u +C @@ -46,12 +45,15 @@ fi source "$edk2_dir/../edk2-funcs.sh" edk2_arch=$(qemu_edk2_get_arch "$emulation_target") edk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target") +MAKEFLAGS=$(qemu_edk2_quirk_tianocore_1607 "$MAKEFLAGS") +edk2_thread_count=$(qemu_edk2_get_thread_count "$MAKEFLAGS") qemu_edk2_set_cross_env "$emulation_target" # Build the UEFI binary mkdir -p log build \ --arch="$edk2_arch" \ + -n "$edk2_thread_count" \ --buildtarget=DEBUG \ --platform=UefiTestToolsPkg/UefiTestToolsPkg.dsc \ --tagname="$edk2_toolchain" \ -- cgit v1.1