# This class is used to retrieve information stored in database and convert them\r
# into PlatformBuildClassObject form for easier use for AutoGen.\r
#\r
-from Common.String import *\r
+from Common.StringUtils import *\r
from Common.DataType import *\r
from Common.Misc import *\r
from types import *\r
import subprocess\r
from Common.Misc import SaveFileOnChange\r
from Workspace.BuildClassObject import PlatformBuildClassObject, StructurePcd, PcdClassObject, ModuleBuildClassObject\r
-from collections import OrderedDict\r
+from collections import OrderedDict,defaultdict\r
\r
PcdValueInitName = 'PcdValueInit'\r
\r
try:\r
Fd = open(F, 'r')\r
FileContent = Fd.read()\r
- except BaseException, X:\r
+ except BaseException as X:\r
EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=F + "\n\t" + str(X))\r
finally:\r
if "Fd" in dir(locals()):\r
class DscBuildData(PlatformBuildClassObject):\r
# dict used to convert PCD type in database to string used by build tool\r
_PCD_TYPE_STRING_ = {\r
- MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild",\r
- MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule",\r
- MODEL_PCD_FEATURE_FLAG : "FeatureFlag",\r
- MODEL_PCD_DYNAMIC : "Dynamic",\r
- MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic",\r
- MODEL_PCD_DYNAMIC_HII : "DynamicHii",\r
- MODEL_PCD_DYNAMIC_VPD : "DynamicVpd",\r
- MODEL_PCD_DYNAMIC_EX : "DynamicEx",\r
- MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx",\r
- MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii",\r
- MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd",\r
+ MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BUILD,\r
+ MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_IN_MODULE,\r
+ MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLAG,\r
+ MODEL_PCD_DYNAMIC : TAB_PCDS_DYNAMIC,\r
+ MODEL_PCD_DYNAMIC_DEFAULT : TAB_PCDS_DYNAMIC,\r
+ MODEL_PCD_DYNAMIC_HII : TAB_PCDS_DYNAMIC_HII,\r
+ MODEL_PCD_DYNAMIC_VPD : TAB_PCDS_DYNAMIC_VPD,\r
+ MODEL_PCD_DYNAMIC_EX : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_EX_DEFAULT : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_EX_HII : TAB_PCDS_DYNAMIC_EX_HII,\r
+ MODEL_PCD_DYNAMIC_EX_VPD : TAB_PCDS_DYNAMIC_EX_VPD,\r
}\r
\r
# dict used to convert part of [Defines] to members of DscBuildData directly\r
self._SkuIds = OrderedDict()\r
RecordList = self._RawData[MODEL_EFI_SKU_ID, self._Arch]\r
for Record in RecordList:\r
- if Record[0] in [None, '']:\r
+ if not Record[0]:\r
EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID number',\r
File=self.MetaFile, Line=Record[-1])\r
- if Record[1] in [None, '']:\r
+ if not Record[1]:\r
EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name',\r
File=self.MetaFile, Line=Record[-1])\r
if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]):\r
self.DefaultStores = OrderedDict()\r
RecordList = self._RawData[MODEL_EFI_DEFAULT_STORES, self._Arch]\r
for Record in RecordList:\r
- if Record[0] in [None, '']:\r
+ if not Record[0]:\r
EdkLogger.error('build', FORMAT_INVALID, 'No DefaultStores ID number',\r
File=self.MetaFile, Line=Record[-1])\r
- if Record[1] in [None, '']:\r
+ if not Record[1]:\r
EdkLogger.error('build', FORMAT_INVALID, 'No DefaultStores ID name',\r
File=self.MetaFile, Line=Record[-1])\r
if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]):\r
DatumType = self._DecPcds[PcdCName, TokenSpaceGuid].DatumType\r
try:\r
ValueList[Index] = ValueExpressionEx(ValueList[Index], DatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
+ except BadExpression as Value:\r
EdkLogger.error('Parser', FORMAT_INVALID, Value, File=self.MetaFile, Line=LineNo,\r
ExtraData="PCD [%s.%s] Value \"%s\" " % (\r
TokenSpaceGuid, PcdCName, ValueList[Index]))\r
- except EvaluationException, Excpt:\r
+ except EvaluationException as Excpt:\r
if hasattr(Excpt, 'Pcd'):\r
if Excpt.Pcd in GlobalData.gPlatformOtherPcds:\r
EdkLogger.error('Parser', FORMAT_INVALID, "Cannot use this PCD (%s) in an expression as"\r
for skuid in pcd.SkuInfoList:\r
skuobj = pcd.SkuInfoList.get(skuid)\r
if TAB_DEFAULT_STORES_DEFAULT not in skuobj.DefaultStoreDict:\r
- PcdDefaultStoreSet = set([defaultstorename for defaultstorename in skuobj.DefaultStoreDict])\r
+ PcdDefaultStoreSet = set(defaultstorename for defaultstorename in skuobj.DefaultStoreDict)\r
mindefaultstorename = DefaultStoreMgr.GetMin(PcdDefaultStoreSet)\r
skuobj.DefaultStoreDict[TAB_DEFAULT_STORES_DEFAULT] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename])\r
return Pcds\r
return PcdValue\r
try:\r
PcdValue = ValueExpressionEx(PcdValue[1:], PcdDatumType, GuidDict)(True)\r
- except BadExpression, Value: \r
+ except BadExpression as Value:\r
EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
(TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
elif PcdValue.startswith("L'") or PcdValue.startswith("'"):\r
return PcdValue\r
try:\r
PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
- except BadExpression, Value:\r
+ except BadExpression as Value:\r
EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
(TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
elif PcdValue.startswith('L'):\r
return PcdValue\r
try:\r
PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
- except BadExpression, Value:\r
+ except BadExpression as Value:\r
EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
(TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
else:\r
return PcdValue\r
try:\r
PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
- except BadExpression, Value:\r
+ except BadExpression as Value:\r
EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
(TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
return PcdValue\r
options[Key] += ' ' + Option\r
return self._ModuleTypeOptions[Edk, ModuleType]\r
\r
- def GetStructurePcdInfo(self, PcdSet):\r
- structure_pcd_data = {}\r
+ @staticmethod\r
+ def GetStructurePcdInfo(PcdSet):\r
+ structure_pcd_data = defaultdict(list)\r
for item in PcdSet:\r
- if (item[0],item[1]) not in structure_pcd_data:\r
- structure_pcd_data[(item[0],item[1])] = []\r
structure_pcd_data[(item[0],item[1])].append(item)\r
\r
return structure_pcd_data\r
S_PcdSet.append([ TokenSpaceGuid.split(".")[0],TokenSpaceGuid.split(".")[1], PcdCName,SkuName, default_store,Dummy5, AnalyzePcdExpression(Setting)[0]])\r
\r
# handle pcd value override\r
- StrPcdSet = self.GetStructurePcdInfo(S_PcdSet)\r
+ StrPcdSet = DscBuildData.GetStructurePcdInfo(S_PcdSet)\r
S_pcd_set = OrderedDict()\r
for str_pcd in StrPcdSet:\r
str_pcd_obj = Pcds.get((str_pcd[1], str_pcd[0]), None)\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
if not NoDefault:\r
- stru_pcd.ValueChain[(skuid,'')]= (nextskuid,'')\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
for skuid in SkuIds:\r
nextskuid = skuid\r
nextskuid = self.SkuIdMgr.GetNextSkuId(nextskuid)\r
if NoDefault:\r
continue\r
- PcdDefaultStoreSet = set([defaultstorename for defaultstorename in stru_pcd.SkuOverrideValues[nextskuid]])\r
+ PcdDefaultStoreSet = set(defaultstorename for defaultstorename in stru_pcd.SkuOverrideValues[nextskuid])\r
mindefaultstorename = DefaultStoreMgr.GetMin(PcdDefaultStoreSet)\r
\r
for defaultstoreid in DefaultStores:\r
if defaultstoreid not in stru_pcd.SkuOverrideValues[skuid]:\r
stru_pcd.SkuOverrideValues[skuid][defaultstoreid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid][mindefaultstorename])\r
- stru_pcd.ValueChain[(skuid,defaultstoreid)]= (nextskuid,mindefaultstorename)\r
+ stru_pcd.ValueChain.add((skuid,defaultstoreid))\r
S_pcd_set = DscBuildData.OverrideByFdfComm(S_pcd_set)\r
Str_Pcd_Values = self.GenerateByteArrayValue(S_pcd_set)\r
if Str_Pcd_Values:\r
if str_pcd_obj.Type not in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII],\r
self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
continue\r
- PcdDefaultStoreSet = set([defaultstorename for skuobj in str_pcd_obj.SkuInfoList.values() for defaultstorename in skuobj.DefaultStoreDict])\r
+ PcdDefaultStoreSet = set(defaultstorename for skuobj in str_pcd_obj.SkuInfoList.values() for defaultstorename in skuobj.DefaultStoreDict)\r
DefaultStoreObj = DefaultStore(self._GetDefaultStores())\r
mindefaultstorename = DefaultStoreObj.GetMin(PcdDefaultStoreSet)\r
str_pcd_obj.SkuInfoList[self.SkuIdMgr.SystemSkuId].HiiDefaultValue = str_pcd_obj.SkuInfoList[self.SkuIdMgr.SystemSkuId].DefaultStoreDict[mindefaultstorename]\r
def get_length(value):\r
Value = value.strip()\r
if len(value) > 1:\r
- if Value.startswith('GUID') and Value.endswith(')'):\r
+ if Value.startswith(TAB_GUID) and Value.endswith(')'):\r
return 16\r
if Value.startswith('L"') and Value.endswith('"'):\r
return len(Value[2:-1])\r
return len(Value) - 2\r
return len(Value)\r
\r
- return str(max([pcd_size for pcd_size in [get_length(item) for item in sku_values]]))\r
+ return str(max(get_length(item) for item in sku_values))\r
\r
@staticmethod\r
def ExecuteCommand (Command):\r
Result = Result + '"'\r
return Result\r
\r
- @staticmethod\r
- def GetPcdMaxSize(Pcd):\r
- if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- return MAX_SIZE_TYPE[Pcd.DatumType]\r
-\r
- MaxSize = int(Pcd.MaxDatumSize,10) if Pcd.MaxDatumSize else 0\r
- if Pcd.PcdValueFromComm:\r
- if Pcd.PcdValueFromComm.startswith("{") and Pcd.PcdValueFromComm.endswith("}"):\r
- return max([len(Pcd.PcdValueFromComm.split(",")),MaxSize])\r
- elif Pcd.PcdValueFromComm.startswith("\"") or Pcd.PcdValueFromComm.startswith("\'"):\r
- return max([len(Pcd.PcdValueFromComm)-2+1,MaxSize])\r
- elif Pcd.PcdValueFromComm.startswith("L\""):\r
- return max([2*(len(Pcd.PcdValueFromComm)-3+1),MaxSize])\r
- else:\r
- return max([len(Pcd.PcdValueFromComm),MaxSize])\r
- return MaxSize\r
-\r
def GenerateSizeFunction(self,Pcd):\r
CApp = "// Default Value in Dec \n"\r
CApp = CApp + "void Cal_%s_%s_Size(UINT32 *Size){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
while '[' in FieldName:\r
FieldName = FieldName.rsplit('[', 1)[0]\r
CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, Pcd.PcdFieldValueFromComm[FieldName_ori][1], Pcd.PcdFieldValueFromComm[FieldName_ori][2], Pcd.PcdFieldValueFromComm[FieldName_ori][0])\r
- CApp = CApp + " *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd))\r
+ CApp = CApp + " *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (Pcd.GetPcdMaxSize(),Pcd.GetPcdMaxSize(),Pcd.GetPcdMaxSize())\r
CApp = CApp + "}\n"\r
return CApp\r
\r
InitByteValue = ""\r
CApp = PcdMainCHeader\r
\r
- Includes = {}\r
IncludeFiles = set()\r
for PcdName in StructuredPcds:\r
Pcd = StructuredPcds[PcdName]\r
for IncludeFile in Pcd.StructuredPcdIncludeFile:\r
- if IncludeFile not in Includes:\r
- Includes[IncludeFile] = True\r
+ if IncludeFile not in IncludeFiles:\r
IncludeFiles.add(IncludeFile)\r
CApp = CApp + '#include <%s>\n' % (IncludeFile)\r
CApp = CApp + '\n'\r
ValueList = Value.split()\r
if ValueList:\r
for Id, Item in enumerate(ValueList):\r
- if Item == '-D' or Item == '/D':\r
+ if Item in ['-D', '/D', '-U', '/U']:\r
CC_FLAGS += ' ' + Item\r
if Id + 1 < len(ValueList):\r
CC_FLAGS += ' ' + ValueList[Id + 1]\r
- elif Item.startswith('/D') or Item.startswith('-D'):\r
+ elif Item.startswith(('-D', '/D', '-U', '/U')):\r
CC_FLAGS += ' ' + Item\r
MakeApp += CC_FLAGS\r
\r
SearchPathList = []\r
SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Include")))\r
SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Common")))\r
- SearchPathList.extend([str(item) for item in IncSearchList])\r
+ SearchPathList.extend(str(item) for item in IncSearchList)\r
IncFileList = GetDependencyList(IncludeFileFullPaths,SearchPathList)\r
for include_file in IncFileList:\r
MakeApp += "$(OBJECTS) : %s\n" % include_file\r
Pcds = {}\r
DefaultStoreObj = DefaultStore(self._GetDefaultStores())\r
SkuIds = {skuname:skuid for skuname,skuid in self.SkuIdMgr.AvailableSkuIdSet.items() if skuname != TAB_COMMON}\r
- DefaultStores = set([storename for pcdobj in PcdSet.values() for skuobj in pcdobj.SkuInfoList.values() for storename in skuobj.DefaultStoreDict])\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
if PcdType in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
for skuid in PcdObj.SkuInfoList:\r
skuobj = PcdObj.SkuInfoList[skuid]\r
- mindefaultstorename = DefaultStoreObj.GetMin(set([defaultstorename for defaultstorename in skuobj.DefaultStoreDict]))\r
+ mindefaultstorename = DefaultStoreObj.GetMin(set(defaultstorename for defaultstorename in skuobj.DefaultStoreDict))\r
for defaultstorename in DefaultStores:\r
if defaultstorename not in skuobj.DefaultStoreDict:\r
skuobj.DefaultStoreDict[defaultstorename] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename])\r
invalidhii = []\r
for pcdname in Pcds:\r
pcd = Pcds[pcdname]\r
- varnameset = set([sku.VariableName for (skuid,sku) in pcd.SkuInfoList.items()])\r
+ varnameset = set(sku.VariableName for (skuid,sku) in pcd.SkuInfoList.items())\r
if len(varnameset) > 1:\r
invalidhii.append(".".join((pcdname[1],pcdname[0])))\r
if len(invalidhii):\r