]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/build/build.py
BaseTools: Decouple AutoGen Objects
[mirror_edk2.git] / BaseTools / Source / Python / build / build.py
index 07693b97359eef4e40d48a305ba56c3ed01fb374..3d083f4eaade6239f8b1df766f0fa4b288f05770 100644 (file)
 # Import Modules\r
 #\r
 from __future__ import print_function\r
-import Common.LongFilePathOs as os\r
-import re\r
+from __future__ import absolute_import\r
+import os.path as path\r
 import sys\r
+import os\r
+import re\r
 import glob\r
 import time\r
 import platform\r
 import traceback\r
-import encodings.ascii\r
 import multiprocessing\r
-\r
-from struct import *\r
-from threading import *\r
+from threading import Thread,Event,BoundedSemaphore\r
 import threading\r
+from subprocess import Popen,PIPE\r
+from collections import OrderedDict, defaultdict\r
 from optparse import OptionParser\r
-from subprocess import *\r
+from AutoGen.PlatformAutoGen import PlatformAutoGen\r
+from AutoGen.ModuleAutoGen import ModuleAutoGen\r
+from AutoGen.WorkspaceAutoGen import WorkspaceAutoGen\r
+from AutoGen import GenMake\r
 from Common import Misc as Utils\r
 \r
-from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.TargetTxtClassObject import TargetTxt\r
 from Common.ToolDefClassObject import ToolDef\r
+from Common.Misc import PathClass,SaveFileOnChange,RemoveDirectory\r
+from Common.StringUtils import NormPath\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
+from Common.BuildToolError import *\r
 from Common.DataType import *\r
+import Common.EdkLogger as EdkLogger\r
 from Common.BuildVersion import gBUILD_VERSION\r
-from AutoGen.AutoGen import *\r
-from Common.BuildToolError import *\r
-from Workspace.WorkspaceDatabase import WorkspaceDatabase\r
-from Common.MultipleWorkspace import MultipleWorkspace as mws\r
+from Workspace.WorkspaceDatabase import BuildDB\r
 \r
 from BuildReport import BuildReport\r
-from GenPatchPcdTable.GenPatchPcdTable import *\r
-from PatchPcdValue.PatchPcdValue import *\r
+from GenPatchPcdTable.GenPatchPcdTable import PeImageClass,parsePcdInfoFromMapFile\r
+from PatchPcdValue.PatchPcdValue import PatchBinaryFile\r
 \r
-import Common.EdkLogger\r
 import Common.GlobalData as GlobalData\r
 from GenFds.GenFds import GenFds, GenFdsApi\r
 \r
-from collections import OrderedDict, defaultdict\r
 \r
 # Version and Copyright\r
 VersionNumber = "0.60" + ' ' + gBUILD_VERSION\r
@@ -775,7 +778,7 @@ class Build():
         GlobalData.gDatabasePath = os.path.normpath(os.path.join(ConfDirectoryPath, GlobalData.gDatabasePath))\r
         if not os.path.exists(os.path.join(GlobalData.gConfDirectory, '.cache')):\r
             os.makedirs(os.path.join(GlobalData.gConfDirectory, '.cache'))\r
-        self.Db = WorkspaceDatabase()\r
+        self.Db = BuildDB\r
         self.BuildDatabase = self.Db.BuildObject\r
         self.Platform = None\r
         self.ToolChainFamily = None\r
@@ -1700,13 +1703,17 @@ class Build():
                     CmdListDict = self._GenFfsCmd(Wa.ArchList)\r
 \r
                 for Arch in Wa.ArchList:\r
+                    PcdMaList    = []\r
                     GlobalData.gGlobalDefines['ARCH'] = Arch\r
                     Pa = PlatformAutoGen(Wa, self.PlatformFile, BuildTarget, ToolChain, Arch)\r
                     for Module in Pa.Platform.Modules:\r
                         # Get ModuleAutoGen object to generate C code file and makefile\r
-                        Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile)\r
+                        Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile,Pa.DataPipe)\r
                         if Ma is None:\r
                             continue\r
+                        if Ma.PcdIsDriver:\r
+                            Ma.PlatformInfo = Pa\r
+                            PcdMaList.append(Ma)\r
                         self.BuildModules.append(Ma)\r
                     self._BuildPa(self.Target, Pa, FfsCommand=CmdListDict)\r
 \r
@@ -1802,7 +1809,7 @@ class Build():
                     Pa = PlatformAutoGen(Wa, self.PlatformFile, BuildTarget, ToolChain, Arch)\r
                     for Module in Pa.Platform.Modules:\r
                         if self.ModuleFile.Dir == Module.Dir and self.ModuleFile.Name == Module.Name:\r
-                            Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile)\r
+                            Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile,Pa.DataPipe)\r
                             if Ma is None:\r
                                 continue\r
                             MaList.append(Ma)\r
@@ -1982,6 +1989,7 @@ class Build():
                 ExitFlag.clear()\r
                 self.AutoGenTime += int(round((time.time() - WorkspaceAutoGenTime)))\r
                 for Arch in Wa.ArchList:\r
+                    PcdMaList    = []\r
                     AutoGenStart = time.time()\r
                     GlobalData.gGlobalDefines['ARCH'] = Arch\r
                     Pa = PlatformAutoGen(Wa, self.PlatformFile, BuildTarget, ToolChain, Arch)\r
@@ -1999,10 +2007,13 @@ class Build():
                             ModuleList.append(Inf)\r
                     for Module in ModuleList:\r
                         # Get ModuleAutoGen object to generate C code file and makefile\r
-                        Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile)\r
+                        Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile,Pa.DataPipe)\r
 \r
                         if Ma is None:\r
                             continue\r
+                        if Ma.PcdIsDriver:\r
+                            Ma.PlatformInfo = Pa\r
+                            PcdMaList.append(Ma)\r
                         if Ma.CanSkipbyHash():\r
                             self.HashSkipModules.append(Ma)\r
                             if GlobalData.gBinCacheSource:\r