]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/AutoGenWorker.py
BaseTools: Move gPlatformFinalPcd to Datapipe and optimize size
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / AutoGenWorker.py
index 563d91b421cef4df35372b851c0e9291f7c35f6c..0ba2339bed64d7ac365e76857ada09eab4bb6205 100755 (executable)
@@ -24,6 +24,7 @@ import traceback
 import sys\r
 from AutoGen.DataPipe import MemoryDataPipe\r
 import logging\r
+import time\r
 \r
 def clearQ(q):\r
     try:\r
@@ -111,7 +112,11 @@ class AutoGenManager(threading.Thread):
                     break\r
                 if badnews == "Done":\r
                     fin_num += 1\r
+                elif badnews == "QueueEmpty":\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), badnews))\r
+                    self.TerminateWorkers()\r
                 else:\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), badnews))\r
                     self.Status = False\r
                     self.TerminateWorkers()\r
                 if fin_num == len(self.autogen_workers):\r
@@ -193,6 +198,7 @@ class AutoGenWorkerInProcess(mp.Process):
             self.Wa._SrcTimeStamp = self.data_pipe.Get("Workspace_timestamp")\r
             GlobalData.gGlobalDefines = self.data_pipe.Get("G_defines")\r
             GlobalData.gCommandLineDefines = self.data_pipe.Get("CL_defines")\r
+            GlobalData.gCommandMaxLength = self.data_pipe.Get('gCommandMaxLength')\r
             os.environ._data = self.data_pipe.Get("Env_Var")\r
             GlobalData.gWorkspace = workspacedir\r
             GlobalData.gDisableIncludePathCheck = False\r
@@ -210,6 +216,7 @@ class AutoGenWorkerInProcess(mp.Process):
             GlobalData.gModuleHashFile = dict()\r
             GlobalData.gFileHashDict = dict()\r
             GlobalData.gEnableGenfdsMultiThread = self.data_pipe.Get("EnableGenfdsMultiThread")\r
+            GlobalData.gPlatformFinalPcds = self.data_pipe.Get("gPlatformFinalPcds")\r
             GlobalData.file_lock = self.file_lock\r
             CommandTarget = self.data_pipe.Get("CommandTarget")\r
             pcd_from_build_option = []\r
@@ -227,12 +234,21 @@ class AutoGenWorkerInProcess(mp.Process):
             PlatformMetaFile = self.GetPlatformMetaFile(self.data_pipe.Get("P_Info").get("ActivePlatform"),\r
                                              self.data_pipe.Get("P_Info").get("WorkspaceDir"))\r
             while True:\r
-                if self.module_queue.empty():\r
-                    break\r
                 if self.error_event.is_set():\r
                     break\r
                 module_count += 1\r
-                module_file,module_root,module_path,module_basename,module_originalpath,module_arch,IsLib = self.module_queue.get_nowait()\r
+                try:\r
+                    module_file,module_root,module_path,module_basename,module_originalpath,module_arch,IsLib = self.module_queue.get_nowait()\r
+                except Empty:\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), "Fake Empty."))\r
+                    time.sleep(0.01)\r
+                    continue\r
+                if module_file is None:\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), "Worker get the last item in the queue."))\r
+                    self.feedback_q.put("QueueEmpty")\r
+                    time.sleep(0.01)\r
+                    continue\r
+\r
                 modulefullpath = os.path.join(module_root,module_file)\r
                 taskname = " : ".join((modulefullpath,module_arch))\r
                 module_metafile = PathClass(module_file,module_root)\r
@@ -266,7 +282,7 @@ class AutoGenWorkerInProcess(mp.Process):
 \r
                 Ma.CreateCodeFile(False)\r
                 Ma.CreateMakeFile(False,GenFfsList=FfsCmd.get((Ma.MetaFile.Path, Ma.Arch),[]))\r
-\r
+                Ma.CreateAsBuiltInf()\r
                 if GlobalData.gBinCacheSource and CommandTarget in [None, "", "all"]:\r
                     try:\r
                         CacheResult = Ma.CanSkipbyMakeCache()\r
@@ -280,11 +296,11 @@ class AutoGenWorkerInProcess(mp.Process):
                     else:\r
                         self.cache_q.put((Ma.MetaFile.Path, Ma.Arch, "MakeCache", False))\r
 \r
-        except Empty:\r
-            pass\r
-        except:\r
+        except Exception as e:\r
+            EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), str(e)))\r
             self.feedback_q.put(taskname)\r
         finally:\r
+            EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), "Done"))\r
             self.feedback_q.put("Done")\r
             self.cache_q.put("CacheDone")\r
 \r