From 636f2be673b2f43518167d8fddae56b714f19314 Mon Sep 17 00:00:00 2001
From: lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Date: Fri, 12 Mar 2010 10:54:01 +0000
Subject: Sync EDKII BaseTools to BaseTools project r1928

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10234 6f19259b-4bc3-4df7-8a09-765794883524
---
 BaseTools/Source/Python/build/BuildReport.py | 50 +++++++++++--------
 BaseTools/Source/Python/build/build.py       | 75 +++++++++++++++++-----------
 2 files changed, 73 insertions(+), 52 deletions(-)

(limited to 'BaseTools/Source/Python/build')

diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py
index eac21d1495..f805aae5ca 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -221,7 +221,7 @@ class LibraryReport(object):
                         EdkIILibInfo += " C = " + LibConstructor
                     LibDestructor = " ".join(LibraryItem[3])
                     if LibDestructor:
-                        EdkIILibInfo += " D = " + LibConstructor
+                        EdkIILibInfo += " D = " + LibDestructor
                     LibDepex = " ".join(LibraryItem[4])
                     if LibDepex:
                         EdkIILibInfo += " Depex = " + LibDepex
@@ -255,7 +255,8 @@ class DepexReport(object):
         ModuleType = M.ModuleType
         if not ModuleType:
             ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")
-        if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE"]:
+
+        if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE", "SMM_CORE", "UEFI_APPLICATION"]:
             return
       
         for Source in M.SourceFileList:
@@ -404,17 +405,18 @@ class ModuleReport(object):
         self.Size = 0
         self.BuildTimeStamp = None
         self.DriverType = ""
-        ModuleType = M.ModuleType
-        if not ModuleType:
-            ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")
-        #
-        # If a module complies to PI 1.1, promote Module type to "SMM_DRIVER"
-        #
-        if ModuleType == "DXE_SMM_DRIVER":
-            PiSpec =  M.Module.Specification.get("PI_SPECIFICATION_VERSION", "0x00010000")
-            if int(PiSpec, 0) >= 0x0001000A:
-                ModuleType = "SMM_DRIVER"
-        self.DriverType = gDriverTypeMap.get(ModuleType, "")
+        if not M.IsLibrary:
+            ModuleType = M.ModuleType
+            if not ModuleType:
+                ModuleType = gComponentType2ModuleType.get(M.ComponentType, "")
+            #
+            # If a module complies to PI 1.1, promote Module type to "SMM_DRIVER"
+            #
+            if ModuleType == "DXE_SMM_DRIVER":
+                PiSpec =  M.Module.Specification.get("PI_SPECIFICATION_VERSION", "0x00010000")
+                if int(PiSpec, 0) >= 0x0001000A:
+                    ModuleType = "SMM_DRIVER"
+            self.DriverType = gDriverTypeMap.get(ModuleType, "0x2 (FREE_FORM)")
         self.UefiSpecVersion = M.Module.Specification.get("UEFI_SPECIFICATION_VERSION", "")
         self.PiSpecVersion = M.Module.Specification.get("PI_SPECIFICATION_VERSION", "")
         self.PciDeviceId = M.Module.Defines.get("PCI_DEVICE_ID", "")
@@ -1310,9 +1312,11 @@ class PlatformReport(object):
 
         self.ModuleReportList = []
         if MaList != None:
+            self._IsModuleBuild = True
             for Ma in MaList:
                 self.ModuleReportList.append(ModuleReport(Ma, ReportType))
         else:
+            self._IsModuleBuild = False
             for Pa in Wa.AutoGenObjectList:
                 for ModuleKey in Pa.Platform.Modules:
                     self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType))
@@ -1343,18 +1347,20 @@ class PlatformReport(object):
         FileWrite(File, "Build Duration:       %s" % BuildDuration)
         FileWrite(File, "Report Content:       %s" % ", ".join(ReportType))
 
-        if "PCD" in ReportType:
-            self.PcdReport.GenerateReport(File, None)
-
-        if "FLASH" in ReportType:
-            for FdReportListItem in self.FdReportList:
-                FdReportListItem.GenerateReport(File)
+        if not self._IsModuleBuild:
+            if "PCD" in ReportType:
+                self.PcdReport.GenerateReport(File, None)
+    
+            if "FLASH" in ReportType:
+                for FdReportListItem in self.FdReportList:
+                    FdReportListItem.GenerateReport(File)
 
         for ModuleReportItem in self.ModuleReportList:
             ModuleReportItem.GenerateReport(File, self.PcdReport, self.PredictionReport, ReportType)
 
-        if "EXECUTION_ORDER" in ReportType:
-            self.PredictionReport.GenerateReport(File, None)
+        if not self._IsModuleBuild:
+            if "EXECUTION_ORDER" in ReportType:
+                self.PredictionReport.GenerateReport(File, None)
 
 ## BuildReport class
 #
@@ -1422,7 +1428,7 @@ class BuildReport(object):
                 EdkLogger.error("BuildReport", CODE_ERROR, "Unknown fatal error when generating build report", ExtraData=self.ReportFile, RaiseError=False)
                 EdkLogger.quiet("(Python %s on %s\n%s)" % (platform.python_version(), sys.platform, traceback.format_exc()))
             File.close()
-
+            
 # This acts like the main() function for the script, unless it is 'import'ed into another script.
 if __name__ == '__main__':
     pass
diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py
index e3a3dd9f3f..6129308011 100644
--- a/BaseTools/Source/Python/build/build.py
+++ b/BaseTools/Source/Python/build/build.py
@@ -1090,9 +1090,10 @@ class Build():
 
     ## Collect MAP information of all FVs
     #
-    def _CollectFvMapBuffer (self, MapBuffer, Wa):
+    def _CollectFvMapBuffer (self, MapBuffer, Wa, ModuleList):
         if self.Fdf != '':
             # First get the XIP base address for FV map file.
+            GuidPattern = re.compile("[-a-fA-F0-9]+")
             for FvName in Wa.FdfProfile.FvDict.keys():
                 FvMapBuffer = os.path.join(Wa.FvDir, FvName + '.Fv.map')
                 if not os.path.exists(FvMapBuffer):
@@ -1103,7 +1104,16 @@ class Build():
                 FvMap.readline()
                 FvMap.readline()
                 FvMap.readline()
-                MapBuffer.write(FvMap.read())
+                for Line in FvMap:
+                    MatchGuid = GuidPattern.match(Line)
+                    if MatchGuid != None:
+                        #
+                        # Replace GUID with module name
+                        #
+                        GuidString = MatchGuid.group()
+                        if GuidString.upper() in ModuleList:
+                            Line = Line.replace(GuidString, ModuleList[GuidString.upper()].Name)
+                    MapBuffer.write('%s' % (Line))
                 FvMap.close()
 
     ## Collect MAP information of all modules
@@ -1124,7 +1134,8 @@ class Build():
         IsIpfPlatform = False
         if 'IPF' in self.ArchList:
             IsIpfPlatform = True
-        for Module in ModuleList:
+        for ModuleGuid in ModuleList:
+            Module = ModuleList[ModuleGuid]
             GlobalData.gProcessingFile = "%s [%s, %s, %s]" % (Module.MetaFile, Module.Arch, Module.ToolChain, Module.BuildTarget)
             
             OutputImageFile = ''
@@ -1259,7 +1270,8 @@ class Build():
         #
         SaveFileOnChange(MapFilePath, MapBuffer.getvalue(), False)
         MapBuffer.close()
-        sys.stdout.write ("\nLoad Module At Fix Address Map file saved to %s\n" %(MapFilePath))
+        if self.LoadFixAddress != 0:
+            sys.stdout.write ("\nLoad Module At Fix Address Map file saved to %s\n" %(MapFilePath))
         sys.stdout.flush()
 
     ## Build active platform for different build targets and different tool chains
@@ -1286,7 +1298,7 @@ class Build():
                 self._Build(self.Target, Wa)
                 
                 # Create MAP file when Load Fix Address is enabled.
-                if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0:
+                if self.Target in ["", "all", "fds"]:
                     for Arch in self.ArchList:
                         #
                         # Check whether the set fix address is above 4G for 32bit image.
@@ -1296,19 +1308,20 @@ class Build():
                     #
                     # Get Module List
                     #
-                    ModuleList = []
+                    ModuleList = {}
                     for Pa in Wa.AutoGenObjectList:
                         for Ma in Pa.ModuleAutoGenList:
                             if Ma == None:
                                 continue
                             if not Ma.IsLibrary:
-                                ModuleList.append (Ma)
+                                ModuleList[Ma.Guid.upper()] = Ma
 
                     MapBuffer = StringIO('')
-                    #
-                    # Rebase module to the preferred memory address before GenFds
-                    #
-                    self._CollectModuleMapBuffer(MapBuffer, ModuleList)
+                    if self.LoadFixAddress != 0:
+                        #
+                        # Rebase module to the preferred memory address before GenFds
+                        #
+                        self._CollectModuleMapBuffer(MapBuffer, ModuleList)
                     if self.Fdf != '':
                         #
                         # create FDS again for the updated EFI image
@@ -1317,7 +1330,7 @@ class Build():
                         #
                         # Create MAP file for all platform FVs after GenFds.
                         #
-                        self._CollectFvMapBuffer(MapBuffer, Wa)
+                        self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList)
                     #
                     # Save MAP buffer into MAP file.
                     #
@@ -1367,7 +1380,7 @@ class Build():
                                 ExtraData=self.ModuleFile
                                 )
                 # Create MAP file when Load Fix Address is enabled.
-                if self.LoadFixAddress != 0 and self.Target == "fds" and self.Fdf != '':
+                if self.Target == "fds" and self.Fdf != '':
                     for Arch in self.ArchList:
                         #
                         # Check whether the set fix address is above 4G for 32bit image.
@@ -1377,27 +1390,28 @@ class Build():
                     #
                     # Get Module List
                     #
-                    ModuleList = []
+                    ModuleList = {}
                     for Pa in Wa.AutoGenObjectList:
                         for Ma in Pa.ModuleAutoGenList:
                             if Ma == None:
                                 continue
                             if not Ma.IsLibrary:
-                                ModuleList.append (Ma)
+                                ModuleList[Ma.Guid.upper()] = Ma
 
                     MapBuffer = StringIO('')
-                    #
-                    # Rebase module to the preferred memory address before GenFds
-                    #
-                    self._CollectModuleMapBuffer(MapBuffer, ModuleList)
-                    #
-                    # create FDS again for the updated EFI image
-                    #
-                    self._Build("fds", Wa)
+                    if self.LoadFixAddress != 0:
+                        #
+                        # Rebase module to the preferred memory address before GenFds
+                        #
+                        self._CollectModuleMapBuffer(MapBuffer, ModuleList)
+                        #
+                        # create FDS again for the updated EFI image
+                        #
+                        self._Build("fds", Wa)
                     #
                     # Create MAP file for all platform FVs after GenFds.
                     #
-                    self._CollectFvMapBuffer(MapBuffer, Wa)
+                    self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList)
                     #
                     # Save MAP buffer into MAP file.
                     #
@@ -1483,7 +1497,7 @@ class Build():
                     EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule)
 
                 # Create MAP file when Load Fix Address is enabled.
-                if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0:
+                if self.Target in ["", "all", "fds"]:
                     for Arch in self.ArchList:
                         #
                         # Check whether the set fix address is above 4G for 32bit image.
@@ -1493,30 +1507,31 @@ class Build():
                     #
                     # Get Module List
                     #
-                    ModuleList = []
+                    ModuleList = {}
                     for Pa in Wa.AutoGenObjectList:
                         for Ma in Pa.ModuleAutoGenList:
                             if Ma == None:
                                 continue
                             if not Ma.IsLibrary:
-                                ModuleList.append (Ma)
+                                ModuleList[Ma.Guid.upper()] = Ma
                     #
                     # Rebase module to the preferred memory address before GenFds
                     #
                     MapBuffer = StringIO('')
-                    self._CollectModuleMapBuffer(MapBuffer, ModuleList)
+                    if self.LoadFixAddress != 0:
+                        self._CollectModuleMapBuffer(MapBuffer, ModuleList)
 
                 # Generate FD image if there's a FDF file found
                 if self.Fdf != '' and self.Target in ["", "all", "fds"]:
                     LaunchCommand(Wa.BuildCommand + ["fds"], Wa.MakeFileDir)
 
                 # Create MAP file for all platform FV after GenFds
-                if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0:
+                if self.Target in ["", "all", "fds"]:
                     if self.Fdf != '':
                         #
                         # Create MAP file for all platform FVs after GenFds.
                         #
-                        self._CollectFvMapBuffer(MapBuffer, Wa)
+                        self._CollectFvMapBuffer(MapBuffer, Wa, ModuleList)
                     #
                     # Save MAP buffer into MAP file.
                     #
-- 
cgit v1.2.3