From 8c8f49f0dc86e3c58d94766e6b194b83c1bef5c9 Mon Sep 17 00:00:00 2001 From: Michael D Kinney Date: Thu, 29 Apr 2021 19:01:05 -0700 Subject: [PATCH] BaseTools: Fix New Target/ToolChain/Arch in DSC [BuildOptions] issues REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3359 * Save/Restore global state in GetToolChainAndFamilyFromDsc() This resolves an issue where the multi-arch build for UefiPayloadPkg would skip the autogen and build of IA32 components. * Expand tools wildcard. This resolves the issue where autogen makefile contents would have a BUIDLRULEFAMILY tools definitions with an '*' in the tool field that breaks the build from invalid makefile syntax. * Build rule family higher priority than Family. This resolves the issue where flags were appended from both the BUILDRULEFAMILY and FAMILY when only BUILDRULEFAMILY should be appended when present. Cc: Bob Feng Cc: Liming Gao Cc: Yuwei Chen Cc: Ray Ni Cc: Steven Shi Signed-off-by: Michael D Kinney Acked-by: Rebecca Cran Reviewed-by: Andrew Fish --- .../Python/AutoGen/ModuleAutoGenHelper.py | 27 +++++++++---------- .../Source/Python/AutoGen/PlatformAutoGen.py | 27 +++++++++---------- BaseTools/Source/Python/build/build.py | 2 ++ 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py b/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py index 167bb59d23..036fdac3d7 100644 --- a/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py +++ b/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py @@ -181,20 +181,12 @@ class AutoGenInfo(object): if Family == ToolDef[Tool][TAB_TOD_DEFINES_BUILDRULEFAMILY]: FamilyMatch = True Found = True - if TAB_TOD_DEFINES_FAMILY in ToolDef[Tool]: - if Family == ToolDef[Tool][TAB_TOD_DEFINES_FAMILY]: - FamilyMatch = True - Found = True if TAB_STAR in ToolDef: FamilyIsNull = False if TAB_TOD_DEFINES_BUILDRULEFAMILY in ToolDef[TAB_STAR]: if Family == ToolDef[TAB_STAR][TAB_TOD_DEFINES_BUILDRULEFAMILY]: FamilyMatch = True Found = True - if TAB_TOD_DEFINES_FAMILY in ToolDef[TAB_STAR]: - if Family == ToolDef[TAB_STAR][TAB_TOD_DEFINES_FAMILY]: - FamilyMatch = True - Found = True if not Found: continue # expand any wildcard @@ -640,14 +632,19 @@ class PlatformInfo(AutoGenInfo): if Attr == TAB_TOD_DEFINES_BUILDRULEORDER: continue Value = Options[Tool][Attr] - # check if override is indicated - if Value.startswith('='): - BuildOptions[Tool][Attr] = mws.handleWsMacro(Value[1:]) - else: - if Attr != 'PATH': - BuildOptions[Tool][Attr] += " " + mws.handleWsMacro(Value) + ToolList = [Tool] + if Tool == TAB_STAR: + ToolList = list(AllTools) + ToolList.remove(TAB_STAR) + for ExpandedTool in ToolList: + # check if override is indicated + if Value.startswith('='): + BuildOptions[ExpandedTool][Attr] = mws.handleWsMacro(Value[1:]) else: - BuildOptions[Tool][Attr] = mws.handleWsMacro(Value) + if Attr != 'PATH': + BuildOptions[ExpandedTool][Attr] += " " + mws.handleWsMacro(Value) + else: + BuildOptions[ExpandedTool][Attr] = mws.handleWsMacro(Value) return BuildOptions, BuildRuleOrder diff --git a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py index 21e72438e5..832c0da86b 100644 --- a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py +++ b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py @@ -1391,14 +1391,19 @@ class PlatformAutoGen(AutoGen): if Attr == TAB_TOD_DEFINES_BUILDRULEORDER: continue Value = Options[Tool][Attr] - # check if override is indicated - if Value.startswith('='): - BuildOptions[Tool][Attr] = mws.handleWsMacro(Value[1:]) - else: - if Attr != 'PATH': - BuildOptions[Tool][Attr] += " " + mws.handleWsMacro(Value) + ToolList = [Tool] + if Tool == TAB_STAR: + ToolList = list(AllTools) + ToolList.remove(TAB_STAR) + for ExpandedTool in ToolList: + # check if override is indicated + if Value.startswith('='): + BuildOptions[ExpandedTool][Attr] = mws.handleWsMacro(Value[1:]) else: - BuildOptions[Tool][Attr] = mws.handleWsMacro(Value) + if Attr != 'PATH': + BuildOptions[ExpandedTool][Attr] += " " + mws.handleWsMacro(Value) + else: + BuildOptions[ExpandedTool][Attr] = mws.handleWsMacro(Value) return BuildOptions, BuildRuleOrder @@ -1529,20 +1534,12 @@ class PlatformAutoGen(AutoGen): if Family == ToolDef[Tool][TAB_TOD_DEFINES_BUILDRULEFAMILY]: FamilyMatch = True Found = True - if TAB_TOD_DEFINES_FAMILY in ToolDef[Tool]: - if Family == ToolDef[Tool][TAB_TOD_DEFINES_FAMILY]: - FamilyMatch = True - Found = True if TAB_STAR in ToolDef: FamilyIsNull = False if TAB_TOD_DEFINES_BUILDRULEFAMILY in ToolDef[TAB_STAR]: if Family == ToolDef[TAB_STAR][TAB_TOD_DEFINES_BUILDRULEFAMILY]: FamilyMatch = True Found = True - if TAB_TOD_DEFINES_FAMILY in ToolDef[TAB_STAR]: - if Family == ToolDef[TAB_STAR][TAB_TOD_DEFINES_FAMILY]: - FamilyMatch = True - Found = True if not Found: continue diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 0570c29f1a..e5693c0d27 100755 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -897,6 +897,7 @@ class Build(): # $(TARGET), $(TOOLCHAIN), $(TOOLCHAIN_TAG), or $(ARCH) operands. # def GetToolChainAndFamilyFromDsc (self, File): + SavedGlobalDefines = GlobalData.gGlobalDefines.copy() for BuildTarget in self.BuildTargetList: GlobalData.gGlobalDefines['TARGET'] = BuildTarget for BuildToolChain in self.ToolChainList: @@ -929,6 +930,7 @@ class Build(): self.ToolDef.ToolsDefTxtDatabase[TAB_TOD_DEFINES_TOOL_CHAIN_TAG] = [] if ToolChain not in self.ToolDef.ToolsDefTxtDatabase[TAB_TOD_DEFINES_TOOL_CHAIN_TAG]: self.ToolDef.ToolsDefTxtDatabase[TAB_TOD_DEFINES_TOOL_CHAIN_TAG].append(ToolChain) + GlobalData.gGlobalDefines = SavedGlobalDefines ## Load configuration # -- 2.39.2