]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/GenBuild/org/tianocore/build/GenBuildTask.java
Fixed EDKT493. Added support to "SupModuleList" for checking if a library instance...
[mirror_edk2.git] / Tools / Java / Source / GenBuild / org / tianocore / build / GenBuildTask.java
index 99767ab4f2278c156867ca00905797c630369bba..8be1d62cc0f765de9032d86091bf4a37885c13a8 100644 (file)
@@ -23,19 +23,14 @@ import java.util.List;
 import java.util.Map;\r
 import java.util.Set;\r
 import java.util.Vector;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
 \r
 import org.apache.tools.ant.BuildException;\r
 import org.apache.tools.ant.BuildListener;\r
+import org.apache.tools.ant.Location;\r
 import org.apache.tools.ant.Project;\r
 import org.apache.tools.ant.taskdefs.Ant;\r
 import org.apache.tools.ant.taskdefs.Property;\r
 import org.apache.xmlbeans.XmlObject;\r
-\r
-import org.tianocore.common.definitions.ToolDefinitions;\r
-import org.tianocore.common.exception.EdkException;\r
-import org.tianocore.common.logger.EdkLog;\r
 import org.tianocore.build.autogen.AutoGen;\r
 import org.tianocore.build.exception.AutoGenException;\r
 import org.tianocore.build.exception.GenBuildException;\r
@@ -50,6 +45,9 @@ import org.tianocore.build.id.ModuleIdentification;
 import org.tianocore.build.id.PackageIdentification;\r
 import org.tianocore.build.id.PlatformIdentification;\r
 import org.tianocore.build.tools.ModuleItem;\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
@@ -134,30 +132,29 @@ public class GenBuildTask extends Ant {
         try {\r
             processGenBuild();\r
         } catch (PcdAutogenException e) {\r
-            //\r
-            // Add more logic process here\r
-            //\r
-            throw new BuildException(e.getMessage());\r
+            BuildException buildException = new BuildException(e.getMessage());\r
+            buildException.setStackTrace(e.getStackTrace());\r
+            throw buildException;\r
         } catch (AutoGenException e) {\r
-            //\r
-            // Add more logic process here\r
-            //\r
-            throw new BuildException(e.getMessage());\r
+            BuildException buildException = new BuildException(e.getMessage());\r
+            buildException.setStackTrace(e.getStackTrace());\r
+            throw buildException;\r
         } catch (PlatformPcdPreprocessBuildException e) {\r
-            //\r
-            // Add more logic process here\r
-            //\r
-            throw new BuildException(e.getMessage());\r
+            BuildException buildException = new BuildException(e.getMessage());\r
+            buildException.setStackTrace(e.getStackTrace());\r
+            throw buildException;\r
         } catch (GenBuildException e) {\r
-            //\r
-            // Add more logic process here\r
-            //\r
-            throw new BuildException(e.getMessage());\r
+            BuildException buildException = new BuildException(e.getMessage());\r
+            buildException.setStackTrace(e.getStackTrace());\r
+            throw buildException;\r
         } catch (EdkException e) {\r
-            //\r
-            // Add more logic process here\r
-            //\r
-            throw new BuildException(e.getMessage());\r
+            BuildException buildException = new BuildException(e.getMessage());\r
+            buildException.setStackTrace(e.getStackTrace());\r
+            throw buildException;\r
+        } catch (Exception e) {\r
+            BuildException buildException = new BuildException(e.getMessage());\r
+            buildException.setStackTrace(e.getStackTrace());\r
+            throw buildException;\r
         }\r
     }\r
 \r
@@ -204,7 +201,7 @@ public class GenBuildTask extends Ant {
             moduleId.setMsaFile(msaFile);\r
         }\r
         \r
-        String[] producedLibraryClasses = saq.getLibraryClasses("ALWAYS_PRODUCED",null);\r
+        String[] producedLibraryClasses = saq.getLibraryClasses("ALWAYS_PRODUCED", null, null);\r
         if (producedLibraryClasses.length == 0) {\r
             moduleId.setLibrary(false);\r
         } else {\r
@@ -233,9 +230,9 @@ public class GenBuildTask extends Ant {
         }\r
 \r
         Set<String> archSet = new LinkedHashSet<String>();\r
-\r
-        if ( getProject().getProperty("ARCH") != null) {\r
-            String[] fpdArchList = getProject().getProperty("ARCH").split(" ");\r
+        String archString = getProject().getProperty("ARCH");\r
+        if (archString != null) {\r
+            String[] fpdArchList = archString.split(" ");\r
 \r
             for (int i = 0; i < fpdArchList.length; i++) {\r
                 if (archListSupByToolChain.contains(fpdArchList[i])) {\r
@@ -260,6 +257,10 @@ public class GenBuildTask extends Ant {
             }\r
         }\r
 \r
+        if (archList.length == 0) {\r
+            EdkLog.log(this, EdkLog.EDK_WARNING, "Warning: " + "[" + archString + "] is not supported for " + moduleId + " in this build!\n");\r
+        }\r
+\r
         for (int k = 0; k < archList.length; k++) {\r
 \r
             getProject().setProperty("ARCH", archList[k]);\r
@@ -295,7 +296,7 @@ public class GenBuildTask extends Ant {
                     // don't do anything if no tools found\r
                     //\r
                     if (GlobalData.isCommandSet(targetList[i], toolchainList[j], archList[k]) == false) {\r
-                        EdkLog.log(this, EdkLog.EDK_WARNING, "Warning: No build issued.  No tools were found for [target=" + targetList[i] + " toolchain=" + toolchainList[j] + " arch=" + archList[k] + "]\n");\r
+                        EdkLog.log(this, EdkLog.EDK_WARNING, "Warning: No build issued.  No tools found for [target=" + targetList[i] + " toolchain=" + toolchainList[j] + " arch=" + archList[k] + "]\n");\r
                         continue;\r
                     }\r
 \r
@@ -428,8 +429,11 @@ public class GenBuildTask extends Ant {
         getProject().setProperty("FILE_GUID", moduleId.getGuid());\r
         getProject().setProperty("VERSION", moduleId.getVersion());\r
         getProject().setProperty("MODULE_TYPE", moduleId.getModuleType());\r
-        getProject().setProperty("MODULE_DIR", moduleId.getMsaFile().getParent().replaceAll("(\\\\)", "/"));\r
-        getProject().setProperty("MODULE_RELATIVE_DIR", moduleId.getModuleRelativePath().replaceAll("(\\\\)", "/"));\r
+        File msaFile = moduleId.getMsaFile();\r
+        String msaFileName = msaFile.getName();\r
+        getProject().setProperty("MODULE_DIR", msaFile.getParent().replaceAll("(\\\\)", "/"));\r
+        getProject().setProperty("MODULE_RELATIVE_DIR", moduleId.getModuleRelativePath().replaceAll("(\\\\)", "/") \r
+            + File.separatorChar + msaFileName.substring(0, msaFileName.lastIndexOf('.')));\r
 \r
         //\r
         // SUBSYSTEM\r
@@ -480,6 +484,11 @@ public class GenBuildTask extends Ant {
             String cmdPath = GlobalData.getCommandSetting(key, fpdModuleId);\r
             key[4] = ToolDefinitions.TOOLS_DEF_ATTRIBUTE_NAME;\r
             String cmdName = GlobalData.getCommandSetting(key, fpdModuleId);\r
+            if (cmdName.length() == 0) {\r
+                EdkLog.log(this, EdkLog.EDK_VERBOSE, "Warning: " + cmd[m] + " hasn't been defined!");\r
+                getProject().setProperty(cmd[m], "");\r
+                continue;\r
+            }\r
             File cmdFile = new File(cmdPath + File.separatorChar + cmdName);\r
             getProject().setProperty(cmd[m], cmdFile.getPath().replaceAll("(\\\\)", "/"));\r
 \r
@@ -490,10 +499,6 @@ public class GenBuildTask extends Ant {
             String cmdFlags = GlobalData.getCommandSetting(key, fpdModuleId);\r
             if (cmdFlags != null) \r
             {\r
-//              Set<String> addset = new LinkedHashSet<String>();\r
-//              Set<String> subset = new LinkedHashSet<String>();\r
-//              putFlagsToSet(addset, cmdFlags);\r
-//              getProject().setProperty(cmd[m] + "_FLAGS", getProject().replaceProperties(getFlags(addset, subset)));\r
               getProject().setProperty(cmd[m] + "_FLAGS", cmdFlags);\r
             } \r
             else \r
@@ -501,7 +506,6 @@ public class GenBuildTask extends Ant {
               getProject().setProperty(cmd[m] + "_FLAGS", "");\r
             }\r
 \r
-\r
             //\r
             // Set CC_EXT\r
             //\r
@@ -543,6 +547,28 @@ public class GenBuildTask extends Ant {
             } else {\r
                 getProject().setProperty(cmd[m] + "_DPATH", "");\r
             }\r
+            \r
+            //\r
+            // Set CC_LIBPATH\r
+            //\r
+            key[4] = ToolDefinitions.TOOLS_DEF_ATTRIBUTE_LIBPATH;\r
+            String libpath = GlobalData.getCommandSetting(key, fpdModuleId);\r
+            if (libpath != null) {\r
+                getProject().setProperty(cmd[m] + "_LIBPATH", libpath.replaceAll("(\\\\)", "/"));\r
+            } else {\r
+                getProject().setProperty(cmd[m] + "_LIBPATH", "");\r
+            }\r
+            \r
+            //\r
+            // Set CC_INCLUDEPATH\r
+            //\r
+            key[4] = ToolDefinitions.TOOLS_DEF_ATTRIBUTE_INCLUDEPATH;\r
+            String includepath = GlobalData.getCommandSetting(key, fpdModuleId);\r
+            if (dpath != null) {\r
+                getProject().setProperty(cmd[m] + "_INCLUDEPATH", includepath.replaceAll("(\\\\)", "/"));\r
+            } else {\r
+                getProject().setProperty(cmd[m] + "_INCLUDEPATH", "");\r
+            }\r
         }\r
     }\r
 \r
@@ -696,54 +722,6 @@ public class GenBuildTask extends Ant {
         ant.execute();\r
     }\r
 \r
-\r
-    /**\r
-      Separate the string and instore in set.\r
-\r
-      <p> String is separated by Java Regulation Expression\r
-      "[^\\\\]?(\".*?[^\\\\]\")[ \t,]+". </p>\r
-\r
-      <p>For example: </p>\r
-\r
-      <pre>\r
-        "/nologo", "/W3", "/WX"\r
-        "/C", "/DSTRING_DEFINES_FILE=\"BdsStrDefs.h\""\r
-      </pre>\r
-\r
-      @param set store the separated string\r
-      @param str string to separate\r
-    **/\r
-    private void putFlagsToSet(Set<String> set, String str) {\r
-        if (str == null || str.length() == 0) {\r
-            return;\r
-        }\r
-\r
-        Pattern myPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");\r
-        Matcher matcher = myPattern.matcher(str + " ");\r
-        while (matcher.find()) {\r
-            String item = str.substring(matcher.start(1), matcher.end(1));\r
-            set.add(item);\r
-        }\r
-    }\r
-\r
-    /**\r
-      Generate the final flags string will be used by compile command.\r
-\r
-      @param add the add flags set\r
-      @param sub the sub flags set\r
-      @return final flags after add set substract sub set\r
-    **/\r
-    private String getFlags(Set<String> add, Set<String> sub) {\r
-        String result = "";\r
-        add.removeAll(sub);\r
-        Iterator iter = add.iterator();\r
-        while (iter.hasNext()) {\r
-            String str = (String) iter.next();\r
-            result += str.substring(1, str.length() - 1) + " ";\r
-        }\r
-        return result;\r
-    }\r
-\r
     public void setSingleModuleBuild(boolean isSingleModuleBuild) {\r
         this.isSingleModuleBuild = isSingleModuleBuild;\r
     }\r