]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/FrameworkBuildTask.java
Add thread control classes. (2)
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / FrameworkBuildTask.java
index dc12f6e23ed5e48cfb98d328544bcd6950efa817..07da77c2bc65a42c3014384be67a86bc635fc9a2 100644 (file)
@@ -23,6 +23,7 @@ import java.util.Set;
 \r
 import org.apache.tools.ant.BuildException;\r
 import org.apache.tools.ant.Task;\r
+import org.tianocore.build.fpd.FpdParserForThread;\r
 import org.tianocore.build.fpd.FpdParserTask;\r
 import org.tianocore.build.global.GlobalData;\r
 import org.tianocore.build.global.PropertyManager;\r
@@ -81,6 +82,16 @@ public class FrameworkBuildTask extends Task{
     \r
     String activePlatform = null;\r
     \r
+    ///\r
+    /// The flag to present current is multi-thread enabled\r
+    ///\r
+    public static boolean multithread = false;\r
+    \r
+    ///\r
+    /// The concurrent thread number\r
+    ///\r
+    public static int MAX_CONCURRENT_THREAD_NUMBER = 1;\r
+    \r
     ///\r
     /// there are three type: all (build), clean and cleanall\r
     ///\r
@@ -175,6 +186,19 @@ public class FrameworkBuildTask extends Task{
         //\r
         if (buildFile.getName().endsWith(ToolDefinitions.FPD_EXTENSION)) {\r
             System.out.println("Processing the FPD file [" + buildFile.getPath() + "] ..>> ");\r
+            //\r
+            // Iff for platform build will enable the multi-thread if set in target.txt\r
+            //\r
+            if (multithread && type.equalsIgnoreCase("all")) {\r
+                System.out.println("Multi-thread build is enabled. ");\r
+                FpdParserForThread fpdParserForThread = new FpdParserForThread();\r
+                fpdParserForThread.setType(type);\r
+                fpdParserForThread.setProject(getProject());\r
+                fpdParserForThread.setFpdFile(buildFile);\r
+                fpdParserForThread.execute();\r
+                return ;\r
+            }\r
+            \r
             FpdParserTask fpdParserTask = new FpdParserTask();\r
             fpdParserTask.setType(type);\r
             fpdParserTask.setProject(getProject());\r
@@ -330,6 +354,23 @@ public class FrameworkBuildTask extends Task{
                 }\r
                 activePlatform = str;\r
             }\r
+            \r
+            str = getValue("MULTIPLE_THREAD", targetFileInfo);\r
+            if (str != null && str.trim().equalsIgnoreCase("Enable")) {\r
+                multithread = true;\r
+            }\r
+            \r
+            str = getValue("MAX_CONCURRENT_THREAD_NUMBER", targetFileInfo);\r
+            if (str != null ) {\r
+                try {\r
+                    int threadNum = Integer.parseInt(str);\r
+                    if (threadNum > 0) {\r
+                        MAX_CONCURRENT_THREAD_NUMBER = threadNum;\r
+                    }\r
+                } catch (Exception enuma) {\r
+                    \r
+                }\r
+            }\r
         }\r
         catch (Exception ex) {\r
             throw new BuildException(ex.getMessage());\r