When using pytools to build OvmfPkg, 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: Jiewen Yao <jiewen....@intel.com> Cc: Jordan Justen <jordan.l.jus...@intel.com> Cc: Gerd Hoffmann <kra...@redhat.com> Signed-off-by: Joey Vagedes <joeyvage...@microsoft.com> --- OvmfPkg/PlatformCI/PlatformBuildLib.py | 37 ++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/OvmfPkg/PlatformCI/PlatformBuildLib.py b/OvmfPkg/PlatformCI/PlatformBuildLib.py index bfef9849c7..d030216dff 100644 --- a/OvmfPkg/PlatformCI/PlatformBuildLib.py +++ b/OvmfPkg/PlatformCI/PlatformBuildLib.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 @@ -14,7 +15,7 @@ from edk2toolext.invocables.edk2_platform_build import BuildSettingsManager from edk2toolext.invocables.edk2_setup import SetupSettingsManager, RequiredSubmodule from edk2toolext.invocables.edk2_update import UpdateSettingsManager from edk2toolext.invocables.edk2_pr_eval import PrEvalSettingsManager -from edk2toollib.utility_functions import RunCmd +from edk2toollib.utility_functions import RunCmd, GetHostInfo # ####################################################################################### # @@ -22,6 +23,9 @@ from edk2toollib.utility_functions import RunCmd # ####################################################################################### # 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 ''' @@ -81,7 +85,19 @@ class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSetting def GetActiveScopes(self): ''' return tuple containing scopes that should be active for this process ''' - return CommonPlatform.Scopes + + scopes = CommonPlatform.Scopes + 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',) + + return scopes def FilterPackagesToTest(self, changedFilesList: list, potentialPackagesList: list) -> list: ''' Filter other cases that this package should be built @@ -118,6 +134,7 @@ class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSetting # ####################################################################################### # class PlatformBuilder( UefiBuilder, BuildSettingsManager): def __init__(self): + self.UseBuiltInBaseTools = None UefiBuilder.__init__(self) def AddCommandLineOptions(self, parserObj): @@ -144,7 +161,21 @@ class PlatformBuilder( UefiBuilder, BuildSettingsManager): def GetActiveScopes(self): ''' return tuple containing scopes that should be active for this process ''' - return CommonPlatform.Scopes + + scopes = CommonPlatform.Scopes + 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',) + + return scopes def GetName(self): ''' Get the name of the repo, platform, or product being build ''' -- 2.38.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#95300): https://edk2.groups.io/g/devel/message/95300 Mute This Topic: https://groups.io/mt/94399354/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-