## @file\r
# Generate AutoGen.h, AutoGen.c and *.depex files\r
#\r
-# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
\r
EdkLogger.verbose("\nFLASH_DEFINITION = %s" % self.FdfFile)\r
\r
-# if Progress:\r
-# Progress.Start("\nProcessing meta-data")\r
+ if Progress:\r
+ Progress.Start("\nProcessing meta-data")\r
\r
if self.FdfFile:\r
#\r
for Arch in self.ArchList:\r
Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
\r
- DecPcds = {}\r
- DecPcdsKey = set()\r
- PGen = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch)\r
- if GlobalData.BuildOptionPcd:\r
- for i, pcd in enumerate(GlobalData.BuildOptionPcd):\r
- if type(pcd) is tuple:\r
- continue\r
- (pcdname, pcdvalue) = pcd.split('=')\r
- if not pcdvalue:\r
- EdkLogger.error('build', AUTOGEN_ERROR, "No Value specified for the PCD %s." % (pcdname))\r
- if '.' in pcdname:\r
- (TokenSpaceGuidCName, TokenCName) = pcdname.split('.')\r
- HasTokenSpace = True\r
- else:\r
- TokenCName = pcdname\r
- TokenSpaceGuidCName = ''\r
- HasTokenSpace = False\r
- TokenSpaceGuidCNameList = []\r
- FoundFlag = False\r
- PcdDatumType = ''\r
- NewValue = ''\r
- for package in PGen.PackageList:\r
- Guids = package.Guids\r
- self._GuidDict.update(Guids)\r
- for package in PGen.PackageList:\r
- for key in package.Pcds:\r
- PcdItem = package.Pcds[key]\r
- if HasTokenSpace:\r
- if (PcdItem.TokenCName, PcdItem.TokenSpaceGuidCName) == (TokenCName, TokenSpaceGuidCName):\r
- PcdDatumType = PcdItem.DatumType\r
- if pcdvalue.startswith('H'):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- if Value.result > 1:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- pcdvalue = 'H' + pcdvalue\r
- NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
- FoundFlag = True\r
- else:\r
- if PcdItem.TokenCName == TokenCName:\r
- if not PcdItem.TokenSpaceGuidCName in TokenSpaceGuidCNameList:\r
- if len (TokenSpaceGuidCNameList) < 1:\r
- TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName)\r
- PcdDatumType = PcdItem.DatumType\r
- TokenSpaceGuidCName = PcdItem.TokenSpaceGuidCName\r
- if pcdvalue.startswith('H'):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- pcdvalue = 'H' + pcdvalue\r
- NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
- FoundFlag = True\r
- else:\r
- EdkLogger.error(\r
- 'build',\r
- AUTOGEN_ERROR,\r
- "The Pcd %s is found under multiple different TokenSpaceGuid: %s and %s." % (TokenCName, PcdItem.TokenSpaceGuidCName, TokenSpaceGuidCNameList[0])\r
- )\r
\r
- GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, NewValue)\r
\r
- if not FoundFlag:\r
- if HasTokenSpace:\r
- EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s.%s is not found in the DEC file." % (TokenSpaceGuidCName, TokenCName))\r
- else:\r
- EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s is not found in the DEC file." % (TokenCName))\r
\r
- for BuildData in PGen.BuildDatabase._CACHE_.values():\r
- if BuildData.Arch != Arch:\r
- continue\r
- if BuildData.MetaFile.Ext == '.dec':\r
- continue\r
- for key in BuildData.Pcds:\r
- PcdItem = BuildData.Pcds[key]\r
- if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName):\r
- PcdItem.DefaultValue = NewValue\r
\r
- if (TokenCName, TokenSpaceGuidCName) in PcdSet:\r
- PcdSet[(TokenCName, TokenSpaceGuidCName)] = NewValue\r
\r
SourcePcdDict = {'DynamicEx':[], 'PatchableInModule':[],'Dynamic':[],'FixedAtBuild':[]}\r
BinaryPcdDict = {'DynamicEx':[], 'PatchableInModule':[]}\r
BinaryPcdDict_Keys = BinaryPcdDict.keys()\r
\r
# generate the SourcePcdDict and BinaryPcdDict\r
+ PGen = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch)\r
for BuildData in PGen.BuildDatabase._CACHE_.values():\r
if BuildData.Arch != Arch:\r
continue\r
ModuleData = self.BuildDatabase[ModuleFile, Arch, Target, Toolchain]\r
PkgSet.update(ModuleData.Packages)\r
Pkgs = list(PkgSet) + list(PGen.PackageList)\r
+ DecPcds = {}\r
+ DecPcdsKey = set()\r
for Pkg in Pkgs:\r
for Pcd in Pkg.Pcds:\r
DecPcds[Pcd[0], Pcd[1]] = Pkg.Pcds[Pcd]\r
# get the original module/package/platform objects\r
self.BuildDatabase = Workspace.BuildDatabase\r
self.DscBuildDataObj = Workspace.Platform\r
+ self._GuidDict = Workspace._GuidDict\r
\r
# flag indicating if the makefile/C-code file has been created or not\r
self.IsMakeFileCreated = False\r
VariableGuidStructure = Sku.VariableGuidValue\r
VariableGuid = GuidStructureStringToGuidString(VariableGuidStructure)\r
for StorageName in Sku.DefaultStoreDict:\r
- VariableInfo.append_variable(var_info(Index,pcdname,StorageName,SkuName, StringToArray(Sku.VariableName),VariableGuid, Sku.VariableAttribute , Sku.HiiDefaultValue,Sku.DefaultStoreDict[StorageName],Pcd.DatumType))\r
+ VariableInfo.append_variable(var_info(Index,pcdname,StorageName,SkuName, StringToArray(Sku.VariableName),VariableGuid, Sku.VariableOffset, Sku.VariableAttribute , Sku.HiiDefaultValue,Sku.DefaultStoreDict[StorageName],Pcd.DatumType))\r
Index += 1\r
return VariableInfo\r
\r
def CollectPlatformDynamicPcds(self):\r
# Override the platform Pcd's value by build option\r
if GlobalData.BuildOptionPcd:\r
- for key in self.Platform.Pcds:\r
- PlatformPcd = self.Platform.Pcds[key]\r
- for PcdItem in GlobalData.BuildOptionPcd:\r
- if (PlatformPcd.TokenSpaceGuidCName, PlatformPcd.TokenCName) == (PcdItem[0], PcdItem[1]):\r
- PlatformPcd.DefaultValue = PcdItem[2]\r
- if PlatformPcd.SkuInfoList:\r
- Sku = PlatformPcd.SkuInfoList[PlatformPcd.SkuInfoList.keys()[0]]\r
- Sku.DefaultValue = PcdItem[2]\r
- break\r
+ for PcdItem in GlobalData.BuildOptionPcd:\r
+ PlatformPcd = self.Platform.Pcds.get((PcdItem[1],PcdItem[0]))\r
+ if PlatformPcd:\r
+ if PlatformPcd.DatumType in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64,'BOOLEAN']:\r
+ for sku in PlatformPcd.SkuInfoList:\r
+ PlatformPcd.SkuInfoList[sku].DefaultValue = PcdItem[2]\r
+ else:\r
+ PcdDefaultValue = StringToArray(PcdItem[2])\r
+ for sku in PlatformPcd.SkuInfoList:\r
+ skuinfo = PlatformPcd.SkuInfoList[sku]\r
+ if skuinfo.VariableGuid:\r
+ skuinfo.HiiDefaultValue = PcdDefaultValue\r
+ else:\r
+ skuinfo.DefaultValue = PcdDefaultValue\r
+ PlatformPcd.DefaultValue = PcdDefaultValue\r
+ if PlatformPcd.MaxDatumSize:\r
+ PlatformPcd.MaxDatumSize = str(max([int(PlatformPcd.MaxDatumSize),len(PcdDefaultValue.split(","))]))\r
+ else:\r
+ PlatformPcd.MaxDatumSize = str(len(PcdDefaultValue.split(",")))\r
\r
for key in self.Platform.Pcds:\r
for SinglePcd in GlobalData.MixedPcd:\r
if not FoundFlag :\r
# just pick the a value to determine whether is unicode string type\r
SkuValueMap = {}\r
+ SkuObjList = DscPcdEntry.SkuInfoList.items()\r
DefaultSku = DscPcdEntry.SkuInfoList.get('DEFAULT')\r
if DefaultSku:\r
- PcdValue = DefaultSku.DefaultValue\r
- if PcdValue not in SkuValueMap:\r
- SkuValueMap[PcdValue] = []\r
- VpdFile.Add(DscPcdEntry, 'DEFAULT',Sku.VpdOffset)\r
- SkuValueMap[PcdValue].append(Sku)\r
- for (SkuName,Sku) in DscPcdEntry.SkuInfoList.items():\r
+ defaultindex = SkuObjList.index(('DEFAULT',DefaultSku))\r
+ SkuObjList[0],SkuObjList[defaultindex] = SkuObjList[defaultindex],SkuObjList[0]\r
+ for (SkuName,Sku) in SkuObjList:\r
Sku.VpdOffset = Sku.VpdOffset.strip() \r
\r
# Need to iterate DEC pcd information to get the value & datumtype\r
NewOption = self.ToolDefinition["MAKE"]["FLAGS"].strip()\r
if NewOption != '':\r
self._BuildCommand += SplitOption(NewOption)\r
+ if "MAKE" in self.EdkIIBuildOption:\r
+ if "FLAGS" in self.EdkIIBuildOption["MAKE"]:\r
+ Flags = self.EdkIIBuildOption["MAKE"]["FLAGS"]\r
+ if Flags.startswith('='):\r
+ self._BuildCommand = [self._BuildCommand[0]] + [Flags[1:]]\r
+ else:\r
+ self._BuildCommand += [Flags]\r
return self._BuildCommand\r
\r
## Get tool chain definition\r
if FromPcd.SkuInfoList not in [None, '', []]:\r
ToPcd.SkuInfoList = FromPcd.SkuInfoList\r
# Add Flexible PCD format parse\r
- PcdValue = ToPcd.DefaultValue\r
- if PcdValue:\r
- try:\r
- ToPcd.DefaultValue = ValueExpression(PcdValue)(True)\r
- except WrnExpression, Value:\r
- ToPcd.DefaultValue = Value.result\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %(ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName, ToPcd.DefaultValue, Value),\r
- File=self.MetaFile)\r
if ToPcd.DefaultValue:\r
- _GuidDict = {}\r
- for Pkg in self.PackageList:\r
- Guids = Pkg.Guids\r
- _GuidDict.update(Guids)\r
try:\r
- ToPcd.DefaultValue = ValueExpressionEx(ToPcd.DefaultValue, ToPcd.DatumType, _GuidDict)(True)\r
+ ToPcd.DefaultValue = ValueExpressionEx(ToPcd.DefaultValue, ToPcd.DatumType, self._GuidDict)(True)\r
except BadExpression, Value:\r
EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %(ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName, ToPcd.DefaultValue, Value),\r
File=self.MetaFile)\r
AsBuiltInfDict['module_pi_specification_version'] += [self.Specification['PI_SPECIFICATION_VERSION']]\r
\r
OutputDir = self.OutputDir.replace('\\', '/').strip('/')\r
+ DebugDir = self.DebugDir.replace('\\', '/').strip('/')\r
for Item in self.CodaTargetList:\r
- File = Item.Target.Path.replace('\\', '/').strip('/').replace(OutputDir, '').strip('/')\r
+ File = Item.Target.Path.replace('\\', '/').strip('/').replace(DebugDir, '').strip('/')\r
if File not in self.OutputFile:\r
self.OutputFile.append(File)\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
elif Item.Target.Ext.lower() == '.acpi':\r