• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revisión037973bb0d2b1a3c8618ccf41caa4da3666588c3 (tree)
Tiempo2019-10-07 22:14:15
AutorLaszlo Ersek <lersek@redh...>
CommiterPhilippe Mathieu-Daudé

Log Message

edk2 build scripts: work around TianoCore#1607 without forcing Python 2

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 <ehabkost@redhat.com>
Cc: John Snow <jsnow@redhat.com>
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Reported-by: John Snow <jsnow@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20190920083808.21399-3-lersek@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Cambiar Resumen

Diferencia incremental

--- a/roms/Makefile
+++ b/roms/Makefile
@@ -141,6 +141,7 @@ build-efi-roms: build-pxe-roms
141141 #
142142 edk2-basetools:
143143 $(MAKE) -C edk2/BaseTools \
144+ PYTHON_COMMAND=$${EDK2_PYTHON_COMMAND:-python3} \
144145 EXTRA_OPTFLAGS='$(EDK2_BASETOOLS_OPTFLAGS)' \
145146 EXTRA_LDFLAGS='$(EDK2_BASETOOLS_LDFLAGS)'
146147
--- a/roms/edk2-build.sh
+++ b/roms/edk2-build.sh
@@ -27,8 +27,7 @@ shift $num_args
2727
2828 cd edk2
2929
30-# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607>.
31-export PYTHON_COMMAND=python2
30+export PYTHON_COMMAND=${EDK2_PYTHON_COMMAND:-python3}
3231
3332 # Source "edksetup.sh" carefully.
3433 set +e +u +C
@@ -43,6 +42,7 @@ fi
4342 # any), for the edk2 "build" utility.
4443 source ../edk2-funcs.sh
4544 edk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target")
45+MAKEFLAGS=$(qemu_edk2_quirk_tianocore_1607 "$MAKEFLAGS")
4646 edk2_thread_count=$(qemu_edk2_get_thread_count "$MAKEFLAGS")
4747 qemu_edk2_set_cross_env "$emulation_target"
4848
--- a/roms/edk2-funcs.sh
+++ b/roms/edk2-funcs.sh
@@ -251,3 +251,20 @@ qemu_edk2_get_thread_count()
251251 printf '1\n'
252252 fi
253253 }
254+
255+
256+# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607> by
257+# filtering jobserver-related flags out of MAKEFLAGS. Print the result to the
258+# standard output.
259+#
260+# Parameters:
261+# $1: the value of the MAKEFLAGS variable
262+qemu_edk2_quirk_tianocore_1607()
263+{
264+ local makeflags="$1"
265+
266+ printf %s "$makeflags" \
267+ | LC_ALL=C sed --regexp-extended \
268+ --expression='s/--jobserver-(auth|fds)=[0-9]+,[0-9]+//' \
269+ --expression='s/-j([0-9]+)?//'
270+}
--- a/tests/uefi-test-tools/Makefile
+++ b/tests/uefi-test-tools/Makefile
@@ -100,6 +100,7 @@ Build/bios-tables-test.%.efi: build-edk2-tools
100100
101101 build-edk2-tools:
102102 $(MAKE) -C $(edk2_dir)/BaseTools \
103+ PYTHON_COMMAND=$${EDK2_PYTHON_COMMAND:-python3} \
103104 EXTRA_OPTFLAGS='$(EDK2_BASETOOLS_OPTFLAGS)' \
104105 EXTRA_LDFLAGS='$(EDK2_BASETOOLS_LDFLAGS)'
105106
--- a/tests/uefi-test-tools/build.sh
+++ b/tests/uefi-test-tools/build.sh
@@ -29,8 +29,7 @@ export PACKAGES_PATH=$(realpath -- "$edk2_dir")
2929 export WORKSPACE=$PWD
3030 mkdir -p Conf
3131
32-# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607>.
33-export PYTHON_COMMAND=python2
32+export PYTHON_COMMAND=${EDK2_PYTHON_COMMAND:-python3}
3433
3534 # Source "edksetup.sh" carefully.
3635 set +e +u +C
@@ -46,12 +45,15 @@ fi
4645 source "$edk2_dir/../edk2-funcs.sh"
4746 edk2_arch=$(qemu_edk2_get_arch "$emulation_target")
4847 edk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target")
48+MAKEFLAGS=$(qemu_edk2_quirk_tianocore_1607 "$MAKEFLAGS")
49+edk2_thread_count=$(qemu_edk2_get_thread_count "$MAKEFLAGS")
4950 qemu_edk2_set_cross_env "$emulation_target"
5051
5152 # Build the UEFI binary
5253 mkdir -p log
5354 build \
5455 --arch="$edk2_arch" \
56+ -n "$edk2_thread_count" \
5557 --buildtarget=DEBUG \
5658 --platform=UefiTestToolsPkg/UefiTestToolsPkg.dsc \
5759 --tagname="$edk2_toolchain" \