X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Tools%2FSource%2FGenBuild%2Forg%2Ftianocore%2Fbuild%2Ffpd%2FPlatformBuildFileGenerator.java;h=87593a6683a23c9f8adc20a203e088e4b15e0903;hp=b41ea211d25d35162666f49b5ba0f588cb81329d;hb=e1347472b7749c2c2aad2ffc74407fe99a4ccd3b;hpb=a29c47e01d9689fad735bbeccfaef67676a425d1 diff --git a/Tools/Source/GenBuild/org/tianocore/build/fpd/PlatformBuildFileGenerator.java b/Tools/Source/GenBuild/org/tianocore/build/fpd/PlatformBuildFileGenerator.java index b41ea211d2..87593a6683 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/fpd/PlatformBuildFileGenerator.java +++ b/Tools/Source/GenBuild/org/tianocore/build/fpd/PlatformBuildFileGenerator.java @@ -35,7 +35,9 @@ import org.tianocore.build.id.ModuleIdentification; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; +import org.w3c.dom.NodeList; public class PlatformBuildFileGenerator { @@ -107,6 +109,10 @@ public class PlatformBuildFileGenerator { ele.setAttribute("resource", "frameworktasks.tasks"); root.appendChild(ele); + ele = document.createElement("taskdef"); + ele.setAttribute("resource", "net/sf/antcontrib/antlib.xml"); + root.appendChild(ele); + ele = document.createElement("property"); ele.setAttribute("environment", "env"); root.appendChild(ele); @@ -183,6 +189,7 @@ public class PlatformBuildFileGenerator { throw new BuildException("Generate " + platformName + "_build.xml failed. \n" + ex.getMessage()); } } + private void applyModules(Document document, Node root, String num) { root.appendChild(document.createComment("Modules target")); Element ele = document.createElement("target"); @@ -380,9 +387,12 @@ public class PlatformBuildFileGenerator { ele.setAttribute("name", "cleanall"); if (isUnified) { - Element cleanAllEle = document.createElement("delete"); - cleanAllEle.setAttribute("dir", project.getProperty("BUILD_DIR")); - ele.appendChild(cleanAllEle); + String[] targetList = GlobalData.getToolChainInfo().getTargets(); + for (int i = 0; i < targetList.length; ++i) { + Element cleanAllEle = document.createElement("delete"); + cleanAllEle.setAttribute("dir", project.getProperty("BUILD_DIR") + File.separatorChar + targetList[i]); + ele.appendChild(cleanAllEle); + } } else { Set set = outfiles.keySet(); Iterator iter = set.iterator(); @@ -461,9 +471,63 @@ public class PlatformBuildFileGenerator { Element ele = document.createElement("target"); ele.setAttribute("name", "userextensions"); + Node node = SurfaceAreaQuery.getFpdUserExtension(); + if (node != null) { + // + // For every Target and ToolChain + // + String[] targetList = GlobalData.getToolChainInfo().getTargets(); + for (int i = 0; i < targetList.length; i++){ + String[] toolchainList = GlobalData.getToolChainInfo().getTagnames(); + for(int j = 0; j < toolchainList.length; j++){ + // + // Prepare FV_DIR + // + String ffsCommonDir = project.getProperty("BUILD_DIR") + File.separatorChar + + targetList[i] + File.separatorChar + + toolchainList[j]; + File fvDir = new File(ffsCommonDir + File.separatorChar + "FV"); + Element fvEle = document.createElement("var"); + fvEle.setAttribute("name", "FV_DIR"); + fvEle.setAttribute("value", fvDir.getPath().replaceAll("(\\\\)", "/")); + ele.appendChild(fvEle); + + NodeList childNodes = node.getChildNodes(); + for (int k = 0; k < childNodes.getLength(); k++) { + Node childItem = childNodes.item(k); + if (childItem.getNodeType() == Node.ELEMENT_NODE) { + ele.appendChild(recursiveNode(childItem, document)); + } + } + + } + } + } + root.appendChild(ele); } + private Element recursiveNode(Node node, Document document) { + Element root = document.createElement(node.getNodeName()); + NamedNodeMap attr = node.getAttributes(); + for (int i = 0; i < attr.getLength(); i++) { + Node attrItem = attr.item(i); + root.setAttribute(attrItem.getNodeName(), attrItem.getNodeValue()); + } + NodeList childNodes = node.getChildNodes(); + for (int i = 0; i < childNodes.getLength(); i++) { + Node childItem = childNodes.item(i); + if (childItem.getNodeType() == Node.ELEMENT_NODE) { + root.appendChild(recursiveNode(childItem, document)); + } + else if (childItem.getNodeType() == Node.TEXT_NODE){ + if ( ! childItem.getNodeValue().trim().equalsIgnoreCase("")) { + root.setTextContent(childItem.getNodeValue()); + } + } + } + return root; + } private boolean isListInSequence(String fvName) { Set numbers = sequences.keySet();