]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Edk2ToolsBuild.py
BaseTools: Update Edk2ToolsBuild.py to use multiple threads on Linux
[mirror_edk2.git] / BaseTools / Edk2ToolsBuild.py
index 057d2e9e063362d7813f0d6b86e544ad5f770663..1ea8187de693b9f1d626b1a50d57c2978f70f9b5 100644 (file)
@@ -11,6 +11,7 @@ import os
 import sys\r
 import logging\r
 import argparse\r
+import multiprocessing\r
 from edk2toolext import edk2_logging\r
 from edk2toolext.environment import self_describing_environment\r
 from edk2toolext.base_abstract_invocable import BaseAbstractInvocable\r
@@ -141,7 +142,8 @@ class Edk2ToolsBuild(BaseAbstractInvocable):
             return ret\r
 \r
         elif self.tool_chain_tag.lower().startswith("gcc"):\r
-            ret = RunCmd("make", "-C .", workingdir=shell_env.get_shell_var("EDK_TOOLS_PATH"))\r
+            cpu_count = self.GetCpuThreads()\r
+            ret = RunCmd("make", f"-C .  -j {cpu_count}", workingdir=shell_env.get_shell_var("EDK_TOOLS_PATH"))\r
             if ret != 0:\r
                 raise Exception("Failed to build.")\r
 \r
@@ -154,6 +156,18 @@ class Edk2ToolsBuild(BaseAbstractInvocable):
         logging.critical("Tool Chain not supported")\r
         return -1\r
 \r
+    def GetCpuThreads(self) -> int:\r
+        ''' Function to return number of cpus. If error return 1'''\r
+        cpus = 1\r
+        try:\r
+            cpus = multiprocessing.cpu_count()\r
+        except:\r
+            # from the internet there are cases where cpu_count is not implemented.\r
+            # will handle error by just doing single proc build\r
+            pass\r
+        return cpus\r
+\r
+\r
 \r
 def main():\r
     Edk2ToolsBuild().Invoke()\r