When using pytools to build ArmVirtPkg, add the ability to dynamically determine which BaseTools to build with. The Pypi BaseTools will be used if present, otherwise defaulting to the in-tree Basetools.
Reference: https://bugzilla.tianocore.org/show_bug.cgi?id=4085 CC: Ard Biesheuvel <ardb+tianoc...@kernel.org> CC: Leif Lindholm <quic_llind...@quicinc.com> CC: Sami Mujawar <sami.muja...@arm.com> CC: Gerd Hoffmann <kra...@redhat.com> Cc: Jiewen Yao <jiewen....@intel.com> Cc: Jordan Justen <jordan.l.jus...@intel.com> Signed-off-by: Joey Vagedes <joeyvage...@microsoft.com> --- ArmVirtPkg/PlatformCI/PlatformBuild.py | 33 ++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/ArmVirtPkg/PlatformCI/PlatformBuild.py b/ArmVirtPkg/PlatformCI/PlatformBuild.py index dff653e919..7ceca8145c 100644 --- a/ArmVirtPkg/PlatformCI/PlatformBuild.py +++ b/ArmVirtPkg/PlatformCI/PlatformBuild.py @@ -7,6 +7,7 @@ import os import logging import io +import importlib from edk2toolext.environment import shell_environment from edk2toolext.environment.uefi_build import UefiBuilder @@ -40,6 +41,9 @@ class CommonPlatform(): class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSettingsManager): + def __init__(self): + self.UseBuiltInBaseTools = None + def GetPackagesSupported(self): ''' return iterable of edk2 packages supported by this build. These should be edk2 workspace relative paths ''' @@ -105,7 +109,18 @@ class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSetting scopes = CommonPlatform.Scopes ActualToolChainTag = shell_environment.GetBuildVars().GetValue("TOOL_CHAIN_TAG", "") - if GetHostInfo().os.upper() == "LINUX" and ActualToolChainTag.upper().startswith("GCC"): + is_linux = GetHostInfo().os.upper() == "LINUX" + + if self.UseBuiltInBaseTools is None: + if importlib.util.find_spec('edk2basetools') is not None: + self.UseBuiltInBaseTools = True + else: + self.UseBuiltInBaseTools = False + + if self.UseBuiltInBaseTools is True: + scopes += ('pipbuild-unix',) if is_linux else ('pipbuild-win',) + + if is_linux and ActualToolChainTag.upper().startswith("GCC"): if "AARCH64" in self.ActualArchitectures: scopes += ("gcc_aarch64_linux",) if "ARM" in self.ActualArchitectures: @@ -149,6 +164,7 @@ class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSetting class PlatformBuilder(UefiBuilder, BuildSettingsManager): def __init__(self): + self.UseBuiltInBaseTools = None UefiBuilder.__init__(self) def AddCommandLineOptions(self, parserObj): @@ -179,7 +195,20 @@ class PlatformBuilder(UefiBuilder, BuildSettingsManager): ActualToolChainTag = shell_environment.GetBuildVars().GetValue("TOOL_CHAIN_TAG", "") Arch = shell_environment.GetBuildVars().GetValue("TARGET_ARCH", "") - if GetHostInfo().os.upper() == "LINUX" and ActualToolChainTag.upper().startswith("GCC"): + is_linux = GetHostInfo().os.upper() == "LINUX" + + if self.UseBuiltInBaseTools is None: + if importlib.util.find_spec('edk2basetools') is not None: + self.UseBuiltInBaseTools = True + logging.warning("Using Pip Tools based BaseTools") + else: + self.UseBuiltInBaseTools = False + logging.warning("Falling back to using in-tree BaseTools") + + if self.UseBuiltInBaseTools is True: + scopes += ('pipbuild-unix',) if is_linux else ('pipbuild-win',) + + if is_linux and ActualToolChainTag.upper().startswith("GCC"): if "AARCH64" == Arch: scopes += ("gcc_aarch64_linux",) elif "ARM" == Arch: -- 2.38.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#95299): https://edk2.groups.io/g/devel/message/95299 Mute This Topic: https://groups.io/mt/94399353/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-