X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FWorkspace%2FDscBuildData.py;h=a80c07bc1e55b56930371d326d0ae4b083a964c2;hp=e335b3df85af8980cba337b8000463ab062bae00;hb=87d2afd07c822e6d5ab12bc8dc0f0bfa31bea679;hpb=3e4faa268e2fafb119fdf5f48a9fcc111f9dc62e diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index e335b3df85..a80c07bc1e 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -17,7 +17,8 @@ # This class is used to retrieve information stored in database and convert them # into PlatformBuildClassObject form for easier use for AutoGen. # -from Common.String import * +from __future__ import print_function +from Common.StringUtils import * from Common.DataType import * from Common.Misc import * from types import * @@ -39,7 +40,7 @@ import Common.GlobalData as GlobalData import subprocess from Common.Misc import SaveFileOnChange from Workspace.BuildClassObject import PlatformBuildClassObject, StructurePcd, PcdClassObject, ModuleBuildClassObject -from collections import OrderedDict +from collections import OrderedDict,defaultdict PcdValueInitName = 'PcdValueInit' @@ -120,7 +121,7 @@ def GetDependencyList(FileStack,SearchPathList): try: Fd = open(F, 'r') FileContent = Fd.read() - except BaseException, X: + except BaseException as X: EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=F + "\n\t" + str(X)) finally: if "Fd" in dir(locals()): @@ -158,17 +159,17 @@ def GetDependencyList(FileStack,SearchPathList): class DscBuildData(PlatformBuildClassObject): # dict used to convert PCD type in database to string used by build tool _PCD_TYPE_STRING_ = { - MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild", - MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule", - MODEL_PCD_FEATURE_FLAG : "FeatureFlag", - MODEL_PCD_DYNAMIC : "Dynamic", - MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic", - MODEL_PCD_DYNAMIC_HII : "DynamicHii", - MODEL_PCD_DYNAMIC_VPD : "DynamicVpd", - MODEL_PCD_DYNAMIC_EX : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii", - MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd", + MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BUILD, + MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_IN_MODULE, + MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLAG, + MODEL_PCD_DYNAMIC : TAB_PCDS_DYNAMIC, + MODEL_PCD_DYNAMIC_DEFAULT : TAB_PCDS_DYNAMIC, + MODEL_PCD_DYNAMIC_HII : TAB_PCDS_DYNAMIC_HII, + MODEL_PCD_DYNAMIC_VPD : TAB_PCDS_DYNAMIC_VPD, + MODEL_PCD_DYNAMIC_EX : TAB_PCDS_DYNAMIC_EX, + MODEL_PCD_DYNAMIC_EX_DEFAULT : TAB_PCDS_DYNAMIC_EX, + MODEL_PCD_DYNAMIC_EX_HII : TAB_PCDS_DYNAMIC_EX_HII, + MODEL_PCD_DYNAMIC_EX_VPD : TAB_PCDS_DYNAMIC_EX_VPD, } # dict used to convert part of [Defines] to members of DscBuildData directly @@ -635,10 +636,10 @@ class DscBuildData(PlatformBuildClassObject): self._SkuIds = OrderedDict() RecordList = self._RawData[MODEL_EFI_SKU_ID, self._Arch] for Record in RecordList: - if Record[0] in [None, '']: + if not Record[0]: EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID number', File=self.MetaFile, Line=Record[-1]) - if Record[1] in [None, '']: + if not Record[1]: EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name', File=self.MetaFile, Line=Record[-1]) if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]): @@ -663,10 +664,10 @@ class DscBuildData(PlatformBuildClassObject): self.DefaultStores = OrderedDict() RecordList = self._RawData[MODEL_EFI_DEFAULT_STORES, self._Arch] for Record in RecordList: - if Record[0] in [None, '']: + if not Record[0]: EdkLogger.error('build', FORMAT_INVALID, 'No DefaultStores ID number', File=self.MetaFile, Line=Record[-1]) - if Record[1] in [None, '']: + if not Record[1]: EdkLogger.error('build', FORMAT_INVALID, 'No DefaultStores ID name', File=self.MetaFile, Line=Record[-1]) if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]): @@ -887,11 +888,11 @@ class DscBuildData(PlatformBuildClassObject): DatumType = self._DecPcds[PcdCName, TokenSpaceGuid].DatumType try: ValueList[Index] = ValueExpressionEx(ValueList[Index], DatumType, self._GuidDict)(True) - except BadExpression, Value: + except BadExpression as Value: EdkLogger.error('Parser', FORMAT_INVALID, Value, File=self.MetaFile, Line=LineNo, ExtraData="PCD [%s.%s] Value \"%s\" " % ( TokenSpaceGuid, PcdCName, ValueList[Index])) - except EvaluationException, Excpt: + except EvaluationException as Excpt: if hasattr(Excpt, 'Pcd'): if Excpt.Pcd in GlobalData.gPlatformOtherPcds: EdkLogger.error('Parser', FORMAT_INVALID, "Cannot use this PCD (%s) in an expression as" @@ -942,7 +943,7 @@ class DscBuildData(PlatformBuildClassObject): for skuid in pcd.SkuInfoList: skuobj = pcd.SkuInfoList.get(skuid) if TAB_DEFAULT_STORES_DEFAULT not in skuobj.DefaultStoreDict: - PcdDefaultStoreSet = set([defaultstorename for defaultstorename in skuobj.DefaultStoreDict]) + PcdDefaultStoreSet = set(defaultstorename for defaultstorename in skuobj.DefaultStoreDict) mindefaultstorename = DefaultStoreMgr.GetMin(PcdDefaultStoreSet) skuobj.DefaultStoreDict[TAB_DEFAULT_STORES_DEFAULT] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename]) return Pcds @@ -1059,7 +1060,7 @@ class DscBuildData(PlatformBuildClassObject): return PcdValue try: PcdValue = ValueExpressionEx(PcdValue[1:], PcdDatumType, GuidDict)(True) - except BadExpression, Value: + except BadExpression as Value: EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % (TokenSpaceGuidCName, TokenCName, PcdValue, Value)) elif PcdValue.startswith("L'") or PcdValue.startswith("'"): @@ -1070,7 +1071,7 @@ class DscBuildData(PlatformBuildClassObject): return PcdValue try: PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True) - except BadExpression, Value: + except BadExpression as Value: EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % (TokenSpaceGuidCName, TokenCName, PcdValue, Value)) elif PcdValue.startswith('L'): @@ -1082,7 +1083,7 @@ class DscBuildData(PlatformBuildClassObject): return PcdValue try: PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True) - except BadExpression, Value: + except BadExpression as Value: EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % (TokenSpaceGuidCName, TokenCName, PcdValue, Value)) else: @@ -1109,7 +1110,7 @@ class DscBuildData(PlatformBuildClassObject): return PcdValue try: PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True) - except BadExpression, Value: + except BadExpression as Value: EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' % (TokenSpaceGuidCName, TokenCName, PcdValue, Value)) return PcdValue @@ -1181,11 +1182,10 @@ class DscBuildData(PlatformBuildClassObject): options[Key] += ' ' + Option return self._ModuleTypeOptions[Edk, ModuleType] - def GetStructurePcdInfo(self, PcdSet): - structure_pcd_data = {} + @staticmethod + def GetStructurePcdInfo(PcdSet): + structure_pcd_data = defaultdict(list) for item in PcdSet: - if (item[0],item[1]) not in structure_pcd_data: - structure_pcd_data[(item[0],item[1])] = [] structure_pcd_data[(item[0],item[1])].append(item) return structure_pcd_data @@ -1292,7 +1292,7 @@ class DscBuildData(PlatformBuildClassObject): S_PcdSet.append([ TokenSpaceGuid.split(".")[0],TokenSpaceGuid.split(".")[1], PcdCName,SkuName, default_store,Dummy5, AnalyzePcdExpression(Setting)[0]]) # handle pcd value override - StrPcdSet = self.GetStructurePcdInfo(S_PcdSet) + StrPcdSet = DscBuildData.GetStructurePcdInfo(S_PcdSet) S_pcd_set = OrderedDict() for str_pcd in StrPcdSet: str_pcd_obj = Pcds.get((str_pcd[1], str_pcd[0]), None) @@ -1348,7 +1348,7 @@ class DscBuildData(PlatformBuildClassObject): nextskuid = self.SkuIdMgr.GetNextSkuId(nextskuid) 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}) if not NoDefault: - stru_pcd.ValueChain[(skuid,'')]= (nextskuid,'') + stru_pcd.ValueChain.add((skuid,'')) if stru_pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]: for skuid in SkuIds: nextskuid = skuid @@ -1361,20 +1361,20 @@ class DscBuildData(PlatformBuildClassObject): nextskuid = self.SkuIdMgr.GetNextSkuId(nextskuid) if NoDefault: continue - PcdDefaultStoreSet = set([defaultstorename for defaultstorename in stru_pcd.SkuOverrideValues[nextskuid]]) + PcdDefaultStoreSet = set(defaultstorename for defaultstorename in stru_pcd.SkuOverrideValues[nextskuid]) mindefaultstorename = DefaultStoreMgr.GetMin(PcdDefaultStoreSet) for defaultstoreid in DefaultStores: if defaultstoreid not in stru_pcd.SkuOverrideValues[skuid]: stru_pcd.SkuOverrideValues[skuid][defaultstoreid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid][mindefaultstorename]) - stru_pcd.ValueChain[(skuid,defaultstoreid)]= (nextskuid,mindefaultstorename) + stru_pcd.ValueChain.add((skuid,defaultstoreid)) S_pcd_set = DscBuildData.OverrideByFdfComm(S_pcd_set) Str_Pcd_Values = self.GenerateByteArrayValue(S_pcd_set) if Str_Pcd_Values: for (skuname,StoreName,PcdGuid,PcdName,PcdValue) in Str_Pcd_Values: str_pcd_obj = S_pcd_set.get((PcdName, PcdGuid)) if str_pcd_obj is None: - print PcdName, PcdGuid + print(PcdName, PcdGuid) raise if str_pcd_obj.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]: @@ -1405,7 +1405,7 @@ class DscBuildData(PlatformBuildClassObject): if str_pcd_obj.Type not in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]: continue - PcdDefaultStoreSet = set([defaultstorename for skuobj in str_pcd_obj.SkuInfoList.values() for defaultstorename in skuobj.DefaultStoreDict]) + PcdDefaultStoreSet = set(defaultstorename for skuobj in str_pcd_obj.SkuInfoList.values() for defaultstorename in skuobj.DefaultStoreDict) DefaultStoreObj = DefaultStore(self._GetDefaultStores()) mindefaultstorename = DefaultStoreObj.GetMin(PcdDefaultStoreSet) str_pcd_obj.SkuInfoList[self.SkuIdMgr.SystemSkuId].HiiDefaultValue = str_pcd_obj.SkuInfoList[self.SkuIdMgr.SystemSkuId].DefaultStoreDict[mindefaultstorename] @@ -1501,7 +1501,7 @@ class DscBuildData(PlatformBuildClassObject): def get_length(value): Value = value.strip() if len(value) > 1: - if Value.startswith('GUID') and Value.endswith(')'): + if Value.startswith(TAB_GUID) and Value.endswith(')'): return 16 if Value.startswith('L"') and Value.endswith('"'): return len(Value[2:-1]) @@ -1515,7 +1515,7 @@ class DscBuildData(PlatformBuildClassObject): return len(Value) - 2 return len(Value) - return str(max([pcd_size for pcd_size in [get_length(item) for item in sku_values]])) + return str(max(get_length(item) for item in sku_values)) @staticmethod def ExecuteCommand (Command): @@ -1536,23 +1536,6 @@ class DscBuildData(PlatformBuildClassObject): Result = Result + '"' return Result - @staticmethod - def GetPcdMaxSize(Pcd): - if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES: - return MAX_SIZE_TYPE[Pcd.DatumType] - - MaxSize = int(Pcd.MaxDatumSize,10) if Pcd.MaxDatumSize else 0 - if Pcd.PcdValueFromComm: - if Pcd.PcdValueFromComm.startswith("{") and Pcd.PcdValueFromComm.endswith("}"): - return max([len(Pcd.PcdValueFromComm.split(",")),MaxSize]) - elif Pcd.PcdValueFromComm.startswith("\"") or Pcd.PcdValueFromComm.startswith("\'"): - return max([len(Pcd.PcdValueFromComm)-2+1,MaxSize]) - elif Pcd.PcdValueFromComm.startswith("L\""): - return max([2*(len(Pcd.PcdValueFromComm)-3+1),MaxSize]) - else: - return max([len(Pcd.PcdValueFromComm),MaxSize]) - return MaxSize - def GenerateSizeFunction(self,Pcd): CApp = "// Default Value in Dec \n" CApp = CApp + "void Cal_%s_%s_Size(UINT32 *Size){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) @@ -1635,7 +1618,7 @@ class DscBuildData(PlatformBuildClassObject): while '[' in FieldName: FieldName = FieldName.rsplit('[', 1)[0] 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]) - CApp = CApp + " *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd)) + CApp = CApp + " *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (Pcd.GetPcdMaxSize(),Pcd.GetPcdMaxSize(),Pcd.GetPcdMaxSize()) CApp = CApp + "}\n" return CApp @@ -1826,7 +1809,7 @@ class DscBuildData(PlatformBuildClassObject): EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " % (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName)), FieldList[FieldName][1], FieldList[FieldName][2])) except: - print "error" + print("error") try: Value, ValueSize = ParseFieldValue (FieldList[FieldName][0]) except Exception: @@ -1948,13 +1931,11 @@ class DscBuildData(PlatformBuildClassObject): InitByteValue = "" CApp = PcdMainCHeader - Includes = {} IncludeFiles = set() for PcdName in StructuredPcds: Pcd = StructuredPcds[PcdName] for IncludeFile in Pcd.StructuredPcdIncludeFile: - if IncludeFile not in Includes: - Includes[IncludeFile] = True + if IncludeFile not in IncludeFiles: IncludeFiles.add(IncludeFile) CApp = CApp + '#include <%s>\n' % (IncludeFile) CApp = CApp + '\n' @@ -2077,11 +2058,11 @@ class DscBuildData(PlatformBuildClassObject): ValueList = Value.split() if ValueList: for Id, Item in enumerate(ValueList): - if Item == '-D' or Item == '/D': + if Item in ['-D', '/D', '-U', '/U']: CC_FLAGS += ' ' + Item if Id + 1 < len(ValueList): CC_FLAGS += ' ' + ValueList[Id + 1] - elif Item.startswith('/D') or Item.startswith('-D'): + elif Item.startswith(('-D', '/D', '-U', '/U')): CC_FLAGS += ' ' + Item MakeApp += CC_FLAGS @@ -2098,7 +2079,7 @@ class DscBuildData(PlatformBuildClassObject): SearchPathList = [] SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Include"))) SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Common"))) - SearchPathList.extend([str(item) for item in IncSearchList]) + SearchPathList.extend(str(item) for item in IncSearchList) IncFileList = GetDependencyList(IncludeFileFullPaths,SearchPathList) for include_file in IncFileList: MakeApp += "$(OBJECTS) : %s\n" % include_file @@ -2172,7 +2153,7 @@ class DscBuildData(PlatformBuildClassObject): if DscBuildData.NeedUpdateOutput(OutputValueFile, PcdValueInitExe ,InputValueFile): Command = PcdValueInitExe + ' -i %s -o %s' % (InputValueFile, OutputValueFile) returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (Command) - if returncode <> 0: + if returncode != 0: EdkLogger.warn('Build', COMMAND_FAILURE, 'Can not collect output from command: %s' % Command) File = open (OutputValueFile, 'r') @@ -2328,7 +2309,7 @@ class DscBuildData(PlatformBuildClassObject): Pcds = {} DefaultStoreObj = DefaultStore(self._GetDefaultStores()) SkuIds = {skuname:skuid for skuname,skuid in self.SkuIdMgr.AvailableSkuIdSet.items() if skuname != TAB_COMMON} - DefaultStores = set([storename for pcdobj in PcdSet.values() for skuobj in pcdobj.SkuInfoList.values() for storename in skuobj.DefaultStoreDict]) + DefaultStores = set(storename for pcdobj in PcdSet.values() for skuobj in pcdobj.SkuInfoList.values() for storename in skuobj.DefaultStoreDict) for PcdCName, TokenSpaceGuid in PcdSet: PcdObj = PcdSet[(PcdCName, TokenSpaceGuid)] self.CopyDscRawValue(PcdObj) @@ -2344,7 +2325,7 @@ class DscBuildData(PlatformBuildClassObject): if PcdType in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]: for skuid in PcdObj.SkuInfoList: skuobj = PcdObj.SkuInfoList[skuid] - mindefaultstorename = DefaultStoreObj.GetMin(set([defaultstorename for defaultstorename in skuobj.DefaultStoreDict])) + mindefaultstorename = DefaultStoreObj.GetMin(set(defaultstorename for defaultstorename in skuobj.DefaultStoreDict)) for defaultstorename in DefaultStores: if defaultstorename not in skuobj.DefaultStoreDict: skuobj.DefaultStoreDict[defaultstorename] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename]) @@ -2518,7 +2499,7 @@ class DscBuildData(PlatformBuildClassObject): invalidhii = [] for pcdname in Pcds: pcd = Pcds[pcdname] - varnameset = set([sku.VariableName for (skuid,sku) in pcd.SkuInfoList.items()]) + varnameset = set(sku.VariableName for (skuid,sku) in pcd.SkuInfoList.items()) if len(varnameset) > 1: invalidhii.append(".".join((pcdname[1],pcdname[0]))) if len(invalidhii):