+ AsBuiltInfDict['binary_item'] += ['BIN|' + File]\r
+ if self.DepexGenerated:\r
+ self.OutputFile.add(self.Name + '.depex')\r
+ if self.ModuleType in [SUP_MODULE_PEIM]:\r
+ AsBuiltInfDict['binary_item'] += ['PEI_DEPEX|' + self.Name + '.depex']\r
+ if self.ModuleType in [SUP_MODULE_DXE_DRIVER, SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_UEFI_DRIVER]:\r
+ AsBuiltInfDict['binary_item'] += ['DXE_DEPEX|' + self.Name + '.depex']\r
+ if self.ModuleType in [SUP_MODULE_DXE_SMM_DRIVER]:\r
+ AsBuiltInfDict['binary_item'] += ['SMM_DEPEX|' + self.Name + '.depex']\r
+\r
+ Bin = self._GenOffsetBin()\r
+ if Bin:\r
+ AsBuiltInfDict['binary_item'] += ['BIN|%s' % Bin]\r
+ self.OutputFile.add(Bin)\r
+\r
+ for Root, Dirs, Files in os.walk(OutputDir):\r
+ for File in Files:\r
+ if File.lower().endswith('.pdb'):\r
+ AsBuiltInfDict['binary_item'] += ['DISPOSABLE|' + File]\r
+ self.OutputFile.add(File)\r
+ HeaderComments = self.Module.HeaderComments\r
+ StartPos = 0\r
+ for Index in range(len(HeaderComments)):\r
+ if HeaderComments[Index].find('@BinaryHeader') != -1:\r
+ HeaderComments[Index] = HeaderComments[Index].replace('@BinaryHeader', '@file')\r
+ StartPos = Index\r
+ break\r
+ AsBuiltInfDict['header_comments'] = '\n'.join(HeaderComments[StartPos:]).replace(':#', '://')\r
+ AsBuiltInfDict['tail_comments'] = '\n'.join(self.Module.TailComments)\r
+\r
+ GenList = [\r
+ (self.ProtocolList, self._ProtocolComments, 'protocol_item'),\r
+ (self.PpiList, self._PpiComments, 'ppi_item'),\r
+ (GuidList, self._GuidComments, 'guid_item')\r
+ ]\r
+ for Item in GenList:\r
+ for CName in Item[0]:\r
+ Comments = ''\r
+ if CName in Item[1]:\r
+ Comments = '\n '.join(Item[1][CName])\r
+ Entry = CName\r
+ if Comments:\r
+ Entry = Comments + '\n ' + CName\r
+ AsBuiltInfDict[Item[2]].append(Entry)\r
+ PatchList = parsePcdInfoFromMapFile(\r
+ os.path.join(self.OutputDir, self.Name + '.map'),\r
+ os.path.join(self.OutputDir, self.Name + '.efi')\r
+ )\r
+ if PatchList:\r
+ for Pcd in PatchablePcds:\r
+ TokenCName = Pcd.TokenCName\r
+ for PcdItem in GlobalData.MixedPcd:\r
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
+ TokenCName = PcdItem[0]\r
+ break\r
+ for PatchPcd in PatchList:\r
+ if TokenCName == PatchPcd[0]:\r
+ break\r
+ else:\r
+ continue\r
+ PcdValue = ''\r
+ if Pcd.DatumType == 'BOOLEAN':\r
+ BoolValue = Pcd.DefaultValue.upper()\r
+ if BoolValue == 'TRUE':\r
+ Pcd.DefaultValue = '1'\r
+ elif BoolValue == 'FALSE':\r
+ Pcd.DefaultValue = '0'\r
+\r
+ if Pcd.DatumType in TAB_PCD_NUMERIC_TYPES:\r
+ HexFormat = '0x%02x'\r
+ if Pcd.DatumType == TAB_UINT16:\r
+ HexFormat = '0x%04x'\r
+ elif Pcd.DatumType == TAB_UINT32:\r
+ HexFormat = '0x%08x'\r
+ elif Pcd.DatumType == TAB_UINT64:\r
+ HexFormat = '0x%016x'\r
+ PcdValue = HexFormat % int(Pcd.DefaultValue, 0)\r
+ else:\r
+ if Pcd.MaxDatumSize is None or Pcd.MaxDatumSize == '':\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
+ "Unknown [MaxDatumSize] of PCD [%s.%s]" % (Pcd.TokenSpaceGuidCName, TokenCName)\r
+ )\r
+ ArraySize = int(Pcd.MaxDatumSize, 0)\r
+ PcdValue = Pcd.DefaultValue\r
+ if PcdValue[0] != '{':\r
+ Unicode = False\r
+ if PcdValue[0] == 'L':\r
+ Unicode = True\r
+ PcdValue = PcdValue.lstrip('L')\r
+ PcdValue = eval(PcdValue)\r
+ NewValue = '{'\r
+ for Index in range(0, len(PcdValue)):\r
+ if Unicode:\r
+ CharVal = ord(PcdValue[Index])\r
+ NewValue = NewValue + '0x%02x' % (CharVal & 0x00FF) + ', ' \\r
+ + '0x%02x' % (CharVal >> 8) + ', '\r
+ else:\r
+ NewValue = NewValue + '0x%02x' % (ord(PcdValue[Index]) % 0x100) + ', '\r
+ Padding = '0x00, '\r
+ if Unicode:\r
+ Padding = Padding * 2\r
+ ArraySize = ArraySize / 2\r
+ if ArraySize < (len(PcdValue) + 1):\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
+ "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
+ )\r
+ else:\r
+ ArraySize = len(PcdValue) + 1\r
+ if ArraySize > len(PcdValue) + 1:\r
+ NewValue = NewValue + Padding * (ArraySize - len(PcdValue) - 1)\r
+ PcdValue = NewValue + Padding.strip().rstrip(',') + '}'\r
+ elif len(PcdValue.split(',')) <= ArraySize:\r
+ PcdValue = PcdValue.rstrip('}') + ', 0x00' * (ArraySize - len(PcdValue.split(',')))\r
+ PcdValue += '}'\r
+ else:\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
+ "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
+ )\r
+ else:\r
+ ArraySize = len(PcdValue) + 1\r
+ PcdItem = '%s.%s|%s|0x%X' % \\r
+ (Pcd.TokenSpaceGuidCName, TokenCName, PcdValue, PatchPcd[1])\r
+ PcdComments = ''\r
+ if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) in self._PcdComments:\r
+ PcdComments = '\n '.join(self._PcdComments[Pcd.TokenSpaceGuidCName, Pcd.TokenCName])\r
+ if PcdComments:\r
+ PcdItem = PcdComments + '\n ' + PcdItem\r
+ AsBuiltInfDict['patchablepcd_item'].append(PcdItem)\r
+\r
+ HiiPcds = set()\r
+ for Pcd in Pcds + VfrPcds:\r
+ PcdComments = ''\r
+ PcdCommentList = []\r
+ HiiInfo = ''\r
+ SkuId = ''\r
+ TokenCName = Pcd.TokenCName\r
+ for PcdItem in GlobalData.MixedPcd:\r
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
+ TokenCName = PcdItem[0]\r
+ break\r
+ if Pcd.Type == TAB_PCDS_DYNAMIC_EX_HII:\r
+ for SkuName in Pcd.SkuInfoList:\r
+ SkuInfo = Pcd.SkuInfoList[SkuName]\r
+ SkuId = SkuInfo.SkuId\r
+ HiiInfo = '## %s|%s|%s' % (SkuInfo.VariableName, SkuInfo.VariableGuid, SkuInfo.VariableOffset)\r
+ break\r
+ if SkuId:\r
+ #\r
+ # Don't generate duplicated HII PCD\r
+ #\r
+ if (SkuId, Pcd.TokenSpaceGuidCName, Pcd.TokenCName) in HiiPcds:\r
+ continue\r
+ HiiPcds.add((SkuId, Pcd.TokenSpaceGuidCName, Pcd.TokenCName))\r
+ if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) in self._PcdComments:\r
+ PcdCommentList = self._PcdComments[Pcd.TokenSpaceGuidCName, Pcd.TokenCName][:]\r
+ if HiiInfo:\r
+ UsageIndex = -1\r
+ UsageStr = ''\r
+ for Index, Comment in enumerate(PcdCommentList):\r
+ for Usage in UsageList:\r
+ if Comment.find(Usage) != -1:\r
+ UsageStr = Usage\r
+ UsageIndex = Index\r
+ break\r
+ if UsageIndex != -1:\r
+ PcdCommentList[UsageIndex] = '## %s %s %s' % (UsageStr, HiiInfo, PcdCommentList[UsageIndex].replace(UsageStr, '')) \r
+ else:\r
+ PcdCommentList.append('## UNDEFINED ' + HiiInfo)\r
+ PcdComments = '\n '.join(PcdCommentList)\r
+ PcdEntry = Pcd.TokenSpaceGuidCName + '.' + TokenCName\r
+ if PcdComments:\r
+ PcdEntry = PcdComments + '\n ' + PcdEntry\r
+ AsBuiltInfDict['pcd_item'] += [PcdEntry]\r