When using pytools to build EmulatorPkg, 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: Andrew Fish <af...@apple.com> Cc: Ray Ni <ray...@intel.com> Signed-off-by: Joey Vagedes <joeyvage...@microsoft.com> --- EmulatorPkg/PlatformCI/PlatformBuild.py | 37 ++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/EmulatorPkg/PlatformCI/PlatformBuild.py b/EmulatorPkg/PlatformCI/PlatformBuild.py index 6defbf6ef1..d6d37f6053 100644 --- a/EmulatorPkg/PlatformCI/PlatformBuild.py +++ b/EmulatorPkg/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 ''' @@ -100,7 +104,20 @@ 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 @@ -135,6 +152,7 @@ class SettingsManager(UpdateSettingsManager, SetupSettingsManager, PrEvalSetting class PlatformBuilder(UefiBuilder, BuildSettingsManager): def __init__(self): + self.UseBuiltInBaseTools = None UefiBuilder.__init__(self) def AddCommandLineOptions(self, parserObj): @@ -161,7 +179,22 @@ 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 (#95301): https://edk2.groups.io/g/devel/message/95301 Mute This Topic: https://groups.io/mt/94399355/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-