From nobody Mon May 6 04:45:27 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1568828566; cv=none; d=zoho.com; s=zohoarc; b=ICUGwXnzVX1rs1tBErU18gUEQQiIoV3aTZ/iRL64SKxsE1E1N3h3q8Miq2n8eqlhfnq+y9M8kzDRwZwVq8yQ75VGfvFtgD6PXLsD/KjNEHEIko76iUVzzShfPpofhp5VkG4zYdLKHfuvN3dSavVtvWan5KhDbRQba1PzEGgnHpo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1568828566; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To:ARC-Authentication-Results; bh=PpDi9BwQSDOYrJDTqG3BrrcM4zjqLM7OClNw0Roa1oA=; b=ZV+sov3yMP6BNFJEH2GH2f+2UTyvayjjm6KUIOZGi4Qhc9cDAZUpYXUAoL++ZmVXOkEDvBmatPdl2p5C3Rmfgno+UmfGyLJmLyT44zv8gCv7yVp6uvqSZbeZQCzxd2D3SjJXtO9SP3VeqK5Jft8Bc6UzgTu68cc1DjWMFutqVMs= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1568828566217685.1234198350187; Wed, 18 Sep 2019 10:42:46 -0700 (PDT) Received: from localhost ([::1]:33484 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iAdyV-0003tc-22 for importer@patchew.org; Wed, 18 Sep 2019 13:42:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36474) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iAdUl-0000OV-7U for qemu-devel@nongnu.org; Wed, 18 Sep 2019 13:12:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iAdUh-0007qt-Nx for qemu-devel@nongnu.org; Wed, 18 Sep 2019 13:11:57 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37080) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iAdUg-0007nv-S2 for qemu-devel@nongnu.org; Wed, 18 Sep 2019 13:11:55 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DD16611A03 for ; Wed, 18 Sep 2019 17:11:51 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-125-22.rdu2.redhat.com [10.10.125.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3BC695C219; Wed, 18 Sep 2019 17:11:44 +0000 (UTC) From: Laszlo Ersek To: qemu devel list Date: Wed, 18 Sep 2019 19:11:41 +0200 Message-Id: <20190918171141.15957-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 18 Sep 2019 17:11:51 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH] edk2 build scripts: work around TianoCore#1607 without forcing Python 2 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , John Snow , Eduardo Habkost Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" 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. 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=C3=A9 Reported-by: John Snow Signed-off-by: Laszlo Ersek Reviewed-by: John Snow Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- Notes: - Tested on RHEL7 (where the outer "make" sets the old-style "--jobserver-fds" flag) and on Fedora 29 (where the outer "make" sets the new-style "--jobserver-auth" flag). =20 - I've rebuilt all the edk2 binaries with this patch applied. Everything works fine. However, if you test this patch, you might notice that git reports all the build products as modified. That's because when using the python3 code in edk2 BaseTools, the generated makefiles differ greatly from the ones generated when running in python2 mode (e.g. due to different random seeds in python hashes / dictionaries). As a result, parts of the firmware volumes / firmware filesystems could appear in a different order than before. This is harmless, and doesn't necessitate checking in the rebuilt binaries. roms/edk2-build.sh | 4 +--- roms/edk2-funcs.sh | 17 +++++++++++++++++ tests/uefi-test-tools/build.sh | 6 +++--- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/roms/edk2-build.sh b/roms/edk2-build.sh index 4f46f8a6a217..8161c55ef507 100755 --- a/roms/edk2-build.sh +++ b/roms/edk2-build.sh @@ -27,9 +27,6 @@ shift $num_args =20 cd edk2 =20 -# Work around . -export PYTHON_COMMAND=3Dpython2 - # Source "edksetup.sh" carefully. set +e +u +C source ./edksetup.sh @@ -43,6 +40,7 @@ fi # any), for the edk2 "build" utility. source ../edk2-funcs.sh edk2_toolchain=3D$(qemu_edk2_get_toolchain "$emulation_target") +MAKEFLAGS=3D$(qemu_edk2_quirk_tianocore_1607 "$MAKEFLAGS") edk2_thread_count=3D$(qemu_edk2_get_thread_count "$MAKEFLAGS") qemu_edk2_set_cross_env "$emulation_target" =20 diff --git a/roms/edk2-funcs.sh b/roms/edk2-funcs.sh index a9fae7ee891b..3f4485b201f1 100644 --- a/roms/edk2-funcs.sh +++ b/roms/edk2-funcs.sh @@ -251,3 +251,20 @@ qemu_edk2_get_thread_count() printf '1\n' fi } + + +# Work around 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=3D"$1" + + printf %s "$makeflags" \ + | LC_ALL=3DC sed --regexp-extended \ + --expression=3D's/--jobserver-(auth|fds)=3D[0-9]+,[0-9]+//' \ + --expression=3D's/-j([0-9]+)?//' +} diff --git a/tests/uefi-test-tools/build.sh b/tests/uefi-test-tools/build.sh index 8aa7935c43bb..eba7964a163b 100755 --- a/tests/uefi-test-tools/build.sh +++ b/tests/uefi-test-tools/build.sh @@ -29,9 +29,6 @@ export PACKAGES_PATH=3D$(realpath -- "$edk2_dir") export WORKSPACE=3D$PWD mkdir -p Conf =20 -# Work around . -export PYTHON_COMMAND=3Dpython2 - # Source "edksetup.sh" carefully. set +e +u +C source "$PACKAGES_PATH/edksetup.sh" @@ -46,12 +43,15 @@ fi source "$edk2_dir/../edk2-funcs.sh" edk2_arch=3D$(qemu_edk2_get_arch "$emulation_target") edk2_toolchain=3D$(qemu_edk2_get_toolchain "$emulation_target") +MAKEFLAGS=3D$(qemu_edk2_quirk_tianocore_1607 "$MAKEFLAGS") +edk2_thread_count=3D$(qemu_edk2_get_thread_count "$MAKEFLAGS") qemu_edk2_set_cross_env "$emulation_target" =20 # Build the UEFI binary mkdir -p log build \ --arch=3D"$edk2_arch" \ + -n "$edk2_thread_count" \ --buildtarget=3DDEBUG \ --platform=3DUefiTestToolsPkg/UefiTestToolsPkg.dsc \ --tagname=3D"$edk2_toolchain" \ --=20 2.19.1.3.g30247aa5d201