]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/GenBuild/org/tianocore/build/fpd/PlatformBuildFileGenerator.java
- Fixed EDKT240. Now the Blank.pad file for alignment purpose will no longer be needed.
[mirror_edk2.git] / Tools / Java / Source / GenBuild / org / tianocore / build / fpd / PlatformBuildFileGenerator.java
index d4b4622c6098b8279f4e7be393b109a4b56672db..ad2ee2cdd24ccf5d1c945c7d2c60757717513d2f 100644 (file)
@@ -64,6 +64,8 @@ public class PlatformBuildFileGenerator {
     \r
     private File platformBuildFile = null;\r
     \r
+    private Map<String, String> aprioriType = null;\r
+    \r
     private Project project;\r
     \r
     private String info = "DO NOT EDIT \n" \r
@@ -72,13 +74,14 @@ public class PlatformBuildFileGenerator {
         + "Abstract:\n"\r
         + "Auto-generated ANT build file for building EFI Modules and Platforms\n";\r
 \r
-    public PlatformBuildFileGenerator(Project project, Map<FpdModuleIdentification, String> outfiles, Map<String, Set<FpdModuleIdentification>> fvs, boolean isUnified, SurfaceAreaQuery saq, String platformBuildFile){\r
+    public PlatformBuildFileGenerator(Project project, Map<FpdModuleIdentification, String> outfiles, Map<String, Set<FpdModuleIdentification>> fvs, boolean isUnified, SurfaceAreaQuery saq, String platformBuildFile, Map<String, String> aprioriType){\r
         this.project = project;\r
         this.outfiles = outfiles;\r
         this.isUnified = isUnified;\r
         this.fvs = fvs;\r
         this.saq = saq;\r
         this.platformBuildFile = new File(platformBuildFile);\r
+        this.aprioriType = aprioriType;\r
     }\r
     \r
     /**\r
@@ -156,7 +159,8 @@ public class PlatformBuildFileGenerator {
             // User Extension Post build\r
             //\r
             applyUserExtensionsPostBuild(document, root);\r
-            \r
+            applyUserExtensions(document, root);\r
+\r
             document.appendChild(rootComment);\r
             document.appendChild(root);\r
             //\r
@@ -193,6 +197,39 @@ public class PlatformBuildFileGenerator {
         Element ele = document.createElement("target");\r
         ele.setAttribute("name", "modules");\r
 \r
+        //\r
+        // Try to build apriori if necessary\r
+        //\r
+        //\r
+        // For every Target and ToolChain\r
+        //\r
+        String[] targetList = GlobalData.getToolChainInfo().getTargets();\r
+        for (int i = 0; i < targetList.length; i++){\r
+            String[] toolchainList = GlobalData.getToolChainInfo().getTagnames();\r
+            for(int j = 0; j < toolchainList.length; j++){\r
+                //\r
+                // Prepare FV_DIR\r
+                //\r
+                String ffsCommonDir = project.getProperty("BUILD_DIR") + File.separatorChar \r
+                                + targetList[i] + "_" \r
+                                + toolchainList[j];\r
+                File fvDir = new File(ffsCommonDir + File.separatorChar + "FV");\r
+                Element fvEle = document.createElement("var");\r
+                fvEle.setAttribute("name", "FV_DIR");\r
+                fvEle.setAttribute("value", fvDir.getPath().replaceAll("(\\\\)", "/"));\r
+                ele.appendChild(fvEle);\r
+                \r
+                Iterator<String> aprIter = aprioriType.keySet().iterator();\r
+                while (aprIter.hasNext()) {\r
+                    String fvName = aprIter.next();\r
+                    Element moduleEle = document.createElement("Build_Apriori");\r
+                    moduleEle.setAttribute("FILENAME", fvName);\r
+                    moduleEle.setAttribute("GUID", aprioriType.get(fvName));\r
+                    ele.appendChild(moduleEle);\r
+                }\r
+            }\r
+        }\r
+        \r
         //\r
         // Get all valid FV name\r
         //\r
@@ -594,7 +631,59 @@ public class PlatformBuildFileGenerator {
         \r
         root.appendChild(ele);\r
     }\r
-    \r
+\r
+    private void applyUserExtensions(Document document, Node root) {\r
+        Node[] nodeList = saq.getFpdUserExtensions();\r
+        for (int nodeIndex = 0; nodeIndex < nodeList.length; ++nodeIndex) {\r
+            Node node = nodeList[nodeIndex];\r
+            //\r
+            // User Extensions\r
+            //\r
+            root.appendChild(document.createComment("User Defined Target"));\r
+            Element ele = document.createElement("target");\r
+            ele.setAttribute("name", node.getAttributes().getNamedItem("Identifier").getNodeValue());\r
+\r
+            if (node != null) {\r
+                //\r
+                // For every Target and ToolChain\r
+                //\r
+                String[] targetList = GlobalData.getToolChainInfo().getTargets();\r
+                for (int i = 0; i < targetList.length; i++){\r
+                    String[] toolchainList = GlobalData.getToolChainInfo().getTagnames();\r
+                    for(int j = 0; j < toolchainList.length; j++){\r
+                        //\r
+                        // Prepare FV_DIR\r
+                        //\r
+                        String ffsCommonDir = project.getProperty("BUILD_DIR") + File.separatorChar \r
+                                        + targetList[i] + "_" \r
+                                        + toolchainList[j];\r
+                        File fvDir = new File(ffsCommonDir + File.separatorChar + "FV");\r
+                        Element fvEle = document.createElement("var");\r
+                        fvEle.setAttribute("name", "FV_DIR");\r
+                        fvEle.setAttribute("value", fvDir.getPath().replaceAll("(\\\\)", "/"));\r
+                        ele.appendChild(fvEle);\r
+\r
+                        Element targetDirEle = document.createElement("var");\r
+                        targetDirEle.setAttribute("name", "TARGET_DIR");\r
+                        targetDirEle.setAttribute("value", ffsCommonDir.replaceAll("(\\\\)", "/"));\r
+                        ele.appendChild(targetDirEle);\r
+\r
+                        NodeList childNodes = node.getChildNodes();\r
+                        for (int k = 0; k < childNodes.getLength(); k++) {\r
+                            Node childItem = childNodes.item(k);\r
+                            if (childItem.getNodeType() == Node.ELEMENT_NODE) {\r
+                                ele.appendChild(recursiveNode(childItem, document));\r
+                            }\r
+                        }\r
+\r
+                    }\r
+                }\r
+            }\r
+\r
+            root.appendChild(ele);\r
+        }\r
+    }\r
+\r
     private Element recursiveNode(Node node, Document document) {\r
         Element root = document.createElement(node.getNodeName());\r
         NamedNodeMap attr = node.getAttributes();\r