]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/DataSection.py
BaseTools: Replace StandardError with Expression
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / DataSection.py
index ba3677ed89db77ad558166a24f1dac74eaaf78df..29caa00c0d8dc4ff6031afa600c3d7e80b0e81ed 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # process data section generation\r
 #\r
-#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
 #\r
 #  This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
@@ -23,6 +23,7 @@ import Common.LongFilePathOs as os
 from CommonDataClass.FdfClass import DataSectionClassObject\r
 from Common.Misc import PeImageClass\r
 from Common.LongFilePathSupport import CopyLongFilePath\r
+from Common.DataType import *\r
 \r
 ## generate data section\r
 #\r
@@ -48,11 +49,11 @@ class DataSection (DataSectionClassObject):
     #   @param  Dict        dictionary contains macro and its value\r
     #   @retval tuple       (Generated file name list, section alignment)\r
     #\r
-    def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, FfsFile = None, Dict = {}):\r
+    def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, FfsFile = None, Dict = {}, IsMakefile = False):\r
         #\r
         # Prepare the parameter of GenSection\r
         #\r
-        if FfsFile != None:\r
+        if FfsFile is not None:\r
             self.SectFileName = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.SectFileName)\r
             self.SectFileName = GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict, FfsFile.CurrentArch)\r
         else:\r
@@ -69,22 +70,30 @@ class DataSection (DataSectionClassObject):
         Filename = GenFdsGlobalVariable.MacroExtend(self.SectFileName)\r
         if Filename[(len(Filename)-4):] == '.efi':\r
             MapFile = Filename.replace('.efi', '.map')\r
-            if os.path.exists(MapFile):\r
-                CopyMapFile = os.path.join(OutputPath, ModuleName + '.map')\r
-                if not os.path.exists(CopyMapFile) or (os.path.getmtime(MapFile) > os.path.getmtime(CopyMapFile)):\r
-                    CopyLongFilePath(MapFile, CopyMapFile)\r
+            CopyMapFile = os.path.join(OutputPath, ModuleName + '.map')\r
+            if IsMakefile:\r
+                if GenFdsGlobalVariable.CopyList == []:\r
+                    GenFdsGlobalVariable.CopyList = [(MapFile, CopyMapFile)]\r
+                else:\r
+                    GenFdsGlobalVariable.CopyList.append((MapFile, CopyMapFile))\r
+            else:\r
+                if os.path.exists(MapFile):\r
+                    if not os.path.exists(CopyMapFile) or (os.path.getmtime(MapFile) > os.path.getmtime(CopyMapFile)):\r
+                        CopyLongFilePath(MapFile, CopyMapFile)\r
 \r
         #Get PE Section alignment when align is set to AUTO\r
-        if self.Alignment == 'Auto' and self.SecType in ('TE', 'PE32'):\r
+        if self.Alignment == 'Auto' and self.SecType in (BINARY_FILE_TYPE_TE, BINARY_FILE_TYPE_PE32):\r
             ImageObj = PeImageClass (Filename)\r
             if ImageObj.SectionAlignment < 0x400:\r
                 self.Alignment = str (ImageObj.SectionAlignment)\r
-            else:\r
+            elif ImageObj.SectionAlignment < 0x100000:\r
                 self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'\r
+            else:\r
+                self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'\r
 \r
         NoStrip = True\r
-        if self.SecType in ('TE', 'PE32'):\r
-            if self.KeepReloc != None:\r
+        if self.SecType in (BINARY_FILE_TYPE_TE, BINARY_FILE_TYPE_PE32):\r
+            if self.KeepReloc is not None:\r
                 NoStrip = self.KeepReloc\r
 \r
         if not NoStrip:\r
@@ -94,24 +103,25 @@ class DataSection (DataSectionClassObject):
                 CopyLongFilePath(self.SectFileName, FileBeforeStrip)\r
             StrippedFile = os.path.join(OutputPath, ModuleName + '.stripped')\r
             GenFdsGlobalVariable.GenerateFirmwareImage(\r
-                                    StrippedFile,\r
-                                    [GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict)],\r
-                                    Strip=True\r
-                                    )\r
+                    StrippedFile,\r
+                    [GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict)],\r
+                    Strip=True,\r
+                    IsMakefile = IsMakefile\r
+                )\r
             self.SectFileName = StrippedFile\r
 \r
-        if self.SecType == 'TE':\r
+        if self.SecType == BINARY_FILE_TYPE_TE:\r
             TeFile = os.path.join( OutputPath, ModuleName + 'Te.raw')\r
             GenFdsGlobalVariable.GenerateFirmwareImage(\r
-                                    TeFile,\r
-                                    [GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict)],\r
-                                    Type='te'\r
-                                    )\r
+                    TeFile,\r
+                    [GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict)],\r
+                    Type='te',\r
+                    IsMakefile = IsMakefile\r
+                )\r
             self.SectFileName = TeFile\r
 \r
-        OutputFile = os.path.join (OutputPath, ModuleName + 'SEC' + SecNum + Ffs.SectionSuffix.get(self.SecType))\r
+        OutputFile = os.path.join (OutputPath, ModuleName + SUP_MODULE_SEC + SecNum + Ffs.SectionSuffix.get(self.SecType))\r
         OutputFile = os.path.normpath(OutputFile)\r
-\r
-        GenFdsGlobalVariable.GenerateSection(OutputFile, [self.SectFileName], Section.Section.SectionType.get(self.SecType))\r
+        GenFdsGlobalVariable.GenerateSection(OutputFile, [self.SectFileName], Section.Section.SectionType.get(self.SecType), IsMakefile = IsMakefile)\r
         FileList = [OutputFile]\r
         return FileList, self.Alignment\r