'''\r
\r
variablePattern = re.compile(r'[\t\s]*0[xX][a-fA-F0-9]+$')\r
-\r
+SkuIdPattern = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*$')\r
## regular expressions for finding decimal and hex numbers\r
Pattern = re.compile('^[1-9]\d*|0$')\r
HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')\r
def _GetArch(self):\r
return self._Arch\r
\r
- ## Set architecture\r
- #\r
- # Changing the default ARCH to another may affect all other information\r
- # because all information in a platform may be ARCH-related. That's\r
- # why we need to clear all internal used members, in order to cause all\r
- # information to be re-retrieved.\r
- #\r
- # @param Value The value of ARCH\r
- #\r
- def _SetArch(self, Value):\r
- if self._Arch == Value:\r
- return\r
- self._Arch = Value\r
- self._Clear()\r
-\r
## Retrieve all information in [Defines] section\r
#\r
# (Retriving all [Defines] information in one-shot is just to save time.)\r
if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]):\r
EdkLogger.error('build', FORMAT_INVALID, "The format of the Sku ID number is invalid. It only support Integer and HexNumber",\r
File=self.MetaFile, Line=Record[-1])\r
- if not IsValidWord(Record[1]):\r
- EdkLogger.error('build', FORMAT_INVALID, "The format of the Sku ID name is invalid. The correct format is '(a-zA-Z0-9_)(a-zA-Z0-9_-.)*'",\r
+ if not SkuIdPattern.match(Record[1]) or (Record[2] and not SkuIdPattern.match(Record[2])):\r
+ EdkLogger.error('build', FORMAT_INVALID, "The format of the Sku ID name is invalid. The correct format is '(a-zA-Z_)(a-zA-Z0-9_)*'",\r
File=self.MetaFile, Line=Record[-1])\r
self._SkuIds[Record[1].upper()] = (str(DscBuildData.ToInt(Record[0])), Record[1].upper(), Record[2].upper())\r
if TAB_DEFAULT not in self._SkuIds:\r
\r
if (PcdCName, TokenSpaceGuid) not in self._DecPcds:\r
EdkLogger.error('build', PARSER_ERROR,\r
- "Pcd (%s.%s) defined in DSC is not declared in DEC files. Arch: ['%s']" % (TokenSpaceGuid, PcdCName, self._Arch),\r
+ "Pcd (%s.%s) defined in DSC is not declared in DEC files referenced in INF files in FDF. Arch: ['%s']" % (TokenSpaceGuid, PcdCName, self._Arch),\r
File=self.MetaFile, Line=LineNo)\r
ValueList, IsValid, Index = AnalyzeDscPcd(Setting, PcdType, self._DecPcds[PcdCName, TokenSpaceGuid].DatumType)\r
if not IsValid:\r
if not Valid:\r
EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
- if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
+ if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,\r
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
PcdInDec.PcdValueFromComm = NoFiledValues[(Guid, Name)][0]\r
if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE],\r
- self._PCD_TYPE_STRING_[MODEL_PCD_FEATURE_FLAG]]:\r
+ self._PCD_TYPE_STRING_[MODEL_PCD_FEATURE_FLAG],\r
+ self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC],\r
+ self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX]]:\r
self.Pcds[Name, Guid] = copy.deepcopy(PcdInDec)\r
self.Pcds[Name, Guid].DefaultValue = NoFiledValues[( Guid, Name)][0]\r
+ if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC],\r
+ self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX]]:\r
+ self.Pcds[Name, Guid].SkuInfoList = {TAB_DEFAULT:SkuInfoClass(TAB_DEFAULT, self.SkuIds[TAB_DEFAULT][0], '', '', '', '', '', NoFiledValues[( Guid, Name)][0])}\r
return AllPcds\r
\r
def OverrideByFdfOverAll(self,AllPcds):\r
if GlobalData.gFdfParser is None:\r
return AllPcds\r
NoFiledValues = GlobalData.gFdfParser.Profile.PcdDict\r
- for Guid,Name,Field in NoFiledValues:\r
+ for Name,Guid,Field in NoFiledValues:\r
if len(Field):\r
continue\r
- Value = NoFiledValues[(Guid,Name,Field)]\r
+ Value = NoFiledValues[(Name,Guid,Field)]\r
if (Name,Guid) in AllPcds:\r
Pcd = AllPcds.get((Name,Guid))\r
if isinstance(self._DecPcds.get((Pcd.TokenCName,Pcd.TokenSpaceGuidCName), None),StructurePcd):\r
else:\r
PcdInDec = self.DecPcds.get((Name,Guid))\r
if PcdInDec:\r
- PcdInDec.PcdValueFromComm = Value\r
+ PcdInDec.PcdValueFromFdf = Value\r
if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE],\r
self._PCD_TYPE_STRING_[MODEL_PCD_FEATURE_FLAG]]:\r
NoDefault = True\r
break\r
nextskuid = self.SkuIdMgr.GetNextSkuId(nextskuid)\r
- stru_pcd.SkuOverrideValues[skuid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid]) if not NoDefault else copy.deepcopy({defaultstorename: stru_pcd.DefaultValues for defaultstorename in DefaultStores} if DefaultStores else {TAB_DEFAULT_STORES_DEFAULT:stru_pcd.DefaultValues})\r
+ stru_pcd.SkuOverrideValues[skuid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid]) if not NoDefault else copy.deepcopy({defaultstorename: stru_pcd.DefaultValues for defaultstorename in DefaultStores} if DefaultStores else {}) #{TAB_DEFAULT_STORES_DEFAULT:stru_pcd.DefaultValues})\r
if not NoDefault:\r
stru_pcd.ValueChain.add((skuid, ''))\r
if stru_pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
if Setting is None:\r
continue\r
PcdValue, DatumType, MaxDatumSize = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
+ if MaxDatumSize:\r
+ if int(MaxDatumSize, 0) > 0xFFFF:\r
+ EdkLogger.error('build', FORMAT_INVALID, "The size value must not exceed the maximum value of 0xFFFF (UINT16) for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+ File=self.MetaFile, Line=Dummy4)\r
+ if int(MaxDatumSize, 0) < 0:\r
+ EdkLogger.error('build', FORMAT_INVALID, "The size value can't be set to negative value for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+ File=self.MetaFile, Line=Dummy4)\r
if (PcdCName, TokenSpaceGuid) in PcdValueDict:\r
PcdValueDict[PcdCName, TokenSpaceGuid][SkuName] = (PcdValue, DatumType, MaxDatumSize)\r
else:\r
PcdValueDict[PcdCName, TokenSpaceGuid] = {SkuName:(PcdValue, DatumType, MaxDatumSize)}\r
\r
for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.iteritems():\r
- PcdValue = None\r
- DatumType = None\r
- MaxDatumSize = None\r
- if TAB_COMMON in PcdSetting:\r
- PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_COMMON]\r
- if TAB_DEFAULT in PcdSetting:\r
- PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_DEFAULT]\r
if self.SkuIdMgr.SystemSkuId in PcdSetting:\r
PcdValue, DatumType, MaxDatumSize = PcdSetting[self.SkuIdMgr.SystemSkuId]\r
+ elif TAB_DEFAULT in PcdSetting:\r
+ PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_DEFAULT]\r
+ elif TAB_COMMON in PcdSetting:\r
+ PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_COMMON]\r
+ else:\r
+ PcdValue = None\r
+ DatumType = None\r
+ MaxDatumSize = None\r
\r
Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject(\r
PcdCName,\r
None,\r
IsDsc=True)\r
\r
-\r
+ if self.SkuIdMgr.SystemSkuId not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[self.SkuIdMgr.SystemSkuId] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[self.SkuIdMgr.SystemSkuId][TAB_DEFAULT_STORES_DEFAULT] = PcdValue\r
return Pcds\r
\r
def GetStructurePcdMaxSize(self, str_pcd):\r
CApp = CApp + "// SkuName: %s, DefaultStoreName: %s \n" % (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT)\r
inherit_OverrideValues = Pcd.SkuOverrideValues[SkuName]\r
if (SkuName, DefaultStoreName) == (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT):\r
- pcddefaultvalue = Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue\r
+ pcddefaultvalue = Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT) if Pcd.DefaultFromDSC else None\r
else:\r
- if not Pcd.DscRawValue:\r
- # handle the case that structure pcd is not appear in DSC\r
- self.CopyDscRawValue(Pcd)\r
pcddefaultvalue = Pcd.DscRawValue.get(SkuName, {}).get(DefaultStoreName)\r
for FieldList in [pcddefaultvalue, inherit_OverrideValues.get(DefaultStoreName)]:\r
if not FieldList:\r
OverrideValues = {DefaultStore:""}\r
if Pcd.SkuOverrideValues:\r
OverrideValues = Pcd.SkuOverrideValues[SkuName]\r
+ if not OverrideValues:\r
+ OverrideValues = {TAB_DEFAULT_STORES_DEFAULT:Pcd.DefaultValues}\r
for DefaultStoreName in OverrideValues:\r
CApp = CApp + 'void\n'\r
CApp = CApp + 'Initialize_%s_%s_%s_%s(\n' % (SkuName, DefaultStoreName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
CApp = CApp + '}\n'\r
CApp = CApp + '\n'\r
return InitByteValue, CApp\r
+ def SkuOverrideValuesEmpty(self,OverrideValues):\r
+ if not OverrideValues:\r
+ return True\r
+ for key in OverrideValues:\r
+ if OverrideValues[key]:\r
+ return False\r
+ return True\r
\r
def GenerateByteArrayValue (self, StructuredPcds):\r
#\r
CApp = CApp + self.GenerateDefaultValueAssignFunction(Pcd)\r
CApp = CApp + self.GenerateFdfValue(Pcd)\r
CApp = CApp + self.GenerateCommandLineValue(Pcd)\r
- if not Pcd.SkuOverrideValues or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
+ if self.SkuOverrideValuesEmpty(Pcd.SkuOverrideValues) or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
CApp = CApp + self.GenerateInitValueFunction(Pcd, self.SkuIdMgr.SystemSkuId, TAB_DEFAULT_STORES_DEFAULT)\r
else:\r
continue\r
for DefaultStoreName in Pcd.SkuOverrideValues[SkuName]:\r
CApp = CApp + self.GenerateInitValueFunction(Pcd, SkuName, DefaultStoreName)\r
- if not Pcd.SkuOverrideValues or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
+ if self.SkuOverrideValuesEmpty(Pcd.SkuOverrideValues) or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
InitByteValue, CApp = self.GenerateInitializeFunc(self.SkuIdMgr.SystemSkuId, TAB_DEFAULT_STORES_DEFAULT, Pcd, InitByteValue, CApp)\r
else:\r
CApp = CApp + ' )\n'\r
CApp = CApp + '{\n'\r
for Pcd in StructuredPcds.values():\r
- if not Pcd.SkuOverrideValues or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD], self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
+ if self.SkuOverrideValuesEmpty(Pcd.SkuOverrideValues) or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD], self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
CApp = CApp + ' Initialize_%s_%s_%s_%s();\n' % (self.SkuIdMgr.SystemSkuId, TAB_DEFAULT_STORES_DEFAULT, Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
else:\r
for SkuName in self.SkuIdMgr.SkuOverrideOrder():\r
continue\r
\r
PcdValue, DatumType, MaxDatumSize = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
+ if MaxDatumSize:\r
+ if int(MaxDatumSize, 0) > 0xFFFF:\r
+ EdkLogger.error('build', FORMAT_INVALID, "The size value must not exceed the maximum value of 0xFFFF (UINT16) for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+ File=self.MetaFile, Line=Dummy4)\r
+ if int(MaxDatumSize, 0) < 0:\r
+ EdkLogger.error('build', FORMAT_INVALID, "The size value can't be set to negative value for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+ File=self.MetaFile, Line=Dummy4)\r
SkuInfo = SkuInfoClass(SkuName, self.SkuIds[SkuName][0], '', '', '', '', '', PcdValue)\r
if (PcdCName, TokenSpaceGuid) in Pcds:\r
pcdObject = Pcds[PcdCName, TokenSpaceGuid]\r
None,\r
IsDsc=True)\r
\r
+ if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = PcdValue\r
+\r
for pcd in Pcds.values():\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
# Only fix the value while no value provided in DSC file.\r
else:\r
return False\r
\r
- def CopyDscRawValue(self, Pcd):\r
- if Pcd.DscRawValue is None:\r
- Pcd.DscRawValue = dict()\r
- if Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD], self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
- if self.SkuIdMgr.SystemSkuId not in Pcd.DscRawValue:\r
- Pcd.DscRawValue[self.SkuIdMgr.SystemSkuId] = {}\r
- Pcd.DscRawValue[self.SkuIdMgr.SystemSkuId][TAB_DEFAULT_STORES_DEFAULT] = Pcd.DefaultValue\r
- for skuname in Pcd.SkuInfoList:\r
- Pcd.DscRawValue[skuname] = {}\r
- if Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
- for defaultstore in Pcd.SkuInfoList[skuname].DefaultStoreDict:\r
- Pcd.DscRawValue[skuname][defaultstore] = Pcd.SkuInfoList[skuname].DefaultStoreDict[defaultstore]\r
- else:\r
- Pcd.DscRawValue[skuname][TAB_DEFAULT_STORES_DEFAULT] = Pcd.SkuInfoList[skuname].DefaultValue\r
def CompletePcdValues(self, PcdSet):\r
Pcds = {}\r
DefaultStoreObj = DefaultStore(self._GetDefaultStores())\r
DefaultStores = set(storename for pcdobj in PcdSet.values() for skuobj in pcdobj.SkuInfoList.values() for storename in skuobj.DefaultStoreDict)\r
for PcdCName, TokenSpaceGuid in PcdSet:\r
PcdObj = PcdSet[(PcdCName, TokenSpaceGuid)]\r
- self.CopyDscRawValue(PcdObj)\r
+\r
if PcdObj.Type not in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_DEFAULT],\r
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII],\r
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_VPD],\r
pcdDecObject.expressions,\r
IsDsc=True)\r
\r
-\r
+ if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][DefaultStore] = DefaultValue\r
for pcd in Pcds.values():\r
SkuInfoObj = pcd.SkuInfoList.values()[0]\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
# until the DEC parser has been called.\r
#\r
VpdOffset, MaxDatumSize, InitialValue = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
+ if MaxDatumSize:\r
+ if int(MaxDatumSize, 0) > 0xFFFF:\r
+ EdkLogger.error('build', FORMAT_INVALID, "The size value must not exceed the maximum value of 0xFFFF (UINT16) for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+ File=self.MetaFile, Line=Dummy4)\r
+ if int(MaxDatumSize, 0) < 0:\r
+ EdkLogger.error('build', FORMAT_INVALID, "The size value can't be set to negative value for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+ File=self.MetaFile, Line=Dummy4)\r
SkuInfo = SkuInfoClass(SkuName, self.SkuIds[SkuName][0], '', '', '', '', VpdOffset, InitialValue)\r
if (PcdCName, TokenSpaceGuid) in Pcds:\r
pcdObject = Pcds[PcdCName, TokenSpaceGuid]\r
False,\r
None,\r
IsDsc=True)\r
+\r
+ if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = InitialValue\r
for pcd in Pcds.values():\r
SkuInfoObj = pcd.SkuInfoList.values()[0]\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
self.Modules.append(Module)\r
\r
def _GetToolChainFamily(self):\r
- self._ToolChainFamily = "MSFT"\r
+ self._ToolChainFamily = TAB_COMPILER_MSFT\r
BuildConfigurationFile = os.path.normpath(os.path.join(GlobalData.gConfDirectory, "target.txt"))\r
if os.path.isfile(BuildConfigurationFile) == True:\r
TargetTxt = TargetTxtClassObject()\r
if TAB_TOD_DEFINES_FAMILY not in ToolDefinition \\r
or self._Toolchain not in ToolDefinition[TAB_TOD_DEFINES_FAMILY] \\r
or not ToolDefinition[TAB_TOD_DEFINES_FAMILY][self._Toolchain]:\r
- self._ToolChainFamily = "MSFT"\r
+ self._ToolChainFamily = TAB_COMPILER_MSFT\r
else:\r
self._ToolChainFamily = ToolDefinition[TAB_TOD_DEFINES_FAMILY][self._Toolchain]\r
return self._ToolChainFamily\r
self._DecPcds, self._GuidDict = GetDeclaredPcd(self, self._Bdb, self._Arch, self._Target, self._Toolchain, PkgSet)\r
return self._DecPcds\r
_Macros = property(_GetMacros)\r
- Arch = property(_GetArch, _SetArch)\r
+ Arch = property(_GetArch)\r
Platform = property(_GetPlatformName)\r
PlatformName = property(_GetPlatformName)\r
Guid = property(_GetFileGuid)\r