From 5015bee226c293c32c9ef2cc7669826edb5a0aed Mon Sep 17 00:00:00 2001 From: Yingke Liu Date: Thu, 2 Jul 2015 03:42:34 +0000 Subject: [PATCH] BaseTools: Fixed BuildOptions bug. The BuildOptions in an INF should also follow override rule: If '==' is used, all previous options are overridden. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yingke Liu Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17796 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/Python/AutoGen/AutoGen.py | 14 +++----------- .../Source/Python/Workspace/WorkspaceDatabase.py | 14 ++++---------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 7fb1a8889a..259abc519b 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -2000,7 +2000,6 @@ class PlatformAutoGen(AutoGen): if Options.get((self.BuildRuleFamily, NowKey)) != None: Options.pop((self.BuildRuleFamily, NowKey)) - OverrideOpt = set() for Key in Options: if ModuleStyle != None and len (Key) > 2: # Check Module style is EDK or EDKII. @@ -2026,9 +2025,7 @@ class PlatformAutoGen(AutoGen): if Arch == "*" or Arch == self.Arch: if Tool not in BuildOptions: BuildOptions[Tool] = {} - if Options[Key].startswith('='): - OverrideOpt.add((Tool, Attr)) - if Attr != "FLAGS" or Attr not in BuildOptions[Tool] or (Tool, Attr) in OverrideOpt: + if Attr != "FLAGS" or Attr not in BuildOptions[Tool] or Options[Key].startswith('='): BuildOptions[Tool][Attr] = Options[Key] else: # append options for the same tool @@ -2037,7 +2034,6 @@ class PlatformAutoGen(AutoGen): if FamilyMatch or FamilyIsNull: return BuildOptions - OverrideOpt = set() for Key in Options: if ModuleStyle != None and len (Key) > 2: # Check Module style is EDK or EDKII. @@ -2061,9 +2057,7 @@ class PlatformAutoGen(AutoGen): if Arch == "*" or Arch == self.Arch: if Tool not in BuildOptions: BuildOptions[Tool] = {} - if Options[Key].startswith('='): - OverrideOpt.add((Tool, Attr)) - if Attr != "FLAGS" or Attr not in BuildOptions[Tool] or (Tool, Attr) in OverrideOpt: + if Attr != "FLAGS" or Attr not in BuildOptions[Tool] or Options[Key].startswith('='): BuildOptions[Tool][Attr] = Options[Key] else: # append options for the same tool @@ -2103,7 +2097,6 @@ class PlatformAutoGen(AutoGen): PlatformModuleOptions.keys() + ModuleTypeOptions.keys() + self.ToolDefinition.keys()) BuildOptions = {} - OverrideTool = set() for Tool in AllTools: if Tool not in BuildOptions: BuildOptions[Tool] = {} @@ -2122,9 +2115,8 @@ class PlatformAutoGen(AutoGen): BuildOptions[Tool][Attr] = "" # check if override is indicated if Value.startswith('='): - OverrideTool.add((Tool, Attr)) BuildOptions[Tool][Attr] = Value[1:] - elif (Tool, Attr) not in OverrideTool: + else: BuildOptions[Tool][Attr] += " " + Value if Module.AutoGenVersion < 0x00010005 and self.Workspace.UniFlag != None: # diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py index 9da6ac7a41..fd10c5dfb9 100644 --- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py +++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py @@ -753,7 +753,6 @@ class DscBuildData(PlatformBuildClassObject): ## Retrieve [BuildOptions] def _GetBuildOptions(self): if self._BuildOptions == None: - OverrideTool = set() self._BuildOptions = sdict() # # Retrieve build option for EDKII and EDK style module @@ -762,12 +761,10 @@ class DscBuildData(PlatformBuildClassObject): RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, CodeBase] for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: CurKey = (ToolChainFamily, ToolChain, CodeBase) - if Option.startswith('='): - OverrideTool.add(CurKey) # # Only flags can be appended # - if CurKey not in self._BuildOptions or not ToolChain.endswith('_FLAGS') or CurKey in OverrideTool: + if CurKey not in self._BuildOptions or not ToolChain.endswith('_FLAGS') or Option.startswith('='): self._BuildOptions[CurKey] = Option else: self._BuildOptions[CurKey] += ' ' + Option @@ -778,16 +775,13 @@ class DscBuildData(PlatformBuildClassObject): self._ModuleTypeOptions = sdict() if (Edk, ModuleType) not in self._ModuleTypeOptions: options = sdict() - OverrideTool = set() self._ModuleTypeOptions[Edk, ModuleType] = options DriverType = '%s.%s' % (Edk, ModuleType) RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, DriverType] for ToolChainFamily, ToolChain, Option, Arch, Type, Dummy3, Dummy4 in RecordList: - if Arch == self._Arch and Type == DriverType: + if Type == DriverType: Key = (ToolChainFamily, ToolChain, Edk) - if Option.startswith('='): - OverrideTool.add(Key) - if Key not in options or not ToolChain.endswith('_FLAGS') or Key in OverrideTool: + if Key not in options or not ToolChain.endswith('_FLAGS') or Option.startswith('='): options[Key] = Option else: options[Key] += ' ' + Option @@ -2399,7 +2393,7 @@ class InfBuildData(ModuleBuildClassObject): ToolChainFamily = Record[0] ToolChain = Record[1] Option = Record[2] - if (ToolChainFamily, ToolChain) not in self._BuildOptions: + if (ToolChainFamily, ToolChain) not in self._BuildOptions or Option.startswith('='): self._BuildOptions[ToolChainFamily, ToolChain] = Option else: # concatenate the option string if they're for the same tool -- 2.39.2