Revision: 17665
http://sourceforge.net/p/edk2/code/17665
Author: yingke
Date: 2015-06-19 01:43:45 +0000 (Fri, 19 Jun 2015)
Log Message:
-----------
BaseTools: Fixed Build Option override bugs.
if '==' is specified, it overrides all options that specified by '='; if no
'==' is specified, all options that match current build criteria are combined.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yingke Liu <[email protected]>
Reviewed-by: Liming Gao <[email protected]>
Modified Paths:
--------------
trunk/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py
trunk/edk2/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
Modified: trunk/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py
===================================================================
--- trunk/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py 2015-06-19
01:12:20 UTC (rev 17664)
+++ trunk/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py 2015-06-19
01:43:45 UTC (rev 17665)
@@ -1963,7 +1963,8 @@
# Key[0] -- tool family
# Key[1] -- TARGET_TOOLCHAIN_ARCH_COMMANDTYPE_ATTRIBUTE
#
- if Key[0] == self.BuildRuleFamily :
+ if (Key[0] == self.BuildRuleFamily and
+ (ModuleStyle == None or len(Key) < 3 or (len(Key) > 2 and
Key[2] == ModuleStyle))):
Target, ToolChain, Arch, CommandType, Attr = Key[1].split('_')
if Target == self.BuildTarget or Target == "*":
if ToolChain == self.ToolChain or ToolChain == "*":
@@ -1999,7 +2000,7 @@
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.
@@ -2025,7 +2026,9 @@
if Arch == "*" or Arch == self.Arch:
if Tool not in BuildOptions:
BuildOptions[Tool] = {}
- if Attr != "FLAGS" or Attr not in BuildOptions[Tool]:
+ if Options[Key].startswith('='):
+ OverrideOpt.add((Tool, Attr))
+ if Attr != "FLAGS" or Attr not in BuildOptions[Tool]
or (Tool, Attr) in OverrideOpt:
BuildOptions[Tool][Attr] = Options[Key]
else:
# append options for the same tool
@@ -2033,7 +2036,8 @@
# Build Option Family has been checked, which need't to be checked
again for family.
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.
@@ -2057,7 +2061,9 @@
if Arch == "*" or Arch == self.Arch:
if Tool not in BuildOptions:
BuildOptions[Tool] = {}
- if Attr != "FLAGS" or Attr not in BuildOptions[Tool]:
+ if Options[Key].startswith('='):
+ OverrideOpt.add((Tool, Attr))
+ if Attr != "FLAGS" or Attr not in BuildOptions[Tool]
or (Tool, Attr) in OverrideOpt:
BuildOptions[Tool][Attr] = Options[Key]
else:
# append options for the same tool
@@ -2097,6 +2103,7 @@
PlatformModuleOptions.keys() + ModuleTypeOptions.keys()
+
self.ToolDefinition.keys())
BuildOptions = {}
+ OverrideTool = set()
for Tool in AllTools:
if Tool not in BuildOptions:
BuildOptions[Tool] = {}
@@ -2115,8 +2122,9 @@
BuildOptions[Tool][Attr] = ""
# check if override is indicated
if Value.startswith('='):
+ OverrideTool.add((Tool, Attr))
BuildOptions[Tool][Attr] = Value[1:]
- else:
+ elif (Tool, Attr) not in OverrideTool:
BuildOptions[Tool][Attr] += " " + Value
if Module.AutoGenVersion < 0x00010005 and self.Workspace.UniFlag !=
None:
#
Modified: trunk/edk2/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
===================================================================
--- trunk/edk2/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
2015-06-19 01:12:20 UTC (rev 17664)
+++ trunk/edk2/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
2015-06-19 01:43:45 UTC (rev 17665)
@@ -753,19 +753,24 @@
## Retrieve [BuildOptions]
def _GetBuildOptions(self):
if self._BuildOptions == None:
+ OverrideTool = set()
self._BuildOptions = sdict()
#
- # Retrieve build option for EDKII style module
+ # Retrieve build option for EDKII and EDK style module
#
- RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION,
self._Arch, EDKII_NAME]
- for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3,
Dummy4 in RecordList:
- self._BuildOptions[ToolChainFamily, ToolChain, EDKII_NAME] =
Option
- #
- # Retrieve build option for EDK style module
- #
- RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION,
self._Arch, EDK_NAME]
- for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3,
Dummy4 in RecordList:
- self._BuildOptions[ToolChainFamily, ToolChain, EDK_NAME] =
Option
+ for CodeBase in (EDKII_NAME, EDK_NAME):
+ 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:
+ self._BuildOptions[CurKey] = Option
+ else:
+ self._BuildOptions[CurKey] += ' ' + Option
return self._BuildOptions
def GetBuildOptionsByModuleType(self, Edk, ModuleType):
@@ -773,12 +778,19 @@
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:
- options[ToolChainFamily, ToolChain, Edk] = Option
+ Key = (ToolChainFamily, ToolChain, Edk)
+ if Option.startswith('='):
+ OverrideTool.add(Key)
+ if Key not in options or not ToolChain.endswith('_FLAGS')
or Key in OverrideTool:
+ options[Key] = Option
+ else:
+ options[Key] += ' ' + Option
return self._ModuleTypeOptions[Edk, ModuleType]
## Retrieve non-dynamic PCD settings
@@ -2007,7 +2019,7 @@
if self._Header_ == None:
self._GetHeaderInfo()
if self._Guid == None:
- self._Guid = '00000000-0000-0000-000000000000'
+ self._Guid = '00000000-0000-0000-0000-000000000000'
return self._Guid
## Retrieve module version
------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits