Sync BaseTool trunk (version r2640) into EDKII BaseTools.
Signed-off-by: Gao, Liming <liming.gao@intel.com> Reviewed-by: Liu, Jiang A <jiang.a.liu@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15089 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
## @file
|
||||
# Generate AutoGen.h, AutoGen.c and *.depex files
|
||||
#
|
||||
# Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
@ -334,6 +334,7 @@ class WorkspaceAutoGen(AutoGen):
|
||||
# Explicitly collect platform's dynamic PCDs
|
||||
#
|
||||
Pa.CollectPlatformDynamicPcds()
|
||||
Pa.CollectFixedAtBuildPcds()
|
||||
self.AutoGenObjectList.append(Pa)
|
||||
|
||||
#
|
||||
@ -785,6 +786,7 @@ class PlatformAutoGen(AutoGen):
|
||||
self._PcdTokenNumber = None # (TokenCName, TokenSpaceGuidCName) : GeneratedTokenNumber
|
||||
self._DynamicPcdList = None # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...]
|
||||
self._NonDynamicPcdList = None # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...]
|
||||
self._NonDynamicPcdDict = {}
|
||||
|
||||
self._ToolDefinitions = None
|
||||
self._ToolDefFile = None # toolcode : tool path
|
||||
@ -851,6 +853,32 @@ class PlatformAutoGen(AutoGen):
|
||||
(self.MetaFile, self.Arch))
|
||||
self.IsMakeFileCreated = True
|
||||
|
||||
## Deal with Shared FixedAtBuild Pcds
|
||||
#
|
||||
def CollectFixedAtBuildPcds(self):
|
||||
for LibAuto in self.LibraryAutoGenList:
|
||||
FixedAtBuildPcds = {}
|
||||
ShareFixedAtBuildPcdsSameValue = {}
|
||||
for Module in LibAuto._ReferenceModules:
|
||||
for Pcd in Module.FixedAtBuildPcds + LibAuto.FixedAtBuildPcds:
|
||||
key = ".".join((Pcd.TokenSpaceGuidCName,Pcd.TokenCName))
|
||||
if key not in FixedAtBuildPcds:
|
||||
ShareFixedAtBuildPcdsSameValue[key] = True
|
||||
FixedAtBuildPcds[key] = Pcd.DefaultValue
|
||||
else:
|
||||
if FixedAtBuildPcds[key] != Pcd.DefaultValue:
|
||||
ShareFixedAtBuildPcdsSameValue[key] = False
|
||||
for Pcd in LibAuto.FixedAtBuildPcds:
|
||||
key = ".".join((Pcd.TokenSpaceGuidCName,Pcd.TokenCName))
|
||||
if (Pcd.TokenCName,Pcd.TokenSpaceGuidCName) not in self.NonDynamicPcdDict:
|
||||
continue
|
||||
else:
|
||||
DscPcd = self.NonDynamicPcdDict[(Pcd.TokenCName,Pcd.TokenSpaceGuidCName)]
|
||||
if DscPcd.Type != "FixedAtBuild":
|
||||
continue
|
||||
if key in ShareFixedAtBuildPcdsSameValue and ShareFixedAtBuildPcdsSameValue[key]:
|
||||
LibAuto.ConstPcd[key] = Pcd.DefaultValue
|
||||
|
||||
## Collect dynamic PCDs
|
||||
#
|
||||
# Gather dynamic PCDs list from each module and their settings from platform
|
||||
@ -1296,6 +1324,13 @@ class PlatformAutoGen(AutoGen):
|
||||
self._PackageList = list(self._PackageList)
|
||||
return self._PackageList
|
||||
|
||||
def _GetNonDynamicPcdDict(self):
|
||||
if self._NonDynamicPcdDict:
|
||||
return self._NonDynamicPcdDict
|
||||
for Pcd in self.NonDynamicPcdList:
|
||||
self._NonDynamicPcdDict[(Pcd.TokenCName,Pcd.TokenSpaceGuidCName)] = Pcd
|
||||
return self._NonDynamicPcdDict
|
||||
|
||||
## Get list of non-dynamic PCDs
|
||||
def _GetNonDynamicPcdList(self):
|
||||
if self._NonDynamicPcdList == None:
|
||||
@ -1373,6 +1408,8 @@ class PlatformAutoGen(AutoGen):
|
||||
for La in Ma.LibraryAutoGenList:
|
||||
if La not in self._LibraryAutoGenList:
|
||||
self._LibraryAutoGenList.append(La)
|
||||
if Ma not in La._ReferenceModules:
|
||||
La._ReferenceModules.append(Ma)
|
||||
|
||||
## Summarize ModuleAutoGen objects of all modules to be built for this platform
|
||||
def _GetModuleAutoGenList(self):
|
||||
@ -1911,6 +1948,7 @@ class PlatformAutoGen(AutoGen):
|
||||
PcdTokenNumber = property(_GetPcdTokenNumbers) # (TokenCName, TokenSpaceGuidCName) : GeneratedTokenNumber
|
||||
DynamicPcdList = property(_GetDynamicPcdList) # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...]
|
||||
NonDynamicPcdList = property(_GetNonDynamicPcdList) # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...]
|
||||
NonDynamicPcdDict = property(_GetNonDynamicPcdDict)
|
||||
PackageList = property(_GetPackageList)
|
||||
|
||||
ToolDefinition = property(_GetToolDefinition) # toolcode : tool path
|
||||
@ -2027,12 +2065,35 @@ class ModuleAutoGen(AutoGen):
|
||||
self._FinalBuildTargetList = None
|
||||
self._FileTypes = None
|
||||
self._BuildRules = None
|
||||
|
||||
|
||||
## The Modules referenced to this Library
|
||||
# Only Library has this attribute
|
||||
self._ReferenceModules = []
|
||||
|
||||
## Store the FixedAtBuild Pcds
|
||||
#
|
||||
self._FixedAtBuildPcds = []
|
||||
self.ConstPcd = {}
|
||||
return True
|
||||
|
||||
def __repr__(self):
|
||||
return "%s [%s]" % (self.MetaFile, self.Arch)
|
||||
|
||||
# Get FixedAtBuild Pcds of this Module
|
||||
def _GetFixedAtBuildPcds(self):
|
||||
if self._FixedAtBuildPcds:
|
||||
return self._FixedAtBuildPcds
|
||||
for Pcd in self.ModulePcdList:
|
||||
if self.IsLibrary:
|
||||
if not (Pcd.Pending == False and Pcd.Type == "FixedAtBuild"):
|
||||
continue
|
||||
elif Pcd.Type != "FixedAtBuild":
|
||||
continue
|
||||
if Pcd not in self._FixedAtBuildPcds:
|
||||
self._FixedAtBuildPcds.append(Pcd)
|
||||
|
||||
return self._FixedAtBuildPcds
|
||||
|
||||
# Macros could be used in build_rule.txt (also Makefile)
|
||||
def _GetMacros(self):
|
||||
if self._Macro == None:
|
||||
@ -3102,6 +3163,8 @@ class ModuleAutoGen(AutoGen):
|
||||
BuildOption = property(_GetModuleBuildOption)
|
||||
BuildOptionIncPathList = property(_GetBuildOptionIncPathList)
|
||||
BuildCommand = property(_GetBuildCommand)
|
||||
|
||||
FixedAtBuildPcds = property(_GetFixedAtBuildPcds)
|
||||
|
||||
# This acts like the main() function for the script, unless it is 'import'ed into another script.
|
||||
if __name__ == '__main__':
|
||||
|
@ -1069,10 +1069,15 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, Pcd):
|
||||
AutoGenH.Append('#define %s %s_gPcd_BinaryPatch_%s\n' %(GetModeName, Type, TokenCName))
|
||||
AutoGenH.Append('#define %s(Value) (%s = (Value))\n' % (SetModeName, PcdVariableName))
|
||||
if PcdItemType == TAB_PCDS_FIXED_AT_BUILD or PcdItemType == TAB_PCDS_FEATURE_FLAG:
|
||||
key = ".".join((Pcd.TokenSpaceGuidCName,Pcd.TokenCName))
|
||||
|
||||
AutoGenH.Append('extern const %s _gPcd_FixedAtBuild_%s%s;\n' %(DatumType, TokenCName, Array))
|
||||
AutoGenH.Append('#define %s %s_gPcd_FixedAtBuild_%s\n' %(GetModeName, Type, TokenCName))
|
||||
AutoGenH.Append('//#define %s ASSERT(FALSE) // It is not allowed to set value for a FIXED_AT_BUILD PCD\n' % SetModeName)
|
||||
|
||||
|
||||
if PcdItemType == TAB_PCDS_FIXED_AT_BUILD and key in Info.ConstPcd:
|
||||
AutoGenH.Append('#define _PCD_VALUE_%s %s\n' %(TokenCName, Pcd.DefaultValue))
|
||||
|
||||
|
||||
|
||||
## Create code for library constructor
|
||||
|
@ -528,13 +528,20 @@ class DbSizeTableItemList (DbItemList):
|
||||
if RawDataList is None:
|
||||
RawDataList = []
|
||||
DbItemList.__init__(self, ItemSize, DataList, RawDataList)
|
||||
def GetListSize(self):
|
||||
length = 0
|
||||
for Data in self.RawDataList:
|
||||
length += (1 + len(Data[1]))
|
||||
return length * self.ItemSize
|
||||
def PackData(self):
|
||||
PackStr = "=HH"
|
||||
PackStr = "=H"
|
||||
Buffer = ''
|
||||
for Data in self.RawDataList:
|
||||
Buffer += pack(PackStr,
|
||||
GetIntegerValue(Data[0]),
|
||||
GetIntegerValue(Data[1]))
|
||||
GetIntegerValue(Data[0]))
|
||||
for subData in Data[1]:
|
||||
Buffer += pack(PackStr,
|
||||
GetIntegerValue(subData))
|
||||
return Buffer
|
||||
|
||||
## DbStringItemList
|
||||
@ -732,7 +739,7 @@ def BuildExDataBase(Dict):
|
||||
DbPcdNameOffsetTable = DbItemList(4,RawDataList = PcdNameOffsetTable)
|
||||
|
||||
SizeTableValue = zip(Dict['SIZE_TABLE_MAXIMUM_LENGTH'], Dict['SIZE_TABLE_CURRENT_LENGTH'])
|
||||
DbSizeTableValue = DbSizeTableItemList(4, RawDataList = SizeTableValue)
|
||||
DbSizeTableValue = DbSizeTableItemList(2, RawDataList = SizeTableValue)
|
||||
InitValueUint16 = Dict['INIT_DB_VALUE_UINT16']
|
||||
DbInitValueUint16 = DbComItemList(2, RawDataList = InitValueUint16)
|
||||
VardefValueUint16 = Dict['VARDEF_DB_VALUE_UINT16']
|
||||
@ -812,7 +819,7 @@ def BuildExDataBase(Dict):
|
||||
SkuIndexIndexTable = [(0) for i in xrange(len(Dict['SKU_INDEX_VALUE']))]
|
||||
SkuIndexIndexTable[0] = 0 #Dict['SKU_INDEX_VALUE'][0][0]
|
||||
for i in range(1,len(Dict['SKU_INDEX_VALUE'])):
|
||||
SkuIndexIndexTable[i] = SkuIndexIndexTable[i-1]+Dict['SKU_INDEX_VALUE'][i-1][0]
|
||||
SkuIndexIndexTable[i] = SkuIndexIndexTable[i-1]+Dict['SKU_INDEX_VALUE'][i-1][0] + 1
|
||||
for (LocalTokenNumberTableIndex, (Offset, Table)) in enumerate(LocalTokenNumberTable):
|
||||
DbIndex = 0
|
||||
DbOffset = FixedHeaderLen
|
||||
@ -829,7 +836,7 @@ def BuildExDataBase(Dict):
|
||||
LocalTokenNumberTable[LocalTokenNumberTableIndex] = DbOffset|int(TokenTypeValue)
|
||||
# if PCD_TYPE_SKU_ENABLED, then we need to fix up the SkuTable
|
||||
|
||||
SkuIndexTabalOffset = SkuIdTableOffset + Dict['SKUID_VALUE'][0]
|
||||
SkuIndexTabalOffset = SkuIdTableOffset + Dict['SKUID_VALUE'][0] + 1
|
||||
if (TokenTypeValue & (0x2 << 28)):
|
||||
SkuTable[SkuHeaderIndex] = (DbOffset|int(TokenTypeValue & ~(0x2<<28)), SkuIndexTabalOffset + SkuIndexIndexTable[SkuHeaderIndex])
|
||||
LocalTokenNumberTable[LocalTokenNumberTableIndex] = (SkuTableOffset + SkuHeaderIndex * 8) | int(TokenTypeValue)
|
||||
@ -842,6 +849,7 @@ def BuildExDataBase(Dict):
|
||||
|
||||
# resolve variable table offset
|
||||
for VariableEntries in VariableTable:
|
||||
skuindex = 0
|
||||
for VariableEntryPerSku in VariableEntries:
|
||||
(VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable) = VariableEntryPerSku[:]
|
||||
DbIndex = 0
|
||||
@ -853,7 +861,9 @@ def BuildExDataBase(Dict):
|
||||
DbOffset += DbItemTotal[DbIndex].GetListSize()
|
||||
else:
|
||||
assert(False)
|
||||
|
||||
if isinstance(VariableRefTable[0],list):
|
||||
DbOffset += skuindex * 4
|
||||
skuindex += 1
|
||||
if DbIndex >= InitTableNum:
|
||||
assert(False)
|
||||
|
||||
@ -995,10 +1005,6 @@ def CreatePcdDatabaseCode (Info, AutoGenC, AutoGenH):
|
||||
DbFile.write(PcdDbBuffer)
|
||||
Changed = SaveFileOnChange(DbFileName, DbFile.getvalue(), True)
|
||||
|
||||
|
||||
def CArrayToArray(carray):
|
||||
return "{%s, 0x00}" % ", ".join(["0x%02x" % ord(C) for C in carray])
|
||||
|
||||
## Create PCD database in DXE or PEI phase
|
||||
#
|
||||
# @param Platform The platform object
|
||||
@ -1094,6 +1100,8 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
Dict['PCD_TOKENSPACE_MAP'] = []
|
||||
Dict['PCD_NAME_OFFSET'] = []
|
||||
|
||||
PCD_STRING_INDEX_MAP = {}
|
||||
|
||||
StringTableIndex = 0
|
||||
StringTableSize = 0
|
||||
NumberOfLocalTokens = 0
|
||||
@ -1105,6 +1113,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
GuidList = []
|
||||
i = 0
|
||||
for Pcd in Platform.DynamicPcdList:
|
||||
VoidStarTypeCurrSize = []
|
||||
i += 1
|
||||
CName = Pcd.TokenCName
|
||||
TokenSpaceGuidCName = Pcd.TokenSpaceGuidCName
|
||||
@ -1156,6 +1165,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
SkuIndexTableTmp = []
|
||||
SkuIndexTableTmp.append(0)
|
||||
SkuIdIndex = 1
|
||||
VariableHeadList = []
|
||||
for SkuName in Pcd.SkuInfoList:
|
||||
Sku = Pcd.SkuInfoList[SkuName]
|
||||
SkuId = Sku.SkuId
|
||||
@ -1171,27 +1181,36 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
if len(Sku.VariableName) > 0:
|
||||
Pcd.TokenTypeList += ['PCD_TYPE_HII']
|
||||
Pcd.InitString = 'INIT'
|
||||
# store VariableName to stringTable and calculate the VariableHeadStringIndex
|
||||
if Sku.VariableName.startswith('{'):
|
||||
VariableNameStructure = CArrayToArray(Sku.VariableName)
|
||||
else:
|
||||
VariableNameStructure = StringToArray(Sku.VariableName)
|
||||
if VariableNameStructure not in Dict['STRING_TABLE_VALUE']:
|
||||
Dict['STRING_TABLE_CNAME'].append(CName)
|
||||
Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid)
|
||||
if StringTableIndex == 0:
|
||||
Dict['STRING_TABLE_INDEX'].append('')
|
||||
else:
|
||||
Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)
|
||||
|
||||
Dict['STRING_TABLE_LENGTH'].append((len(Sku.VariableName) - 3 + 1) * 2 )
|
||||
Dict['STRING_TABLE_VALUE'].append(VariableNameStructure)
|
||||
StringTableIndex += 1
|
||||
StringTableSize += (len(Sku.VariableName) - 3 + 1) * 2
|
||||
VariableHeadStringIndex = 0
|
||||
for Index in range(Dict['STRING_TABLE_VALUE'].index(VariableNameStructure)):
|
||||
VariableHeadStringIndex += Dict['STRING_TABLE_LENGTH'][Index]
|
||||
|
||||
# Store all variable names of one HII PCD under different SKU to stringTable
|
||||
# and calculate the VariableHeadStringIndex
|
||||
if SkuIdIndex - 2 == 0:
|
||||
for SkuName in Pcd.SkuInfoList:
|
||||
SkuInfo = Pcd.SkuInfoList[SkuName]
|
||||
if SkuInfo.SkuId == None or SkuInfo.SkuId == '':
|
||||
continue
|
||||
VariableNameStructure = StringToArray(SkuInfo.VariableName)
|
||||
if VariableNameStructure not in Dict['STRING_TABLE_VALUE']:
|
||||
Dict['STRING_TABLE_CNAME'].append(CName)
|
||||
Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid)
|
||||
if StringTableIndex == 0:
|
||||
Dict['STRING_TABLE_INDEX'].append('')
|
||||
else:
|
||||
Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)
|
||||
VarNameSize = len(VariableNameStructure.replace(',',' ').split())
|
||||
Dict['STRING_TABLE_LENGTH'].append(VarNameSize )
|
||||
Dict['STRING_TABLE_VALUE'].append(VariableNameStructure)
|
||||
StringHeadOffsetList.append(str(StringTableSize) + 'U')
|
||||
VarStringDbOffsetList = []
|
||||
VarStringDbOffsetList.append(StringTableSize)
|
||||
Dict['STRING_DB_VALUE'].append(VarStringDbOffsetList)
|
||||
StringTableIndex += 1
|
||||
StringTableSize += len(VariableNameStructure.replace(',',' ').split())
|
||||
VariableHeadStringIndex = 0
|
||||
for Index in range(Dict['STRING_TABLE_VALUE'].index(VariableNameStructure)):
|
||||
VariableHeadStringIndex += Dict['STRING_TABLE_LENGTH'][Index]
|
||||
VariableHeadList.append(VariableHeadStringIndex)
|
||||
|
||||
VariableHeadStringIndex = VariableHeadList[SkuIdIndex - 2]
|
||||
# store VariableGuid to GuidTable and get the VariableHeadGuidIndex
|
||||
VariableGuidStructure = Sku.VariableGuidValue
|
||||
VariableGuid = GuidStructureStringToGuidValueName(VariableGuidStructure)
|
||||
@ -1246,7 +1265,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
# the Pcd default value was filled before
|
||||
VariableOffset = len(Dict['VARDEF_DB_VALUE_' + Pcd.DatumType]) - 1
|
||||
VariableRefTable = Dict['VARDEF_DB_VALUE_' + Pcd.DatumType]
|
||||
VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable])
|
||||
VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable])
|
||||
|
||||
elif Sku.VpdOffset != '':
|
||||
Pcd.TokenTypeList += ['PCD_TYPE_VPD']
|
||||
@ -1256,11 +1275,8 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
# Also add the VOID* string of VPD PCD to SizeTable
|
||||
if Pcd.DatumType == 'VOID*':
|
||||
NumberOfSizeItems += 1
|
||||
Dict['SIZE_TABLE_CNAME'].append(CName)
|
||||
Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)
|
||||
# For VPD type of PCD, its current size is equal to its MAX size.
|
||||
Dict['SIZE_TABLE_CURRENT_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')
|
||||
Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')
|
||||
VoidStarTypeCurrSize = [str(Pcd.MaxDatumSize) + 'U']
|
||||
continue
|
||||
|
||||
if Pcd.DatumType == 'VOID*':
|
||||
@ -1278,29 +1294,36 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
else:
|
||||
Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex)
|
||||
if Sku.DefaultValue[0] == 'L':
|
||||
Size = (len(Sku.DefaultValue) - 3 + 1) * 2
|
||||
Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue))
|
||||
DefaultValueBinStructure = StringToArray(Sku.DefaultValue)
|
||||
Size = len(DefaultValueBinStructure.replace(',',' ').split())
|
||||
Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)
|
||||
elif Sku.DefaultValue[0] == '"':
|
||||
Size = len(Sku.DefaultValue) - 2 + 1
|
||||
Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue))
|
||||
DefaultValueBinStructure = StringToArray(Sku.DefaultValue)
|
||||
Size = len(Sku.DefaultValue) -2 + 1
|
||||
Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)
|
||||
elif Sku.DefaultValue[0] == '{':
|
||||
Size = len(Sku.DefaultValue.replace(',',' ').split())
|
||||
Dict['STRING_TABLE_VALUE'].append(Sku.DefaultValue)
|
||||
DefaultValueBinStructure = StringToArray(Sku.DefaultValue)
|
||||
Size = len(Sku.DefaultValue.split(","))
|
||||
Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure)
|
||||
|
||||
StringHeadOffsetList.append(str(StringTableSize) + 'U')
|
||||
StringDbOffsetList.append(StringTableSize)
|
||||
Dict['SIZE_TABLE_CNAME'].append(CName)
|
||||
Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)
|
||||
Dict['SIZE_TABLE_CURRENT_LENGTH'].append(str(Size) + 'U')
|
||||
Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')
|
||||
if Pcd.MaxDatumSize != '':
|
||||
MaxDatumSize = int(Pcd.MaxDatumSize, 0)
|
||||
if MaxDatumSize < Size:
|
||||
MaxDatumSize = Size
|
||||
Size = MaxDatumSize
|
||||
Dict['STRING_TABLE_LENGTH'].append(Size)
|
||||
EdkLogger.error("build", AUTOGEN_ERROR,
|
||||
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName),
|
||||
ExtraData="[%s]" % str(Platform))
|
||||
else:
|
||||
MaxDatumSize = Size
|
||||
StringTabLen = MaxDatumSize
|
||||
if StringTabLen % 2:
|
||||
StringTabLen += 1
|
||||
if Sku.VpdOffset == '':
|
||||
VoidStarTypeCurrSize.append(str(Size) + 'U')
|
||||
Dict['STRING_TABLE_LENGTH'].append(StringTabLen)
|
||||
StringTableIndex += 1
|
||||
StringTableSize += (Size)
|
||||
StringTableSize += (StringTabLen)
|
||||
else:
|
||||
if "PCD_TYPE_HII" not in Pcd.TokenTypeList:
|
||||
Pcd.TokenTypeList += ['PCD_TYPE_DATA']
|
||||
@ -1326,8 +1349,14 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
DbValueList.append(Sku.DefaultValue)
|
||||
|
||||
Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))
|
||||
if Pcd.DatumType == 'VOID*':
|
||||
Dict['SIZE_TABLE_CNAME'].append(CName)
|
||||
Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)
|
||||
Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U')
|
||||
Dict['SIZE_TABLE_CURRENT_LENGTH'].append(VoidStarTypeCurrSize)
|
||||
|
||||
SkuIndexTableTmp[0] = len(SkuIndexTableTmp)
|
||||
|
||||
SkuIndexTableTmp[0] = len(SkuIndexTableTmp) - 1
|
||||
if len(Pcd.SkuInfoList) > 1:
|
||||
Dict['SKU_INDEX_VALUE'].append(SkuIndexTableTmp)
|
||||
|
||||
@ -1352,6 +1381,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
Dict['STRING_HEAD_NUMSKUS_DECL'].append(len(Pcd.SkuInfoList))
|
||||
Dict['STRING_HEAD_VALUE'].append(', '.join(StringHeadOffsetList))
|
||||
Dict['STRING_DB_VALUE'].append(StringDbOffsetList)
|
||||
PCD_STRING_INDEX_MAP[len(Dict['STRING_HEAD_CNAME_DECL']) -1 ] = len(Dict['STRING_DB_VALUE']) -1
|
||||
if 'PCD_TYPE_DATA' in Pcd.TokenTypeList:
|
||||
Dict[Pcd.InitString+'_CNAME_DECL_'+Pcd.DatumType].append(CName)
|
||||
Dict[Pcd.InitString+'_GUID_DECL_'+Pcd.DatumType].append(TokenSpaceGuid)
|
||||
@ -1405,11 +1435,12 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
TokenSpaceGuidCNameArray = StringToArray('"' + TokenSpaceGuidCName + '"' )
|
||||
if TokenSpaceGuidCNameArray not in Dict['PCD_TOKENSPACE']:
|
||||
Dict['PCD_TOKENSPACE'].append(TokenSpaceGuidCNameArray)
|
||||
Dict['PCD_TOKENSPACE_LENGTH'].append( len(TokenSpaceGuidCName) + 1 )
|
||||
Dict['PCD_TOKENSPACE_LENGTH'].append( len(TokenSpaceGuidCNameArray.split(",")) )
|
||||
Dict['PCD_TOKENSPACE_MAP'][GeneratedTokenNumber] = Dict['PCD_TOKENSPACE'].index(TokenSpaceGuidCNameArray)
|
||||
Dict['PCD_CNAME'][GeneratedTokenNumber] = StringToArray('"' + CName + '"' )
|
||||
CNameBinArray = StringToArray('"' + CName + '"' )
|
||||
Dict['PCD_CNAME'][GeneratedTokenNumber] = CNameBinArray
|
||||
|
||||
Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CName) + 1
|
||||
Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CNameBinArray.split(","))
|
||||
|
||||
|
||||
Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))
|
||||
@ -1427,6 +1458,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
if 'PCD_TYPE_STRING' in Pcd.TokenTypeList and 'PCD_TYPE_HII' not in Pcd.TokenTypeList:
|
||||
# Find index by CName, TokenSpaceGuid
|
||||
Offset = GetMatchedIndex(CName, Dict['STRING_HEAD_CNAME_DECL'], TokenSpaceGuid, Dict['STRING_HEAD_GUID_DECL'])
|
||||
Offset = PCD_STRING_INDEX_MAP[Offset]
|
||||
assert(Offset != -1)
|
||||
Table = Dict['STRING_DB_VALUE']
|
||||
if 'PCD_TYPE_DATA' in Pcd.TokenTypeList:
|
||||
@ -1475,13 +1507,13 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
Dict['PCD_TOKENSPACE_OFFSET'].append(TokenSpaceIndex)
|
||||
for index in range(len(Dict['PCD_TOKENSPACE'])):
|
||||
StringTableSize += Dict['PCD_TOKENSPACE_LENGTH'][index]
|
||||
|
||||
StringTableIndex += 1
|
||||
for index in range(len(Dict['PCD_CNAME'])):
|
||||
Dict['PCD_CNAME_OFFSET'].append(StringTableSize)
|
||||
Dict['PCD_NAME_OFFSET'].append(Dict['PCD_TOKENSPACE_OFFSET'][index])
|
||||
Dict['PCD_NAME_OFFSET'].append(StringTableSize)
|
||||
StringTableSize += Dict['PCD_CNAME_LENGTH'][index]
|
||||
|
||||
StringTableIndex += 1
|
||||
if GuidList != []:
|
||||
Dict['GUID_TABLE_EMPTY'] = 'FALSE'
|
||||
Dict['GUID_TABLE_SIZE'] = str(len(GuidList)) + 'U'
|
||||
@ -1501,7 +1533,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
if Dict['SIZE_TABLE_CNAME'] == []:
|
||||
Dict['SIZE_TABLE_CNAME'].append('')
|
||||
Dict['SIZE_TABLE_GUID'].append('')
|
||||
Dict['SIZE_TABLE_CURRENT_LENGTH'].append('0U')
|
||||
Dict['SIZE_TABLE_CURRENT_LENGTH'].append(['0U'])
|
||||
Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append('0U')
|
||||
|
||||
if NumberOfLocalTokens != 0:
|
||||
@ -1524,7 +1556,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase):
|
||||
if NumberOfSkuEnabledPcd != 0:
|
||||
Dict['SKU_HEAD_SIZE'] = str(NumberOfSkuEnabledPcd) + 'U'
|
||||
|
||||
Dict['SKUID_VALUE'][0] = len(Dict['SKUID_VALUE'])
|
||||
Dict['SKUID_VALUE'][0] = len(Dict['SKUID_VALUE']) - 1
|
||||
|
||||
AutoGenH.Append(gPcdDatabaseAutoGenH.Replace(Dict))
|
||||
if NumberOfLocalTokens == 0:
|
||||
|
Reference in New Issue
Block a user