'UEFI_APPLICATION' : '0x9 (APPLICATION)',\r
'SMM_CORE' : '0xD (SMM_CORE)',\r
'SMM_DRIVER' : '0xA (SMM)', # Extension of module type to support PI 1.1 SMM drivers\r
+ 'MM_STANDALONE' : '0xE (MM_STANDALONE)',\r
+ 'MM_CORE_STANDALONE' : '0xF (MM_CORE_STANDALONE)'\r
}\r
\r
## The look up table of the supported opcode in the dependency expression binaries\r
LibConstructorList = Lib.ConstructorList\r
LibDesstructorList = Lib.DestructorList\r
LibDepexList = Lib.DepexExpression[M.Arch, M.ModuleType]\r
- self.LibraryList.append((LibInfPath, LibClassList, LibConstructorList, LibDesstructorList, LibDepexList))\r
+ for LibAutoGen in M.LibraryAutoGenList:\r
+ if LibInfPath == LibAutoGen.MetaFile.Path:\r
+ LibTime = LibAutoGen.BuildTime\r
+ break\r
+ self.LibraryList.append((LibInfPath, LibClassList, LibConstructorList, LibDesstructorList, LibDepexList, LibTime))\r
\r
##\r
# Generate report for module library information\r
LibDepex = " ".join(LibraryItem[4])\r
if LibDepex:\r
EdkIILibInfo += " Depex = " + LibDepex\r
+ if LibraryItem[5]:\r
+ EdkIILibInfo += " Time = " + LibraryItem[5]\r
if EdkIILibInfo:\r
FileWrite(File, "{%s: %s}" % (LibClass, EdkIILibInfo))\r
else:\r
if not ModuleType:\r
ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")\r
\r
- if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE", "SMM_CORE", "UEFI_APPLICATION"]:\r
+ if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE", "SMM_CORE", "MM_CORE_STANDALONE", "UEFI_APPLICATION"]:\r
return\r
\r
for Source in M.SourceFileList:\r
self.PciDeviceId = M.Module.Defines.get("PCI_DEVICE_ID", "")\r
self.PciVendorId = M.Module.Defines.get("PCI_VENDOR_ID", "")\r
self.PciClassCode = M.Module.Defines.get("PCI_CLASS_CODE", "")\r
+ self.BuildTime = M.BuildTime\r
\r
self._BuildDir = M.BuildDir\r
self.ModulePcdSet = {}\r
FileWrite(File, "SHA1 HASH: %s *%s" % (self.Hash, self.ModuleName + ".efi"))\r
if self.BuildTimeStamp:\r
FileWrite(File, "Build Time Stamp: %s" % self.BuildTimeStamp)\r
+ if self.BuildTime:\r
+ FileWrite(File, "Module Build Time: %s" % self.BuildTime)\r
if self.DriverType:\r
FileWrite(File, "Driver Type: %s" % self.DriverType)\r
if self.UefiSpecVersion:\r
UnusedPcdFullList = []\r
for item in Pa.Platform.Pcds:\r
Pcd = Pa.Platform.Pcds[item]\r
+ if not Pcd.Type:\r
+ # check the Pcd in FDF file, whether it is used in module first\r
+ for T in ["FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx"]:\r
+ PcdList = self.AllPcds.setdefault(Pcd.TokenSpaceGuidCName, {}).setdefault(T, [])\r
+ if Pcd in PcdList:\r
+ Pcd.Type = T\r
+ break\r
if not Pcd.Type:\r
PcdTypeFlag = False\r
for package in Pa.PackageList:\r
for Arch in Wa.ArchList:\r
Platform = Wa.BuildDatabase[Wa.MetaFile, Arch, Wa.BuildTarget, Wa.ToolChain]\r
for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds:\r
- DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue\r
+ DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DscDefaultValue\r
if DscDefaultValue:\r
self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue\r
\r
#\r
DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))\r
DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))\r
+ DscDefaultValBak= DscDefaultValue\r
DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)\r
InfDefaultValue = None\r
\r
#\r
# Report PCD item according to their override relationship\r
#\r
- if BuildOptionMatch:\r
- FileWrite(File, ' *B %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
- elif DecMatch and InfMatch:\r
+ if DecMatch and InfMatch:\r
FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
+ elif BuildOptionMatch:\r
+ FileWrite(File, ' *B %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
else:\r
if DscMatch:\r
if (Pcd.TokenCName, Key) in self.FdfPcdSet:\r
else:\r
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
\r
- if not DscMatch and DscDefaultValue != None:\r
- FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue.strip()))\r
+ if not DscMatch and DscDefaultValBak != None:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValBak.strip()))\r
\r
if not InfMatch and InfDefaultValue != None:\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue.strip()))\r
# @param self The object pointer\r
# @param File The file object for report\r
# @param BuildDuration The total time to build the modules\r
+ # @param AutoGenTime The total time of AutoGen Phase\r
+ # @param MakeTime The total time of Make Phase\r
+ # @param GenFdsTime The total time of GenFds Phase\r
# @param ReportType The kind of report items in the final report file\r
#\r
- def GenerateReport(self, File, BuildDuration, ReportType):\r
+ def GenerateReport(self, File, BuildDuration, AutoGenTime, MakeTime, GenFdsTime, ReportType):\r
FileWrite(File, "Platform Summary")\r
FileWrite(File, "Platform Name: %s" % self.PlatformName)\r
FileWrite(File, "Platform DSC Path: %s" % self.PlatformDscPath)\r
FileWrite(File, "Output Path: %s" % self.OutputPath)\r
FileWrite(File, "Build Environment: %s" % self.BuildEnvironment)\r
FileWrite(File, "Build Duration: %s" % BuildDuration)\r
+ if AutoGenTime:\r
+ FileWrite(File, "AutoGen Duration: %s" % AutoGenTime)\r
+ if MakeTime:\r
+ FileWrite(File, "Make Duration: %s" % MakeTime)\r
+ if GenFdsTime:\r
+ FileWrite(File, "GenFds Duration: %s" % GenFdsTime)\r
FileWrite(File, "Report Content: %s" % ", ".join(ReportType))\r
\r
if GlobalData.MixedPcd:\r
#\r
# @param self The object pointer\r
# @param BuildDuration The total time to build the modules\r
+ # @param AutoGenTime The total time of AutoGen phase\r
+ # @param MakeTime The total time of Make phase\r
+ # @param GenFdsTime The total time of GenFds phase\r
#\r
- def GenerateReport(self, BuildDuration):\r
+ def GenerateReport(self, BuildDuration, AutoGenTime, MakeTime, GenFdsTime):\r
if self.ReportFile:\r
try:\r
File = StringIO('')\r
for (Wa, MaList) in self.ReportList:\r
- PlatformReport(Wa, MaList, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType)\r
+ PlatformReport(Wa, MaList, self.ReportType).GenerateReport(File, BuildDuration, AutoGenTime, MakeTime, GenFdsTime, self.ReportType)\r
Content = FileLinesSplit(File.getvalue(), gLineMaxLength)\r
SaveFileOnChange(self.ReportFile, Content, True)\r
EdkLogger.quiet("Build report can be found at %s" % os.path.abspath(self.ReportFile))\r