from GenVar import VariableMgr,var_info\r
from collections import OrderedDict\r
from collections import defaultdict\r
+from Workspace.WorkspaceCommon import OrderedListDict\r
\r
## Regular expression for splitting Dependency Expression string into tokens\r
gDepexTokenPattern = re.compile("(\(|\)|\w+| \S+\.inf)")\r
'build',\r
FORMAT_INVALID,\r
"Building modules from source INFs, following PCD use %s and %s access method. It must be corrected to use only one access method." % (i, j),\r
- ExtraData="%s" % '\n\t'.join(str(P[1]+'.'+P[0]) for P in Intersections)\r
+ ExtraData='\n\t'.join(str(P[1]+'.'+P[0]) for P in Intersections)\r
)\r
\r
#\r
#\r
if self.FdfFile:\r
AllWorkSpaceMetaFiles.add (self.FdfFile.Path)\r
- if self.FdfFile:\r
- FdfFiles = GlobalData.gFdfParser.GetAllIncludedFile()\r
- for f in FdfFiles:\r
- AllWorkSpaceMetaFiles.add (f.FileName)\r
+ for f in GlobalData.gFdfParser.GetAllIncludedFile():\r
+ AllWorkSpaceMetaFiles.add (f.FileName)\r
#\r
# add dsc\r
#\r
AllWorkSpaceMetaFiles.add(os.path.join(self.BuildDir, 'PcdTokenNumber'))\r
\r
for Arch in self.ArchList:\r
- Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
- PGen = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch)\r
-\r
#\r
# add dec\r
#\r
- for Package in PGen.PackageList:\r
+ for Package in PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch).PackageList:\r
AllWorkSpaceMetaFiles.add(Package.MetaFile.Path)\r
\r
#\r
# add included dsc\r
#\r
- for filePath in Platform._RawData.IncludedFiles:\r
+ for filePath in self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]._RawData.IncludedFiles:\r
AllWorkSpaceMetaFiles.add(filePath.Path)\r
\r
return AllWorkSpaceMetaFiles\r
\r
\r
def _CheckPcdDefineAndType(self):\r
- PcdTypeList = [\r
- TAB_PCDS_FIXED_AT_BUILD, TAB_PCDS_PATCHABLE_IN_MODULE, TAB_PCDS_FEATURE_FLAG,\r
- TAB_PCDS_DYNAMIC, #TAB_PCDS_DYNAMIC_HII, TAB_PCDS_DYNAMIC_VPD,\r
- TAB_PCDS_DYNAMIC_EX, # TAB_PCDS_DYNAMIC_EX_HII, TAB_PCDS_DYNAMIC_EX_VPD\r
- ]\r
+ PcdTypeSet = {TAB_PCDS_FIXED_AT_BUILD,\r
+ TAB_PCDS_PATCHABLE_IN_MODULE,\r
+ TAB_PCDS_FEATURE_FLAG,\r
+ TAB_PCDS_DYNAMIC,\r
+ TAB_PCDS_DYNAMIC_EX}\r
\r
# This dict store PCDs which are not used by any modules with specified arches\r
UnusedPcd = OrderedDict()\r
# Key of DEC's Pcds dictionary is PcdCName, TokenSpaceGuid, PcdType\r
if (Pcd[0], Pcd[1], PcdType) in Package.Pcds:\r
break\r
- for Type in PcdTypeList:\r
+ for Type in PcdTypeSet:\r
if (Pcd[0], Pcd[1], Type) in Package.Pcds:\r
EdkLogger.error(\r
'build',\r
# modules will be created as well\r
#\r
def CreateMakeFile(self, CreateDepsMakeFile=False):\r
- if CreateDepsMakeFile:\r
- for Pa in self.AutoGenObjectList:\r
- Pa.CreateMakeFile(CreateDepsMakeFile)\r
+ if not CreateDepsMakeFile:\r
+ return\r
+ for Pa in self.AutoGenObjectList:\r
+ Pa.CreateMakeFile(True)\r
\r
## Create autogen code for platform and modules\r
#\r
if not CreateDepsCodeFile:\r
return\r
for Pa in self.AutoGenObjectList:\r
- Pa.CreateCodeFile(CreateDepsCodeFile)\r
+ Pa.CreateCodeFile(True)\r
\r
## Create AsBuilt INF file the platform\r
#\r
del self.Platform.Pcds[key]\r
self.Platform.Pcds[newkey] = Value\r
break\r
- else:\r
- pass\r
break\r
- else:\r
- pass\r
\r
# for gathering error information\r
NoDatumTypePcdList = set()\r
PcdNvStoreDfBuffer.SkuInfoList[skuname].DefaultValue = vardump\r
PcdNvStoreDfBuffer.MaxDatumSize = str(len(vardump.split(",")))\r
\r
- PlatformPcds = self._PlatformPcds.keys()\r
- PlatformPcds.sort()\r
+ PlatformPcds = sorted(self._PlatformPcds.keys())\r
#\r
# Add VPD type PCD into VpdFile and determine whether the VPD PCD need to be fixed up.\r
#\r
if Flags.startswith('='):\r
self._BuildCommand = [self._BuildCommand[0]] + [Flags[1:]]\r
else:\r
- self._BuildCommand += [Flags]\r
+ self._BuildCommand.append(Flags)\r
return self._BuildCommand\r
\r
## Get tool chain definition\r
# TokeNumber 11 ~ 20\r
#\r
for Pcd in self.DynamicPcdList:\r
- if Pcd.Phase == "PEI":\r
- if Pcd.Type in PCD_DYNAMIC_TYPE_SET:\r
- EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
- self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
- TokenNumber += 1\r
+ if Pcd.Phase == "PEI" and Pcd.Type in PCD_DYNAMIC_TYPE_SET:\r
+ EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
+ self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
+ TokenNumber += 1\r
\r
for Pcd in self.DynamicPcdList:\r
- if Pcd.Phase == "PEI":\r
- if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
- EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
- self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
- TokenNumber += 1\r
+ if Pcd.Phase == "PEI" and Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
+ EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
+ self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
+ TokenNumber += 1\r
\r
for Pcd in self.DynamicPcdList:\r
- if Pcd.Phase == "DXE":\r
- if Pcd.Type in PCD_DYNAMIC_TYPE_SET:\r
- EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
- self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
- TokenNumber += 1\r
+ if Pcd.Phase == "DXE" and Pcd.Type in PCD_DYNAMIC_TYPE_SET:\r
+ EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
+ self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
+ TokenNumber += 1\r
\r
for Pcd in self.DynamicPcdList:\r
- if Pcd.Phase == "DXE":\r
- if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
- EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
- self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
- TokenNumber += 1\r
+ if Pcd.Phase == "DXE" and Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
+ EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))\r
+ self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
+ TokenNumber += 1\r
\r
for Pcd in self.NonDynamicPcdList:\r
self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber\r
if FromPcd is not None:\r
if ToPcd.Pending and FromPcd.Type:\r
ToPcd.Type = FromPcd.Type\r
- elif (ToPcd.Type) and (FromPcd.Type)\\r
- and (ToPcd.Type != FromPcd.Type) and (ToPcd.Type in FromPcd.Type):\r
+ elif ToPcd.Type and FromPcd.Type\\r
+ and ToPcd.Type != FromPcd.Type and ToPcd.Type in FromPcd.Type:\r
if ToPcd.Type.strip() == TAB_PCDS_DYNAMIC_EX:\r
ToPcd.Type = FromPcd.Type\r
elif ToPcd.Type and FromPcd.Type \\r
if (Key[0] == self.BuildRuleFamily and\r
(ModuleStyle is None or len(Key) < 3 or (len(Key) > 2 and Key[2] == ModuleStyle))):\r
Target, ToolChain, Arch, CommandType, Attr = Key[1].split('_')\r
- if Target == self.BuildTarget or Target == "*":\r
- if ToolChain == self.ToolChain or ToolChain == "*":\r
- if Arch == self.Arch or Arch == "*":\r
- if Options[Key].startswith("="):\r
- if OverrideList.get(Key[1]) is not None:\r
- OverrideList.pop(Key[1])\r
- OverrideList[Key[1]] = Options[Key]\r
+ if (Target == self.BuildTarget or Target == "*") and\\r
+ (ToolChain == self.ToolChain or ToolChain == "*") and\\r
+ (Arch == self.Arch or Arch == "*") and\\r
+ Options[Key].startswith("="):\r
+\r
+ if OverrideList.get(Key[1]) is not None:\r
+ OverrideList.pop(Key[1])\r
+ OverrideList[Key[1]] = Options[Key]\r
\r
#\r
# Use the highest priority value. \r
# Compare two Key, if one is included by another, choose the higher priority one\r
# \r
Target2, ToolChain2, Arch2, CommandType2, Attr2 = NextKey.split("_")\r
- if Target1 == Target2 or Target1 == "*" or Target2 == "*":\r
- if ToolChain1 == ToolChain2 or ToolChain1 == "*" or ToolChain2 == "*":\r
- if Arch1 == Arch2 or Arch1 == "*" or Arch2 == "*":\r
- if CommandType1 == CommandType2 or CommandType1 == "*" or CommandType2 == "*":\r
- if Attr1 == Attr2 or Attr1 == "*" or Attr2 == "*":\r
- if self.CalculatePriorityValue(NowKey) > self.CalculatePriorityValue(NextKey):\r
- if Options.get((self.BuildRuleFamily, NextKey)) is not None:\r
- Options.pop((self.BuildRuleFamily, NextKey))\r
- else:\r
- if Options.get((self.BuildRuleFamily, NowKey)) is not None:\r
- Options.pop((self.BuildRuleFamily, NowKey))\r
+ if (Target1 == Target2 or Target1 == "*" or Target2 == "*") and\\r
+ (ToolChain1 == ToolChain2 or ToolChain1 == "*" or ToolChain2 == "*") and\\r
+ (Arch1 == Arch2 or Arch1 == "*" or Arch2 == "*") and\\r
+ (CommandType1 == CommandType2 or CommandType1 == "*" or CommandType2 == "*") and\\r
+ (Attr1 == Attr2 or Attr1 == "*" or Attr2 == "*"):\r
+\r
+ if self.CalculatePriorityValue(NowKey) > self.CalculatePriorityValue(NextKey):\r
+ if Options.get((self.BuildRuleFamily, NextKey)) is not None:\r
+ Options.pop((self.BuildRuleFamily, NextKey))\r
+ else:\r
+ if Options.get((self.BuildRuleFamily, NowKey)) is not None:\r
+ Options.pop((self.BuildRuleFamily, NowKey))\r
\r
for Key in Options:\r
if ModuleStyle is not None and len (Key) > 2:\r
LibraryAutoGenList = property(_GetLibraryAutoGenList)\r
GenFdsCommand = property(_GenFdsCommand)\r
\r
+#\r
+# extend lists contained in a dictionary with lists stored in another dictionary\r
+# if CopyToDict is not derived from DefaultDict(list) then this may raise exception\r
+#\r
+def ExtendCopyDictionaryLists(CopyToDict, CopyFromDict):\r
+ for Key in CopyFromDict:\r
+ CopyToDict[Key].extend(CopyFromDict[Key])\r
+\r
+\r
## ModuleAutoGen class\r
#\r
# This class encapsules the AutoGen behaviors for the build tools. In addition to\r
self._MakeFileDir = None\r
\r
self._IncludePathList = None\r
- self._IncludePathLength = 0\r
self._AutoGenFileList = None\r
self._UnicodeFileList = None\r
self._VfrFileList = None\r
self._DerivedPackageList = None\r
self._ModulePcdList = None\r
self._LibraryPcdList = None\r
- self._PcdComments = OrderedDict()\r
+ self._PcdComments = OrderedListDict()\r
self._GuidList = None\r
self._GuidsUsedByPcd = None\r
- self._GuidComments = OrderedDict()\r
+ self._GuidComments = OrderedListDict()\r
self._ProtocolList = None\r
- self._ProtocolComments = OrderedDict()\r
+ self._ProtocolComments = OrderedListDict()\r
self._PpiList = None\r
- self._PpiComments = OrderedDict()\r
- self._DepexList = None\r
- self._DepexExpressionList = None\r
+ self._PpiComments = OrderedListDict()\r
+ self._DepexDict = None\r
+ self._DepexExpressionDict = None\r
self._BuildOption = None\r
self._BuildOptionIncPathList = None\r
self._BuildTargets = None\r
# \r
self._FixedAtBuildPcds = []\r
self.ConstPcd = {}\r
- return True\r
\r
def __repr__(self):\r
return "%s [%s]" % (self.MetaFile, self.Arch)\r
## Check if the module is library or not\r
def _IsLibrary(self):\r
if self._LibraryFlag is None:\r
- if self.Module.LibraryClass is not None and self.Module.LibraryClass != []:\r
- self._LibraryFlag = True\r
- else:\r
- self._LibraryFlag = False\r
+ self._LibraryFlag = True if self.Module.LibraryClass else False\r
return self._LibraryFlag\r
\r
## Check if the module is binary module or not\r
# @retval list The token list of the dependency expression after parsed\r
#\r
def _GetDepexTokenList(self):\r
- if self._DepexList is None:\r
- self._DepexList = {}\r
+ if self._DepexDict is None:\r
+ self._DepexDict = {}\r
if self.DxsFile or self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:\r
- return self._DepexList\r
+ return self._DepexDict\r
\r
- self._DepexList[self.ModuleType] = []\r
+ self._DepexDict[self.ModuleType] = []\r
\r
- for ModuleType in self._DepexList:\r
- DepexList = self._DepexList[ModuleType]\r
+ for ModuleType in self._DepexDict:\r
+ DepexList = self._DepexDict[ModuleType]\r
#\r
# Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion\r
#\r
break\r
if len(DepexList) > 0:\r
EdkLogger.verbose('')\r
- return self._DepexList\r
+ return self._DepexDict\r
\r
## Merge dependency expression\r
#\r
# @retval list The token list of the dependency expression after parsed\r
#\r
def _GetDepexExpressionTokenList(self):\r
- if self._DepexExpressionList is None:\r
- self._DepexExpressionList = {}\r
+ if self._DepexExpressionDict is None:\r
+ self._DepexExpressionDict = {}\r
if self.DxsFile or self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:\r
- return self._DepexExpressionList\r
+ return self._DepexExpressionDict\r
\r
- self._DepexExpressionList[self.ModuleType] = ''\r
+ self._DepexExpressionDict[self.ModuleType] = ''\r
\r
- for ModuleType in self._DepexExpressionList:\r
- DepexExpressionList = self._DepexExpressionList[ModuleType]\r
+ for ModuleType in self._DepexExpressionDict:\r
+ DepexExpressionString = self._DepexExpressionDict[ModuleType]\r
#\r
# Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion\r
#\r
for M in [self.Module] + self.DependentLibraryList:\r
Inherited = False\r
for D in M.DepexExpression[self.Arch, ModuleType]:\r
- if DepexExpressionList != '':\r
- DepexExpressionList += ' AND '\r
- DepexExpressionList += '('\r
- DepexExpressionList += D\r
- DepexExpressionList = DepexExpressionList.rstrip('END').strip()\r
- DepexExpressionList += ')'\r
+ if DepexExpressionString != '':\r
+ DepexExpressionString += ' AND '\r
+ DepexExpressionString += '('\r
+ DepexExpressionString += D\r
+ DepexExpressionString = DepexExpressionString.rstrip('END').strip()\r
+ DepexExpressionString += ')'\r
Inherited = True\r
if Inherited:\r
- EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionList))\r
- if 'BEFORE' in DepexExpressionList or 'AFTER' in DepexExpressionList:\r
+ EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionString))\r
+ if 'BEFORE' in DepexExpressionString or 'AFTER' in DepexExpressionString:\r
break\r
- if len(DepexExpressionList) > 0:\r
+ if len(DepexExpressionString) > 0:\r
EdkLogger.verbose('')\r
- self._DepexExpressionList[ModuleType] = DepexExpressionList\r
- return self._DepexExpressionList\r
+ self._DepexExpressionDict[ModuleType] = DepexExpressionString\r
+ return self._DepexExpressionDict\r
\r
# Get the tiano core user extension, it is contain dependent library.\r
# @retval: a list contain tiano core userextension.\r
\r
BuildOptionIncPathList = []\r
for Tool in ('CC', 'PP', 'VFRPP', 'ASLPP', 'ASLCC', 'APP', 'ASM'):\r
- Attr = 'FLAGS'\r
try:\r
- FlagOption = self.BuildOption[Tool][Attr]\r
+ FlagOption = self.BuildOption[Tool]['FLAGS']\r
except KeyError:\r
FlagOption = ''\r
\r
IncPathList = []\r
for Path in BuildOptIncludeRegEx.findall(FlagOption):\r
PathList = GetSplitList(Path, TAB_COMMA_SPLIT)\r
- IncPathList += [NormPath(PathEntry, self.Macros) for PathEntry in PathList]\r
+ IncPathList.extend(NormPath(PathEntry, self.Macros) for PathEntry in PathList)\r
\r
#\r
# EDK II modules must not reference header files outside of the packages they depend on or \r
# within the module's directory tree. Report error if violation.\r
#\r
- if self.AutoGenVersion >= 0x00010005 and len(IncPathList) > 0:\r
+ if self.AutoGenVersion >= 0x00010005:\r
for Path in IncPathList:\r
if (Path not in self.IncludePathList) and (CommonPath([Path, self.MetaFile.Dir]) != self.MetaFile.Dir):\r
ErrMsg = "The include directory for the EDK II module in this line is invalid %s specified in %s FLAGS '%s'" % (Path, Tool, FlagOption)\r
if not os.path.exists(SubDirectory):\r
CreateDirectory(SubDirectory)\r
LastTarget = None\r
- RuleChain = []\r
+ RuleChain = set()\r
SourceList = [File]\r
Index = 0\r
#\r
if FileType in RuleChain:\r
break\r
\r
- RuleChain.append(FileType)\r
+ RuleChain.add(FileType)\r
SourceList.extend(Target.Outputs)\r
LastTarget = Target\r
FileType = TAB_UNKNOWN_FILE\r
self._DependentLibraryList = self.PlatformInfo.ApplyLibraryInstance(self.Module)\r
return self._DependentLibraryList\r
\r
- @staticmethod\r
- def UpdateComments(Recver, Src):\r
- for Key in Src:\r
- if Key not in Recver:\r
- Recver[Key] = []\r
- Recver[Key].extend(Src[Key])\r
## Get the list of PCDs from current module\r
#\r
# @retval list The list of PCD\r
if self._ModulePcdList is None:\r
# apply PCD settings from platform\r
self._ModulePcdList = self.PlatformInfo.ApplyPcdSetting(self.Module, self.Module.Pcds)\r
- self.UpdateComments(self._PcdComments, self.Module.PcdComments)\r
+ ExtendCopyDictionaryLists(self._PcdComments, self.Module.PcdComments)\r
return self._ModulePcdList\r
\r
## Get the list of PCDs from dependent libraries\r
self._LibraryPcdList = []\r
for Library in self.DependentLibraryList:\r
PcdsInLibrary = OrderedDict()\r
- self.UpdateComments(self._PcdComments, Library.PcdComments)\r
+ ExtendCopyDictionaryLists(self._PcdComments, Library.PcdComments)\r
for Key in Library.Pcds:\r
# skip duplicated PCDs\r
if Key in self.Module.Pcds or Key in Pcds:\r
self._GuidList.update(self.Module.Guids)\r
for Library in self.DependentLibraryList:\r
self._GuidList.update(Library.Guids)\r
- self.UpdateComments(self._GuidComments, Library.GuidComments)\r
- self.UpdateComments(self._GuidComments, self.Module.GuidComments)\r
+ ExtendCopyDictionaryLists(self._GuidComments, Library.GuidComments)\r
+ ExtendCopyDictionaryLists(self._GuidComments, self.Module.GuidComments)\r
return self._GuidList\r
\r
def GetGuidsUsedByPcd(self):\r
self._ProtocolList.update(self.Module.Protocols)\r
for Library in self.DependentLibraryList:\r
self._ProtocolList.update(Library.Protocols)\r
- self.UpdateComments(self._ProtocolComments, Library.ProtocolComments)\r
- self.UpdateComments(self._ProtocolComments, self.Module.ProtocolComments)\r
+ ExtendCopyDictionaryLists(self._ProtocolComments, Library.ProtocolComments)\r
+ ExtendCopyDictionaryLists(self._ProtocolComments, self.Module.ProtocolComments)\r
return self._ProtocolList\r
\r
## Get the PPI value mapping\r
self._PpiList.update(self.Module.Ppis)\r
for Library in self.DependentLibraryList:\r
self._PpiList.update(Library.Ppis)\r
- self.UpdateComments(self._PpiComments, Library.PpiComments)\r
- self.UpdateComments(self._PpiComments, self.Module.PpiComments)\r
+ ExtendCopyDictionaryLists(self._PpiComments, Library.PpiComments)\r
+ ExtendCopyDictionaryLists(self._PpiComments, self.Module.PpiComments)\r
return self._PpiList\r
\r
## Get the list of include search path\r
return self._IncludePathList\r
\r
def _GetIncludePathLength(self):\r
- self._IncludePathLength = 0\r
- if self._IncludePathList:\r
- for inc in self._IncludePathList:\r
- self._IncludePathLength += len(' ' + inc)\r
- return self._IncludePathLength\r
+ return sum(len(inc)+1 for inc in self._IncludePathList)\r
\r
## Get HII EX PCDs which maybe used by VFR\r
#\r
for Pcd in self.PlatformInfo.Platform.Pcds.values():\r
if Pcd.Type != TAB_PCDS_DYNAMIC_EX_HII:\r
continue\r
- for SkuName in Pcd.SkuInfoList:\r
- SkuInfo = Pcd.SkuInfoList[SkuName]\r
- Name = ConvertStringToByteArray(SkuInfo.VariableName)\r
+ for SkuInfo in Pcd.SkuInfoList.values():\r
Value = GuidValue(SkuInfo.VariableGuid, self.PlatformInfo.PackageList, self.MetaFile.Path)\r
if not Value:\r
continue\r
+ Name = ConvertStringToByteArray(SkuInfo.VariableName)\r
Guid = GuidStructureStringToGuidString(Value)\r
if (Name, Guid) in NameGuids and Pcd not in HiiExPcds:\r
HiiExPcds.append(Pcd)\r
# search the .map file to find the offset of vfr binary in the PE32+/TE file. \r
#\r
VfrUniBaseName[SourceFile.BaseName] = (SourceFile.BaseName + "Bin")\r
- if SourceFile.Type.upper() == ".UNI" :\r
+ elif SourceFile.Type.upper() == ".UNI" :\r
#\r
# search the .map file to find the offset of Uni strings binary in the PE32+/TE file. \r
#\r
VfrUniBaseName["UniOffsetName"] = (self.Name + "Strings")\r
\r
- if len(VfrUniBaseName) == 0:\r
+ if not VfrUniBaseName:\r
return None\r
MapFileName = os.path.join(self.OutputDir, self.Name + ".map")\r
EfiFileName = os.path.join(self.OutputDir, self.Name + ".efi")\r
#\r
def CreateAsBuiltInf(self, IsOnlyCopy = False):\r
self.OutputFile = set()\r
- if IsOnlyCopy:\r
- if GlobalData.gBinCacheDest:\r
- self.CopyModuleToCache()\r
- return\r
+ if IsOnlyCopy and GlobalData.gBinCacheDest:\r
+ self.CopyModuleToCache()\r
+ return\r
\r
if self.IsAsBuiltInfCreated:\r
return\r
PcdTokenSpaceList = []\r
for Pcd in self.ModulePcdList + self.LibraryPcdList:\r
if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:\r
- PatchablePcds += [Pcd]\r
+ PatchablePcds.append(Pcd)\r
PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, TAB_PCDS_PATCHABLE_IN_MODULE))\r
elif Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
if Pcd not in Pcds:\r
- Pcds += [Pcd]\r
+ Pcds.append(Pcd)\r
PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC_EX))\r
PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC))\r
PcdTokenSpaceList.append(Pcd.TokenSpaceGuidCName)\r
for Index in range(len(BeChecked)):\r
for Item in CheckList[Index]:\r
if Item in BeChecked[Index]:\r
- Packages += [Package]\r
+ Packages.append(Package)\r
Found = True\r
break\r
- if Found: break\r
+ if Found:\r
+ break\r
\r
VfrPcds = self._GetPcdsMaybeUsedByVfr()\r
for Pkg in self.PlatformInfo.PackageList:\r
for VfrPcd in VfrPcds:\r
if ((VfrPcd.TokenCName, VfrPcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC_EX) in Pkg.Pcds or\r
(VfrPcd.TokenCName, VfrPcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC) in Pkg.Pcds):\r
- Packages += [Pkg]\r
+ Packages.append(Pkg)\r
break\r
\r
- ModuleType = self.ModuleType\r
- if ModuleType == SUP_MODULE_UEFI_DRIVER and self.DepexGenerated:\r
- ModuleType = SUP_MODULE_DXE_DRIVER\r
-\r
- DriverType = ''\r
- if self.PcdIsDriver != '':\r
- DriverType = self.PcdIsDriver\r
-\r
+ ModuleType = SUP_MODULE_DXE_DRIVER if self.ModuleType == SUP_MODULE_UEFI_DRIVER and self.DepexGenerated else self.ModuleType\r
+ DriverType = self.PcdIsDriver if self.PcdIsDriver else ''\r
Guid = self.Guid\r
MDefs = self.Module.Defines\r
\r
'module_uefi_hii_resource_section' : [MDefs['UEFI_HII_RESOURCE_SECTION']] if 'UEFI_HII_RESOURCE_SECTION' in MDefs else [],\r
'module_uni_file' : [MDefs['MODULE_UNI_FILE']] if 'MODULE_UNI_FILE' in MDefs else [],\r
'module_arch' : self.Arch,\r
- 'package_item' : ['%s' % (Package.MetaFile.File.replace('\\', '/')) for Package in Packages],\r
+ 'package_item' : [Package.MetaFile.File.replace('\\', '/') for Package in Packages],\r
'binary_item' : [],\r
'patchablepcd_item' : [],\r
'pcd_item' : [],\r
AsBuiltInfDict['module_inf_version'] = gInfSpecVersion\r
\r
if DriverType:\r
- AsBuiltInfDict['pcd_is_driver_string'] += [DriverType]\r
+ AsBuiltInfDict['pcd_is_driver_string'].append(DriverType)\r
\r
if 'UEFI_SPECIFICATION_VERSION' in self.Specification:\r
- AsBuiltInfDict['module_uefi_specification_version'] += [self.Specification['UEFI_SPECIFICATION_VERSION']]\r
+ AsBuiltInfDict['module_uefi_specification_version'].append(self.Specification['UEFI_SPECIFICATION_VERSION'])\r
if 'PI_SPECIFICATION_VERSION' in self.Specification:\r
- AsBuiltInfDict['module_pi_specification_version'] += [self.Specification['PI_SPECIFICATION_VERSION']]\r
+ AsBuiltInfDict['module_pi_specification_version'].append(self.Specification['PI_SPECIFICATION_VERSION'])\r
\r
OutputDir = self.OutputDir.replace('\\', '/').strip('/')\r
DebugDir = self.DebugDir.replace('\\', '/').strip('/')\r
if os.path.isabs(File):\r
File = File.replace('\\', '/').strip('/').replace(OutputDir, '').strip('/')\r
if Item.Target.Ext.lower() == '.aml':\r
- AsBuiltInfDict['binary_item'] += ['ASL|' + File]\r
+ AsBuiltInfDict['binary_item'].append('ASL|' + File)\r
elif Item.Target.Ext.lower() == '.acpi':\r
- AsBuiltInfDict['binary_item'] += ['ACPI|' + File]\r
+ AsBuiltInfDict['binary_item'].append('ACPI|' + File)\r
elif Item.Target.Ext.lower() == '.efi':\r
- AsBuiltInfDict['binary_item'] += ['PE32|' + self.Name + '.efi']\r
+ AsBuiltInfDict['binary_item'].append('PE32|' + self.Name + '.efi')\r
else:\r
- AsBuiltInfDict['binary_item'] += ['BIN|' + File]\r
+ AsBuiltInfDict['binary_item'].append('BIN|' + File)\r
if self.DepexGenerated:\r
self.OutputFile.add(self.Name + '.depex')\r
if self.ModuleType in [SUP_MODULE_PEIM]:\r
- AsBuiltInfDict['binary_item'] += ['PEI_DEPEX|' + self.Name + '.depex']\r
- if self.ModuleType in [SUP_MODULE_DXE_DRIVER, SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_UEFI_DRIVER]:\r
- AsBuiltInfDict['binary_item'] += ['DXE_DEPEX|' + self.Name + '.depex']\r
- if self.ModuleType in [SUP_MODULE_DXE_SMM_DRIVER]:\r
- AsBuiltInfDict['binary_item'] += ['SMM_DEPEX|' + self.Name + '.depex']\r
+ AsBuiltInfDict['binary_item'].append('PEI_DEPEX|' + self.Name + '.depex')\r
+ elif self.ModuleType in [SUP_MODULE_DXE_DRIVER, SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_UEFI_DRIVER]:\r
+ AsBuiltInfDict['binary_item'].append('DXE_DEPEX|' + self.Name + '.depex')\r
+ elif self.ModuleType in [SUP_MODULE_DXE_SMM_DRIVER]:\r
+ AsBuiltInfDict['binary_item'].append('SMM_DEPEX|' + self.Name + '.depex')\r
\r
Bin = self._GenOffsetBin()\r
if Bin:\r
- AsBuiltInfDict['binary_item'] += ['BIN|%s' % Bin]\r
+ AsBuiltInfDict['binary_item'].append('BIN|%s' % Bin)\r
self.OutputFile.add(Bin)\r
\r
for Root, Dirs, Files in os.walk(OutputDir):\r
for File in Files:\r
if File.lower().endswith('.pdb'):\r
- AsBuiltInfDict['binary_item'] += ['DISPOSABLE|' + File]\r
+ AsBuiltInfDict['binary_item'].append('DISPOSABLE|' + File)\r
self.OutputFile.add(File)\r
HeaderComments = self.Module.HeaderComments\r
StartPos = 0\r
]\r
for Item in GenList:\r
for CName in Item[0]:\r
- Comments = ''\r
- if CName in Item[1]:\r
- Comments = '\n '.join(Item[1][CName])\r
- Entry = CName\r
- if Comments:\r
- Entry = Comments + '\n ' + CName\r
+ Comments = '\n '.join(Item[1][CName]) if CName in Item[1] else ''\r
+ Entry = Comments + '\n ' + CName if Comments else CName\r
AsBuiltInfDict[Item[2]].append(Entry)\r
PatchList = parsePcdInfoFromMapFile(\r
os.path.join(self.OutputDir, self.Name + '.map'),\r
\r
HiiPcds = set()\r
for Pcd in Pcds + VfrPcds:\r
- PcdComments = ''\r
PcdCommentList = []\r
HiiInfo = ''\r
SkuId = ''\r
PcdEntry = Pcd.TokenSpaceGuidCName + '.' + TokenCName\r
if PcdComments:\r
PcdEntry = PcdComments + '\n ' + PcdEntry\r
- AsBuiltInfDict['pcd_item'] += [PcdEntry]\r
+ AsBuiltInfDict['pcd_item'].append(PcdEntry)\r
for Item in self.BuildOption:\r
if 'FLAGS' in self.BuildOption[Item]:\r
- AsBuiltInfDict['flags_item'] += ['%s:%s_%s_%s_%s_FLAGS = %s' % (self.ToolChainFamily, self.BuildTarget, self.ToolChain, self.Arch, Item, self.BuildOption[Item]['FLAGS'].strip())]\r
+ AsBuiltInfDict['flags_item'].append('%s:%s_%s_%s_%s_FLAGS = %s' % (self.ToolChainFamily, self.BuildTarget, self.ToolChain, self.Arch, Item, self.BuildOption[Item]['FLAGS'].strip()))\r
\r
# Generated LibraryClasses section in comments.\r
for Library in self.LibraryAutoGenList:\r
- AsBuiltInfDict['libraryclasses_item'] += [Library.MetaFile.File.replace('\\', '/')]\r
+ AsBuiltInfDict['libraryclasses_item'].append(Library.MetaFile.File.replace('\\', '/'))\r
\r
# Generated UserExtensions TianoCore section.\r
# All tianocore user extensions are copied.\r
AsBuiltInfDict['userextension_tianocore_item'] = UserExtStr\r
\r
# Generated depex expression section in comments.\r
- AsBuiltInfDict['depexsection_item'] = ''\r
DepexExpresion = self._GetDepexExpresionString()\r
- if DepexExpresion:\r
- AsBuiltInfDict['depexsection_item'] = DepexExpresion\r
+ AsBuiltInfDict['depexsection_item'] = DepexExpresion if DepexExpresion else ''\r
\r
AsBuiltInf = TemplateString()\r
AsBuiltInf.Append(gAsBuiltInfHeaderString.Replace(AsBuiltInfDict))\r
if self.Name not in GlobalData.gModuleHash[self.Arch]:\r
GlobalData.gModuleHash[self.Arch][self.Name] = m.hexdigest()\r
if GlobalData.gBinCacheSource:\r
- CacheValid = self.AttemptModuleCacheCopy()\r
- if CacheValid:\r
+ if self.AttemptModuleCacheCopy():\r
return False\r
return SaveFileOnChange(ModuleHashFile, m.hexdigest(), True)\r
\r
return self._TimeStampPath\r
def CreateTimeStamp(self, Makefile):\r
\r
- FileSet = set()\r
-\r
- FileSet.add (self.MetaFile.Path)\r
+ FileSet = {self.MetaFile.Path}\r
\r
for SourceFile in self.Module.Sources:\r
FileSet.add (SourceFile.Path)\r
PpiList = property(_GetPpiList)\r
DepexList = property(_GetDepexTokenList)\r
DxsFile = property(_GetDxsFile)\r
- DepexExpressionList = property(_GetDepexExpressionTokenList)\r
+ DepexExpressionDict = property(_GetDepexExpressionTokenList)\r
BuildOption = property(_GetModuleBuildOption)\r
BuildOptionIncPathList = property(_GetBuildOptionIncPathList)\r
BuildCommand = property(_GetBuildCommand)\r
\r
@staticmethod\r
def GenerateSection(Output, Input, Type=None, CompressionType=None, Guid=None,\r
- GuidHdrLen=None, GuidAttr=[], Ui=None, Ver=None, InputAlign=None, BuildNumber=None, DummyFile=None, IsMakefile=False):\r
+ GuidHdrLen=None, GuidAttr=[], Ui=None, Ver=None, InputAlign=[], BuildNumber=None, DummyFile=None, IsMakefile=False):\r
Cmd = ["GenSec"]\r
if Type:\r
- Cmd += ["-s", Type]\r
+ Cmd += ("-s", Type)\r
if CompressionType:\r
- Cmd += ["-c", CompressionType]\r
+ Cmd += ("-c", CompressionType)\r
if Guid is not None:\r
- Cmd += ["-g", Guid]\r
+ Cmd += ("-g", Guid)\r
if DummyFile is not None:\r
- Cmd += ["--dummy", DummyFile]\r
+ Cmd += ("--dummy", DummyFile)\r
if GuidHdrLen:\r
- Cmd += ["-l", GuidHdrLen]\r
- if len(GuidAttr) != 0:\r
- #Add each guided attribute\r
- for Attr in GuidAttr:\r
- Cmd += ["-r", Attr]\r
- if InputAlign is not None:\r
- #Section Align is only for dummy section without section type\r
- for SecAlign in InputAlign:\r
- Cmd += ["--sectionalign", SecAlign]\r
+ Cmd += ("-l", GuidHdrLen)\r
+ #Add each guided attribute\r
+ for Attr in GuidAttr:\r
+ Cmd += ("-r", Attr)\r
+ #Section Align is only for dummy section without section type\r
+ for SecAlign in InputAlign:\r
+ Cmd += ("--sectionalign", SecAlign)\r
\r
CommandFile = Output + '.txt'\r
if Ui:\r
- #Cmd += ["-n", '"' + Ui + '"']\r
if IsMakefile:\r
if Ui == "$(MODULE_NAME)":\r
- Cmd += ['-n', Ui]\r
+ Cmd += ('-n', Ui)\r
else:\r
- Cmd += ["-n", '"' + Ui + '"']\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-n", '"' + Ui + '"')\r
+ Cmd += ("-o", Output)\r
if ' '.join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:\r
GenFdsGlobalVariable.SecCmdList.append(' '.join(Cmd).strip())\r
else:\r
SaveFileOnChange(Output, SectionData.tostring())\r
\r
elif Ver:\r
- Cmd += ["-n", Ver]\r
+ Cmd += ("-n", Ver)\r
if BuildNumber:\r
- Cmd += ["-j", BuildNumber]\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-j", BuildNumber)\r
+ Cmd += ("-o", Output)\r
\r
SaveFileOnChange(CommandFile, ' '.join(Cmd), False)\r
if IsMakefile:\r
return\r
GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate section")\r
else:\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-o", Output)\r
Cmd += Input\r
\r
SaveFileOnChange(CommandFile, ' '.join(Cmd), False)\r
Cmd = ["GenFfs", "-t", Type, "-g", Guid]\r
mFfsValidAlign = ["0", "8", "16", "128", "512", "1K", "4K", "32K", "64K", "128K", "256K", "512K", "1M", "2M", "4M", "8M", "16M"]\r
if Fixed == True:\r
- Cmd += ["-x"]\r
+ Cmd.append("-x")\r
if CheckSum:\r
- Cmd += ["-s"]\r
+ Cmd.append("-s")\r
if Align:\r
if Align not in mFfsValidAlign:\r
Align = GenFdsGlobalVariable.GetAlignment (Align)\r
if ((Align > GenFdsGlobalVariable.GetAlignment(mFfsValidAlign[index])) and (Align <= GenFdsGlobalVariable.GetAlignment(mFfsValidAlign[index + 1]))):\r
break\r
Align = mFfsValidAlign[index + 1]\r
- Cmd += ["-a", Align]\r
+ Cmd += ("-a", Align)\r
\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-o", Output)\r
for I in range(0, len(Input)):\r
Cmd += ("-i", Input[I])\r
if SectionAlign and SectionAlign[I]:\r
\r
Cmd = ["GenFv"]\r
if BaseAddress:\r
- Cmd += ["-r", BaseAddress]\r
+ Cmd += ("-r", BaseAddress)\r
\r
if ForceRebase == False:\r
- Cmd += ["-F", "FALSE"]\r
+ Cmd += ("-F", "FALSE")\r
elif ForceRebase == True:\r
- Cmd += ["-F", "TRUE"]\r
+ Cmd += ("-F", "TRUE")\r
\r
if Capsule:\r
- Cmd += ["-c"]\r
+ Cmd.append("-c")\r
if Dump:\r
- Cmd += ["-p"]\r
+ Cmd.append("-p")\r
if AddressFile:\r
- Cmd += ["-a", AddressFile]\r
+ Cmd += ("-a", AddressFile)\r
if MapFile:\r
- Cmd += ["-m", MapFile]\r
+ Cmd += ("-m", MapFile)\r
if FileSystemGuid:\r
- Cmd += ["-g", FileSystemGuid]\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-g", FileSystemGuid)\r
+ Cmd += ("-o", Output)\r
for I in Input:\r
- Cmd += ["-i", I]\r
+ Cmd += ("-i", I)\r
\r
GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate FV")\r
\r
if BaseAddress and FvSize \\r
and len(BaseAddress) == len(FvSize):\r
for I in range(0, len(BaseAddress)):\r
- Cmd += ["-r", BaseAddress[I], "-s", FvSize[I]]\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-r", BaseAddress[I], "-s", FvSize[I])\r
+ Cmd += ("-o", Output)\r
for F in Input:\r
- Cmd += ["-f", F]\r
+ Cmd += ("-f", F)\r
\r
GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate VTF")\r
\r
\r
Cmd = ["GenFw"]\r
if Type.lower() == "te":\r
- Cmd += ["-t"]\r
+ Cmd.append("-t")\r
if SubType:\r
- Cmd += ["-e", SubType]\r
+ Cmd += ("-e", SubType)\r
if TimeStamp:\r
- Cmd += ["-s", TimeStamp]\r
+ Cmd += ("-s", TimeStamp)\r
if Align:\r
- Cmd += ["-a", Align]\r
+ Cmd += ("-a", Align)\r
if Padding:\r
- Cmd += ["-p", Padding]\r
+ Cmd += ("-p", Padding)\r
if Zero:\r
- Cmd += ["-z"]\r
+ Cmd.append("-z")\r
if Strip:\r
- Cmd += ["-l"]\r
+ Cmd.append("-l")\r
if Replace:\r
- Cmd += ["-r"]\r
+ Cmd.append("-r")\r
if Join:\r
- Cmd += ["-j"]\r
+ Cmd.append("-j")\r
if Convert:\r
- Cmd += ["-m"]\r
- Cmd += ["-o", Output]\r
+ Cmd.append("-m")\r
+ Cmd += ("-o", Output)\r
Cmd += Input\r
if IsMakefile:\r
if " ".join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:\r
if len(EfiInput) > 0:\r
\r
if Compress:\r
- Cmd += ["-ec"]\r
+ Cmd.append("-ec")\r
else:\r
- Cmd += ["-e"]\r
+ Cmd.append("-e")\r
\r
for EfiFile in EfiInput:\r
- Cmd += [EfiFile]\r
+ Cmd.append(EfiFile)\r
InputList.append (EfiFile)\r
\r
if len(BinaryInput) > 0:\r
- Cmd += ["-b"]\r
+ Cmd.append("-b")\r
for BinFile in BinaryInput:\r
- Cmd += [BinFile]\r
+ Cmd.append(BinFile)\r
InputList.append (BinFile)\r
\r
# Check List\r
GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, InputList))\r
\r
if ClassCode is not None:\r
- Cmd += ["-l", ClassCode]\r
+ Cmd += ("-l", ClassCode)\r
if Revision is not None:\r
- Cmd += ["-r", Revision]\r
+ Cmd += ("-r", Revision)\r
if DeviceId is not None:\r
- Cmd += ["-i", DeviceId]\r
+ Cmd += ("-i", DeviceId)\r
if VendorId is not None:\r
- Cmd += ["-f", VendorId]\r
+ Cmd += ("-f", VendorId)\r
\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-o", Output)\r
if IsMakefile:\r
if " ".join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:\r
GenFdsGlobalVariable.SecCmdList.append(" ".join(Cmd).strip())\r
\r
Cmd = [ToolPath, ]\r
Cmd += Options.split(' ')\r
- Cmd += ["-o", Output]\r
+ Cmd += ("-o", Output)\r
Cmd += Input\r
if IsMakefile:\r
if " ".join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:\r