]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/FrameworkBuildTask.java
Auto close multi-thread flag when stand-alone module build. Also change some logs.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / FrameworkBuildTask.java
index 04cf84c04fea1a42b7679ef070c9a84729725646..d1bf1cc90aa3107b6aa057386666413bb5aa398f 100644 (file)
@@ -15,6 +15,7 @@ package org.tianocore.build;
 \r
 import java.io.BufferedReader;\r
 import java.io.File;\r
+import java.io.IOException;\r
 import java.io.InputStreamReader;\r
 import java.util.Hashtable;\r
 import java.util.Iterator;\r
@@ -24,12 +25,19 @@ import java.util.Set;
 \r
 import org.apache.tools.ant.BuildException;\r
 import org.apache.tools.ant.Task;\r
+import org.tianocore.build.exception.AutoGenException;\r
+import org.tianocore.build.exception.GenBuildException;\r
+import org.tianocore.build.exception.PcdAutogenException;\r
+import org.tianocore.build.exception.PlatformPcdPreprocessBuildException;\r
 import org.tianocore.build.fpd.FpdParserForThread;\r
 import org.tianocore.build.fpd.FpdParserTask;\r
+import org.tianocore.build.global.GenBuildLogger;\r
 import org.tianocore.build.global.GlobalData;\r
 import org.tianocore.build.toolchain.ConfigReader;\r
 import org.tianocore.build.toolchain.ToolChainInfo;\r
 import org.tianocore.common.definitions.ToolDefinitions;\r
+import org.tianocore.common.exception.EdkException;\r
+import org.tianocore.common.logger.EdkLog;\r
 \r
 /**\r
   <p>\r
@@ -95,7 +103,7 @@ public class FrameworkBuildTask extends Task{
     ///\r
     /// The concurrent thread number\r
     ///\r
-    public static int MAX_CONCURRENT_THREAD_NUMBER = 1;\r
+    public static int MAX_CONCURRENT_THREAD_NUMBER = 2;\r
 \r
     ///\r
     /// there are three type: all (build), clean and cleanall\r
@@ -103,6 +111,44 @@ public class FrameworkBuildTask extends Task{
     private String type = "all";\r
     \r
     public void execute() throws BuildException {\r
+        //\r
+        // set Logger\r
+        //\r
+        GenBuildLogger logger = new GenBuildLogger(getProject());\r
+        EdkLog.setLogLevel(getProject().getProperty("env.LOGLEVEL"));\r
+        EdkLog.setLogger(logger);\r
+        \r
+        try {\r
+            processFrameworkBuild();\r
+        } catch (PcdAutogenException e) {\r
+            //\r
+            // Add more logic process here\r
+            //\r
+            throw new BuildException(e.getMessage());\r
+        } catch (AutoGenException e) {\r
+            //\r
+            // Add more logic process here\r
+            //\r
+            throw new BuildException(e.getMessage());\r
+        } catch (PlatformPcdPreprocessBuildException e) {\r
+            //\r
+            // Add more logic process here\r
+            //\r
+            throw new BuildException(e.getMessage());\r
+        } catch (GenBuildException e) {\r
+            //\r
+            // Add more logic process here\r
+            //\r
+            throw new BuildException(e.getMessage());\r
+        } catch (EdkException e) {\r
+            //\r
+            // Add more logic process here\r
+            //\r
+            throw new BuildException(e.getMessage());\r
+        }\r
+    }\r
+    \r
+    private void processFrameworkBuild() throws EdkException, GenBuildException, AutoGenException, PcdAutogenException, PlatformPcdPreprocessBuildException {\r
         //\r
         // Seach build.xml -> .FPD -> .MSA file\r
         //\r
@@ -134,8 +180,10 @@ public class FrameworkBuildTask extends Task{
                     }\r
                 }\r
             }\r
-        } catch (Exception e) {\r
-            throw new BuildException(e.getMessage());\r
+        } catch (IOException ex) {\r
+            BuildException buildException = new BuildException("Scanning current directory error. \n" + ex.getMessage());\r
+            buildException.setStackTrace(ex.getStackTrace());\r
+            throw buildException;\r
         }\r
         \r
         //\r
@@ -190,17 +238,17 @@ public class FrameworkBuildTask extends Task{
         // Build every FPD files (PLATFORM build)\r
         //\r
         if (buildFile.getName().endsWith(ToolDefinitions.FPD_EXTENSION)) {\r
-            System.out.println("Processing the FPD file [" + buildFile.getPath() + "] ..>> ");\r
+            EdkLog.log(this, "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
+                EdkLog.log(this, "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
+                fpdParserForThread.perform();\r
                 return ;\r
             }\r
             \r
@@ -208,14 +256,14 @@ public class FrameworkBuildTask extends Task{
             fpdParserTask.setType(type);\r
             fpdParserTask.setProject(getProject());\r
             fpdParserTask.setFpdFile(buildFile);\r
-            fpdParserTask.execute();\r
+            fpdParserTask.perform();\r
             \r
             //\r
             // If cleanall delete the Platform_build.xml\r
             //\r
             if (type.compareTo("cleanall") == 0) {\r
                 File platformBuildFile = \r
-                    new File(getProject().getProperty("PLATFORM_DIR") \r
+                    new File(getProject().getProperty("BUILD_DIR") \r
                                     + File.separatorChar \r
                                     + getProject().getProperty("PLATFORM") \r
                                     + "_build.xml");\r
@@ -227,9 +275,10 @@ public class FrameworkBuildTask extends Task{
         // Build every MSA files (SINGLE MODULE BUILD)\r
         //\r
         else if (buildFile.getName().endsWith(ToolDefinitions.MSA_EXTENSION)) {\r
+            multithread = false; \r
             File tmpFile = new File(GlobalData.getWorkspacePath() + File.separatorChar + activePlatform);\r
-            System.out.println("Using the FPD file [" + tmpFile.getPath() + "] for the active platform. ");\r
-            System.out.println("Processing the MSA file [" + buildFile.getPath() + "] ..>> ");\r
+            EdkLog.log(this, "Using the FPD file [" + tmpFile.getPath() + "] for the active platform. ");\r
+            EdkLog.log(this, "Processing the MSA file [" + buildFile.getPath() + "] ..>> ");\r
             GenBuildTask genBuildTask = new GenBuildTask();\r
             genBuildTask.setSingleModuleBuild(true);\r
             genBuildTask.setType(type);\r
@@ -239,7 +288,7 @@ public class FrameworkBuildTask extends Task{
             }\r
             genBuildTask.setProject(getProject());\r
             genBuildTask.setMsaFile(buildFile);\r
-            genBuildTask.execute();\r
+            genBuildTask.perform();\r
         }\r
     }\r
     \r
@@ -268,7 +317,6 @@ public class FrameworkBuildTask extends Task{
             String name = (String)piter.next();\r
             originalProperties.put(new String(name), new String((String)allProperties.get(name)));\r
         }\r
-        \r
     }\r
 \r
     private File intercommuniteWithUser(){\r
@@ -282,13 +330,13 @@ public class FrameworkBuildTask extends Task{
                 index++;\r
             }\r
 \r
-            System.out.println("Finding " + allFiles.length + " FPD files: ");\r
+            EdkLog.log(this, "Finding " + allFiles.length + " FPD files: ");\r
             for (int i = 0; i < allFiles.length; i++) {\r
                 System.out.println("[" + (i + 1) + "]: " + allFiles[i].getName());\r
             }\r
             \r
             boolean flag = true;\r
-            System.out.print("Please select one of the following FPD files to build:[1] ");\r
+            EdkLog.log(this, "Please select one of the following FPD files to build:[1] ");\r
             do{\r
                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));\r
                 try {\r
@@ -300,7 +348,7 @@ public class FrameworkBuildTask extends Task{
                      }\r
                      int indexSelect = Integer.parseInt(str);\r
                      if (indexSelect <=0 || indexSelect > allFiles.length) {\r
-                         System.out.print("Please enter a number between [1.." + allFiles.length + "]:[1] ");\r
+                         EdkLog.log(this, "Please enter a number between [1.." + allFiles.length + "]:[1] ");\r
                          continue ;\r
                      } else {\r
                          file = allFiles[indexSelect - 1];\r
@@ -308,7 +356,7 @@ public class FrameworkBuildTask extends Task{
                          continue ;\r
                      }\r
                 } catch (Exception e) {\r
-                    System.out.print("Please enter a valid number:[1] ");\r
+                    EdkLog.log(this, "Please enter a valid number:[1] ");\r
                     flag = true;\r
                 }\r
             } while (flag);\r
@@ -327,69 +375,63 @@ public class FrameworkBuildTask extends Task{
         }\r
     }\r
     \r
-    private void readTargetFile(){\r
-        try {\r
-            String targetFile = getProject().getProperty("WORKSPACE_DIR") + File.separatorChar + targetFilename;\r
-            \r
-            String[][] targetFileInfo = ConfigReader.parse(targetFile);\r
-            \r
-            //\r
-            // Get ToolChain Info from target.txt\r
-            //\r
-            ToolChainInfo envToolChainInfo = new ToolChainInfo(); \r
-            String str = getValue(ToolDefinitions.TARGET_KEY_TARGET, targetFileInfo);\r
-            if (str == null || str.trim().equals("")) {\r
-                envToolChainInfo.addTargets("*");\r
-            } else {\r
-                envToolChainInfo.addTargets(str);\r
-            }\r
-            str = getValue(ToolDefinitions.TARGET_KEY_TOOLCHAIN, targetFileInfo);\r
-            if (str == null || str.trim().equals("")) {\r
-                envToolChainInfo.addTagnames("*");\r
-            } else {\r
-                envToolChainInfo.addTagnames(str);\r
-            }\r
-            str = getValue(ToolDefinitions.TARGET_KEY_ARCH, targetFileInfo);\r
-            if (str == null || str.trim().equals("")) {\r
-                envToolChainInfo.addArchs("*");\r
-            } else {\r
-                envToolChainInfo.addArchs(str);\r
-            }\r
-            GlobalData.setToolChainEnvInfo(envToolChainInfo);\r
-            \r
-            str = getValue(ToolDefinitions.TARGET_KEY_TOOLS_DEF, targetFileInfo);\r
-            if (str != null && str.trim().length() > 0) {\r
-                toolsDefFilename = str;\r
-            }\r
-            \r
-            str = getValue(ToolDefinitions.TARGET_KEY_ACTIVE_PLATFORM, targetFileInfo);\r
-            if (str != null && ! str.trim().equals("")) {\r
-                if ( ! str.endsWith(".fpd")) {\r
-                    throw new BuildException("FPD file's extension must be \"" + ToolDefinitions.FPD_EXTENSION + "\"!");\r
-                }\r
-                activePlatform = str;\r
-            }\r
-            \r
-            str = getValue("MULTIPLE_THREAD", targetFileInfo);\r
-            if (str != null && str.trim().equalsIgnoreCase("Enable")) {\r
-                multithread = true;\r
+    private void readTargetFile() throws EdkException{\r
+        String targetFile = getProject().getProperty("WORKSPACE_DIR") + File.separatorChar + targetFilename;\r
+        \r
+        String[][] targetFileInfo = ConfigReader.parse(targetFile);\r
+        \r
+        //\r
+        // Get ToolChain Info from target.txt\r
+        //\r
+        ToolChainInfo envToolChainInfo = new ToolChainInfo(); \r
+        String str = getValue(ToolDefinitions.TARGET_KEY_TARGET, targetFileInfo);\r
+        if (str == null || str.trim().equals("")) {\r
+            envToolChainInfo.addTargets("*");\r
+        } else {\r
+            envToolChainInfo.addTargets(str);\r
+        }\r
+        str = getValue(ToolDefinitions.TARGET_KEY_TOOLCHAIN, targetFileInfo);\r
+        if (str == null || str.trim().equals("")) {\r
+            envToolChainInfo.addTagnames("*");\r
+        } else {\r
+            envToolChainInfo.addTagnames(str);\r
+        }\r
+        str = getValue(ToolDefinitions.TARGET_KEY_ARCH, targetFileInfo);\r
+        if (str == null || str.trim().equals("")) {\r
+            envToolChainInfo.addArchs("*");\r
+        } else {\r
+            envToolChainInfo.addArchs(str);\r
+        }\r
+        GlobalData.setToolChainEnvInfo(envToolChainInfo);\r
+        \r
+        str = getValue(ToolDefinitions.TARGET_KEY_TOOLS_DEF, targetFileInfo);\r
+        if (str != null && str.trim().length() > 0) {\r
+            toolsDefFilename = str;\r
+        }\r
+        \r
+        str = getValue(ToolDefinitions.TARGET_KEY_ACTIVE_PLATFORM, targetFileInfo);\r
+        if (str != null && ! str.trim().equals("")) {\r
+            if ( ! str.endsWith(".fpd")) {\r
+                throw new BuildException("FPD file's extension must be \"" + ToolDefinitions.FPD_EXTENSION + "\"!");\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
+            activePlatform = str;\r
+        }\r
+        \r
+        str = getValue(ToolDefinitions.TARGET_KEY_MULTIPLE_THREAD, targetFileInfo);\r
+        if (str != null && str.trim().equalsIgnoreCase("Enable")) {\r
+            multithread = true;\r
+        }\r
+\r
+        str = getValue(ToolDefinitions.TARGET_KEY_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 ex) {\r
             }\r
         }\r
-        catch (Exception ex) {\r
-            throw new BuildException(ex.getMessage());\r
-        }\r
     }\r
     \r
     private String getValue(String key, String[][] map) {\r