SkippedArchList = set(self.ArchList).symmetric_difference(set(self.Platform.SupArchList))\r
EdkLogger.verbose("\nArch [%s] is ignored because the platform supports [%s] only!"\r
% (" ".join(SkippedArchList), " ".join(self.Platform.SupArchList)))\r
- self.ArchList = tuple(ArchList)\r
+ self.ArchList = tuple(sorted(ArchList))\r
\r
# Validate build target\r
if self.BuildTarget not in self.Platform.BuildTargets:\r
#\r
content = 'gCommandLineDefines: '\r
content += str(GlobalData.gCommandLineDefines)\r
- content += os.linesep\r
+ content += "\n"\r
content += 'BuildOptionPcd: '\r
content += str(GlobalData.BuildOptionPcd)\r
- content += os.linesep\r
+ content += "\n"\r
content += 'Active Platform: '\r
content += str(self.Platform)\r
- content += os.linesep\r
+ content += "\n"\r
if self.FdfFile:\r
content += 'Flash Image Definition: '\r
content += str(self.FdfFile)\r
- content += os.linesep\r
+ content += "\n"\r
SaveFileOnChange(os.path.join(self.BuildDir, 'BuildOptions'), content, False)\r
\r
#\r
if Pa.PcdTokenNumber:\r
if Pa.DynamicPcdList:\r
for Pcd in Pa.DynamicPcdList:\r
- PcdTokenNumber += os.linesep\r
+ PcdTokenNumber += "\n"\r
PcdTokenNumber += str((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))\r
PcdTokenNumber += ' : '\r
PcdTokenNumber += str(Pa.PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName])\r
if not os.path.exists(self.BuildDir):\r
os.makedirs(self.BuildDir)\r
with open(os.path.join(self.BuildDir, 'AutoGen'), 'w+') as file:\r
- for f in AllWorkSpaceMetaFiles:\r
+ for f in sorted(AllWorkSpaceMetaFiles):\r
print(f, file=file)\r
return True\r
\r
self._DynamicPcdList.extend(list(UnicodePcdArray))\r
self._DynamicPcdList.extend(list(HiiPcdArray))\r
self._DynamicPcdList.extend(list(OtherPcdArray))\r
+ #python3.6 set is not ordered at all\r
+ self._DynamicPcdList = sorted(self._DynamicPcdList, key=lambda x:(x.TokenSpaceGuidCName, x.TokenCName))\r
+ self._NonDynamicPcdList = sorted(self._NonDynamicPcdList, key=lambda x: (x.TokenSpaceGuidCName, x.TokenCName))\r
allskuset = [(SkuName, Sku.SkuId) for pcd in self._DynamicPcdList for (SkuName, Sku) in pcd.SkuInfoList.items()]\r
for pcd in self._DynamicPcdList:\r
if len(pcd.SkuInfoList) == 1:\r
list(PlatformModuleOptions.keys()) + list(ModuleTypeOptions.keys()) +\r
list(self.ToolDefinition.keys()))\r
BuildOptions = defaultdict(lambda: defaultdict(str))\r
- for Tool in AllTools:\r
+ for Tool in sorted(AllTools):\r
for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, ModuleTypeOptions, PlatformModuleOptions]:\r
if Tool not in Options:\r
continue\r
@cached_property\r
def IntroTargetList(self):\r
self.Targets\r
- return self._IntroBuildTargetList\r
+ return sorted(self._IntroBuildTargetList, key=lambda x: str(x.Target))\r
\r
@cached_property\r
def CodaTargetList(self):\r
self.Targets\r
- return self._FinalBuildTargetList\r
+ return sorted(self._FinalBuildTargetList, key=lambda x: str(x.Target))\r
\r
@cached_property\r
def FileTypes(self):\r
if os.path.exists (self.TimeStampPath):\r
os.remove (self.TimeStampPath)\r
with open(self.TimeStampPath, 'w+') as file:\r
- for f in FileSet:\r
+ for f in sorted(FileSet):\r
print(f, file=file)\r
\r
# Ignore generating makefile when it is a binary module\r
Value = Value[:-1]\r
ValueNumber = int (Value, 0)\r
except:\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ try:\r
+ ValueNumber = int(Value.lstrip('0'))\r
+ except:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"PCD value is not valid dec or hex number for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, TokenCName),\r
ExtraData="[%s]" % str(Info))\r
if ValueNumber < 0:\r
#\r
# Extract common files list in the dependency files\r
#\r
- for File in DepSet:\r
+ for File in sorted(DepSet, key=lambda x: str(x)):\r
self.CommonFileDependency.append(self.PlaceMacro(File.Path, self.Macros))\r
\r
for File in FileDependencyDict:\r
continue\r
NewDepSet = set(FileDependencyDict[File])\r
NewDepSet -= DepSet\r
- FileDependencyDict[File] = ["$(COMMON_DEPS)"] + list(NewDepSet)\r
+ FileDependencyDict[File] = ["$(COMMON_DEPS)"] + sorted(NewDepSet, key=lambda x: str(x))\r
\r
# Convert target description object to target string in makefile\r
for Type in self._AutoGenObject.Targets:\r
- for T in self._AutoGenObject.Targets[Type]:\r
+ for T in sorted(self._AutoGenObject.Targets[Type], key=lambda x: str(x)):\r
# Generate related macros if needed\r
if T.GenFileListMacro and T.FileListMacro not in self.FileListMacros:\r
self.FileListMacros[T.FileListMacro] = []\r
DependencySet.update(ForceList)\r
if File in DependencySet:\r
DependencySet.remove(File)\r
- DependencyList = list(DependencySet) # remove duplicate ones\r
+ DependencyList = sorted(DependencySet, key=lambda x: str(x)) # remove duplicate ones\r
\r
return DependencyList\r
\r
\r
DbValueList.append(Sku.DefaultValue)\r
\r
- Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
+ Pcd.TokenTypeList = sorted(set(Pcd.TokenTypeList))\r
if Pcd.DatumType == TAB_VOID:\r
Dict['SIZE_TABLE_CNAME'].append(CName)\r
Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid)\r
Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CNameBinArray.split(","))\r
\r
\r
- Pcd.TokenTypeList = list(set(Pcd.TokenTypeList))\r
+ Pcd.TokenTypeList = sorted(set(Pcd.TokenTypeList))\r
\r
# search the Offset and Table, used by LocalTokenNumberTableOffset\r
if 'PCD_TYPE_HII' in Pcd.TokenTypeList:\r
return False, "Invalid value [%s] of type [%s]; must be one of TRUE, True, true, 0x1, 0x01, 1"\\r
", FALSE, False, false, 0x0, 0x00, 0" % (Value, Type)\r
elif Type in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64]:\r
- if Value and int(Value, 0) < 0:\r
- return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type)\r
try:\r
- Value = int(Value, 0)\r
- if Value > MAX_VAL_TYPE[Type]:\r
- return False, "Too large PCD value[%s] for datum type [%s]" % (Value, Type)\r
+ Val = int(Value, 0)\r
except:\r
- return False, "Invalid value [%s] of type [%s];"\\r
- " must be a hexadecimal, decimal or octal in C language format." % (Value, Type)\r
+ try:\r
+ Val = int(Value.lstrip('0'))\r
+ except:\r
+ return False, "Invalid value [%s] of type [%s];" \\r
+ " must be a hexadecimal, decimal or octal in C language format." % (Value, Type)\r
+ if Val > MAX_VAL_TYPE[Type]:\r
+ return False, "Too large PCD value[%s] for datum type [%s]" % (Value, Type)\r
+ if Val < 0:\r
+ return False, "PCD can't be set to negative value[%s] for datum type [%s]" % (Value, Type)\r
+\r
else:\r
return True, "StructurePcd"\r
\r
#\r
# Regenerate FileContent\r
#\r
- NewFileContent = NewFileContent + Line + '\r\n'\r
+ NewFileContent = NewFileContent + Line + '\n'\r
\r
if IsFailed:\r
EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError=EdkLogger.IsRaiseError)\r
Fv = GenFdsGlobalVariable.FdfParser.Profile.FvDict.get(self.FvName)\r
if Fv is not None:\r
self.Fv = Fv\r
+ if not self.FvAddr and self.Fv.BaseAddress:\r
+ self.FvAddr = self.Fv.BaseAddress\r
FvFileName = Fv.AddToBuffer(Buffer, self.FvAddr, MacroDict = Dict, Flag=IsMakefile)\r
if Fv.FvAlignment is not None:\r
if self.Alignment is None:\r
continue\r
for RegionData in RegionObj.RegionDataList:\r
if FvObj.UiFvName.upper() == RegionData.upper():\r
+ if not FvObj.BaseAddress:\r
+ FvObj.BaseAddress = '0x%x' % (int(FdObj.BaseAddress, 0) + RegionObj.Offset)\r
if FvObj.FvRegionInFD:\r
if FvObj.FvRegionInFD != RegionObj.Size:\r
EdkLogger.error("GenFds", FORMAT_INVALID, "The FV %s's region is specified in multiple FD with different value." %FvObj.UiFvName)\r
ModuleList = []\r
FileGuidList = []\r
GuidPattern = gGuidPattern\r
+ VariableGuidSet = set()\r
for Arch in ArchList:\r
PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]\r
PkgList = GenFdsGlobalVariable.WorkSpace.GetPackageList(GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag)\r
for P in PkgList:\r
PkgGuidDict.update(P.Guids)\r
- for Name, Guid in PlatformDataBase.Pcds:\r
+ for Name, Guid in sorted(PlatformDataBase.Pcds):\r
Pcd = PlatformDataBase.Pcds[Name, Guid]\r
if Pcd.Type in [TAB_PCDS_DYNAMIC_HII, TAB_PCDS_DYNAMIC_EX_HII]:\r
for SkuId in Pcd.SkuInfoList:\r
Sku = Pcd.SkuInfoList[SkuId]\r
+ if Sku.VariableGuid in VariableGuidSet:\r
+ continue\r
+ else:\r
+ VariableGuidSet.add(Sku.VariableGuid)\r
if Sku.VariableGuid and Sku.VariableGuid in PkgGuidDict.keys():\r
GuidDict[Sku.VariableGuid] = PkgGuidDict[Sku.VariableGuid]\r
for ModuleFile in PlatformDataBase.Modules:\r
\r
if len(FileContent) == 0:\r
continue\r
-\r
+ IncludedFileList = []\r
if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
FileContent = str(FileContent, "utf-16")\r
IncludedFileList = gIncludePattern.findall(FileContent)\r
os.remove(DbPath)\r
\r
# create db with optimized parameters\r
- self.Conn = sqlite3.connect(DbPath, isolation_level='DEFERRED')\r
+ self.Conn = sqlite3.connect(DbPath, isolation_level=None)\r
self.Conn.execute("PRAGMA synchronous=OFF")\r
self.Conn.execute("PRAGMA temp_store=MEMORY")\r
self.Conn.execute("PRAGMA count_changes=OFF")\r
gLineMaxLength = 120\r
\r
## Tags for end of line in report\r
-gEndOfLine = "\r\n"\r
+gEndOfLine = "\n"\r
\r
## Tags for section start, end and separator\r
gSectionStart = ">" + "=" * (gLineMaxLength - 2) + "<"\r
\r
\r
if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- PcdValueNumber = int(PcdValue.strip(), 0)\r
+ try:\r
+ PcdValueNumber = int(PcdValue.strip(), 0)\r
+ except:\r
+ PcdValueNumber = int(PcdValue.lstrip('0'))\r
if DecDefaultValue is None:\r
DecMatch = True\r
else:\r
if DscDefaultValue is None:\r
DscMatch = True\r
else:\r
- DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
+ try:\r
+ DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
+ except:\r
+ DscDefaultValueNumber = int(DscDefaultValue.lstrip('0'))\r
DscMatch = (DscDefaultValueNumber == PcdValueNumber)\r
else:\r
if DecDefaultValue is None:\r
for ModulePath in ModuleOverride:\r
ModuleDefault = ModuleOverride[ModulePath]\r
if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
- ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
+ try:\r
+ ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
+ except:\r
+ ModulePcdDefaultValueNumber = int(ModuleDefault.lstrip('0'))\r
Match = (ModulePcdDefaultValueNumber == PcdValueNumber)\r
if Pcd.DatumType == 'BOOLEAN':\r
ModuleDefault = str(ModulePcdDefaultValueNumber)\r
if Value.startswith(('0x', '0X')):\r
Value = '{} ({:d})'.format(Value, int(Value, 0))\r
else:\r
- Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
+ try:\r
+ Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
+ except:\r
+ Value = "0x{:X} ({})".format(int(Value.lstrip('0')), Value)\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))\r
if IsStructure:\r
self.PrintStructureInfo(File, Pcd.DefaultValues)\r