Skip to content

Commit

Permalink
edk2 build scripts: work around TianoCore#1607 without forcing Python 2
Browse files Browse the repository at this point in the history
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 <[email protected]>
Cc: John Snow <[email protected]>
Cc: Philippe Mathieu-Daudé <[email protected]>
Reported-by: John Snow <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Tested-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: John Snow <[email protected]>
Signed-off-by: Laszlo Ersek <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
  • Loading branch information
lersek authored and philmd committed Oct 7, 2019
1 parent 53fde08 commit 037973b
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 4 deletions.
1 change: 1 addition & 0 deletions roms/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ build-efi-roms: build-pxe-roms
#
edk2-basetools:
$(MAKE) -C edk2/BaseTools \
PYTHON_COMMAND=$${EDK2_PYTHON_COMMAND:-python3} \
EXTRA_OPTFLAGS='$(EDK2_BASETOOLS_OPTFLAGS)' \
EXTRA_LDFLAGS='$(EDK2_BASETOOLS_LDFLAGS)'

Expand Down
4 changes: 2 additions & 2 deletions roms/edk2-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ shift $num_args

cd edk2

# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607>.
export PYTHON_COMMAND=python2
export PYTHON_COMMAND=${EDK2_PYTHON_COMMAND:-python3}

# Source "edksetup.sh" carefully.
set +e +u +C
Expand All @@ -43,6 +42,7 @@ fi
# any), for the edk2 "build" utility.
source ../edk2-funcs.sh
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"

Expand Down
17 changes: 17 additions & 0 deletions roms/edk2-funcs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -251,3 +251,20 @@ qemu_edk2_get_thread_count()
printf '1\n'
fi
}


# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607> by
# filtering jobserver-related flags out of MAKEFLAGS. Print the result to the
# standard output.
#
# Parameters:
# $1: the value of the MAKEFLAGS variable
qemu_edk2_quirk_tianocore_1607()
{
local makeflags="$1"

printf %s "$makeflags" \
| LC_ALL=C sed --regexp-extended \
--expression='s/--jobserver-(auth|fds)=[0-9]+,[0-9]+//' \
--expression='s/-j([0-9]+)?//'
}
1 change: 1 addition & 0 deletions tests/uefi-test-tools/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)'

Expand Down
6 changes: 4 additions & 2 deletions tests/uefi-test-tools/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ export PACKAGES_PATH=$(realpath -- "$edk2_dir")
export WORKSPACE=$PWD
mkdir -p Conf

# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607>.
export PYTHON_COMMAND=python2
export PYTHON_COMMAND=${EDK2_PYTHON_COMMAND:-python3}

# Source "edksetup.sh" carefully.
set +e +u +C
Expand All @@ -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" \
Expand Down

0 comments on commit 037973b

Please sign in to comment.