]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/ModuleBuildFileGenerator.java
Fix T105. It is caused by cpptasks which change automati cally root directory like...
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / ModuleBuildFileGenerator.java
index 4c6843e6b2ce996312a9d16b415bfac9c91f4375..e9e2770957350119afa2f01be65cb6558b6f2ce2 100644 (file)
@@ -16,6 +16,8 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;\r
 import java.util.Map;\r
 import java.util.Set;\r
+import java.io.FileOutputStream;\r
+import java.io.OutputStreamWriter;\r
 \r
 import javax.xml.parsers.DocumentBuilder;\r
 import javax.xml.parsers.DocumentBuilderFactory;\r
@@ -46,7 +48,7 @@ public class ModuleBuildFileGenerator {
     /// Pass: TARGET, TOOLCHAIN, ARCH\r
     /// PACKAGE, PACKAGE_GUID, PACKAGE_VERSION\r
     ///\r
-    String[] inheritProperties = {"ARCH", "MODULE_GUID", "MODULE_VERSION", "PLATFORM", "PACKAGE_GUID", "PACKAGE_VERSION"};\r
+    String[] inheritProperties = {"ARCH", "MODULE_GUID", "MODULE_VERSION", "PLATFORM_FILE", "PACKAGE_GUID", "PACKAGE_VERSION"};\r
 \r
     ///\r
     /// The information at the header of <em>build.xml</em>.\r
@@ -211,7 +213,8 @@ public class ModuleBuildFileGenerator {
             // generate all directory path\r
             //\r
             (new File(file.getParent())).mkdirs();\r
-            Result result = new StreamResult(file);\r
+            FileOutputStream outputStream = new FileOutputStream(file);\r
+            Result result = new StreamResult(new OutputStreamWriter(outputStream));\r
             \r
             //\r
             // Write the DOM document to the file\r
@@ -221,7 +224,6 @@ public class ModuleBuildFileGenerator {
             xformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
             xformer.transform(source, result);\r
         } catch (Exception ex) {\r
-            ex.printStackTrace();\r
             throw new BuildException("Module [" + fpdModuleId.getModule().getName() + "] generating build file failed.\n" + ex.getMessage());\r
         }\r
     }\r
@@ -403,6 +405,20 @@ public class ModuleBuildFileGenerator {
 //        project.setProperty("LIBS", propertyLibs.replaceAll("(\\\\)", "/"));\r
     }\r
     \r
+     /**\r
+      Return the name of the directory that corresponds to the architecture.\r
+      This is a translation from the XML Schema tag to a directory that\r
+      corresponds to our directory name coding convention.\r
+     \r
+      **/\r
+    private String archDir(String arch) {\r
+        return arch.replaceFirst("X64", "x64")\r
+                   .replaceFirst("IPF", "Ipf")\r
+                   .replaceFirst("IA32", "Ia32")\r
+                   .replaceFirst("ARM", "Arm")\r
+                   .replaceFirst("EBC", "Ebc");\r
+    }\r
+\r
     /**\r
       Generate the build source files elements for BaseName_build.xml. \r
       \r
@@ -414,17 +430,18 @@ public class ModuleBuildFileGenerator {
         // Prepare the includes: PackageDependencies and Output debug direactory\r
         //\r
         Set<String> includes = new LinkedHashSet<String>();\r
+        String arch = project.getProperty("ARCH");\r
         \r
         //\r
         // WORKSPACE\r
         //\r
-        includes.add("${WORKSPACE_DIR}");\r
+        includes.add("${WORKSPACE_DIR}" + File.separatorChar);\r
         \r
         //\r
         // Module iteself\r
         //\r
         includes.add("${MODULE_DIR}");\r
-        includes.add("${MODULE_DIR}" + File.separatorChar + "${ARCH}");\r
+        includes.add("${MODULE_DIR}" + File.separatorChar + archDir(arch));\r
         \r
         //\r
         // Packages in PackageDenpendencies\r
@@ -434,7 +451,7 @@ public class ModuleBuildFileGenerator {
             GlobalData.refreshPackageIdentification(packageDependencies[i]);\r
             File packageFile = packageDependencies[i].getSpdFile();\r
             includes.add(packageFile.getParent() + File.separatorChar + "Include");\r
-            includes.add(packageFile.getParent() + File.separatorChar + "Include" + File.separatorChar + "${ARCH}");\r
+            includes.add(packageFile.getParent() + File.separatorChar + "Include" + File.separatorChar + archDir(arch));\r
         }\r
 \r
         //\r
@@ -448,7 +465,7 @@ public class ModuleBuildFileGenerator {
                 GlobalData.refreshPackageIdentification(libraryPackageDependencies[j]);\r
                 File packageFile = libraryPackageDependencies[j].getSpdFile();\r
                 includes.add(packageFile.getParent() + File.separatorChar + "Include");\r
-                includes.add(packageFile.getParent() + File.separatorChar + "Include" + File.separatorChar + "${ARCH}");\r
+                includes.add(packageFile.getParent() + File.separatorChar + "Include" + File.separatorChar + archDir(arch));\r
             }\r
             SurfaceAreaQuery.pop();\r
         }\r
@@ -458,7 +475,7 @@ public class ModuleBuildFileGenerator {
         // The package which the module belongs to\r
         // TBD\r
         includes.add(fpdModuleId.getModule().getPackage().getPackageDir() + File.separatorChar + "Include");\r
-        includes.add(fpdModuleId.getModule().getPackage().getPackageDir() + File.separatorChar + "Include" + File.separatorChar + "${ARCH}");\r
+        includes.add(fpdModuleId.getModule().getPackage().getPackageDir() + File.separatorChar + "Include" + File.separatorChar + archDir(arch));\r
 \r
         //\r
         // Debug files output directory\r
@@ -550,7 +567,7 @@ public class ModuleBuildFileGenerator {
             return ;\r
         }\r
         if (fp.initSections(ffsKeyword, project, fpdModuleId)) {\r
-            String targetFilename = fpdModuleId.getModule().getGuid() + "-" + fpdModuleId.getModule().getName() + FpdParserTask.getSuffix(fpdModuleId.getModule().getModuleType());\r
+            String targetFilename = fpdModuleId.getModule().getGuid() + "-" + "${BASE_NAME}" + FpdParserTask.getSuffix(fpdModuleId.getModule().getModuleType());\r
             String[] list = fp.getGenSectionElements(document, "${BASE_NAME}", fpdModuleId.getModule().getGuid(), targetFilename);\r
 \r
             for (int i = 0; i < list.length; i++) {\r