X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Tools%2FSource%2FGenBuild%2Forg%2Ftianocore%2Fbuild%2FFfsProcess.java;h=15f975901b73c2c5d9630e8f5582432bef633e57;hp=02eca2abef22f0b333ac1ca6e8c21cce88334d5a;hb=391dbbb1c00daefe78e7e44499d048943ca866ae;hpb=a29c47e01d9689fad735bbeccfaef67676a425d1 diff --git a/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java b/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java index 02eca2abef..15f975901b 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java +++ b/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java @@ -14,13 +14,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. package org.tianocore.build; import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; import java.util.Vector; import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; @@ -32,9 +28,7 @@ import org.tianocore.build.global.SurfaceAreaQuery; import org.tianocore.build.id.FpdModuleIdentification; 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; /**

FfsProcess is a class to find the corresponding FFS layout.

@@ -163,45 +157,16 @@ public class FfsProcess { } // - // if module specify sections itself, it's okay - // otherwise find sections from WORKSPACE default setting with - // ComponentType + // If FfsFormatKey is not null, report exception and fail build + // Otherwise report warning message // - if (ffs == null) { - File file = new File(project.getProperty("COMMON_FILE")); - // - // if common file is not existed, just return - // - if (!file.exists()) { - return false; - } - DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance(); - try { - DocumentBuilder dombuilder = domfac.newDocumentBuilder(); - InputStream is = new FileInputStream(file); - Document doc = dombuilder.parse(is); - Element root = doc.getDocumentElement(); - NodeList items = root.getChildNodes(); - for (int i = 0; i < items.getLength(); i++) { - Node node = items.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = node.getNodeName(); - if (nodeName.equalsIgnoreCase("Ffs")) { - NamedNodeMap attr = node.getAttributes(); - Node type = attr.getNamedItem("type"); - if (type != null) { - if (isMatch(type.getTextContent(), buildType)) { - ffs = node; - return true; - } - } - } - } - } - } catch (Exception e) { - throw new BuildException("Parse COMMON_FILE [" + file.getPath() + "] error!\n" + e.getMessage()); + if (buildType == null) { + System.out.println("Warning: this module doesn't specify a FfsFormatKey. "); } + else { + throw new BuildException("Can't find the FfsFormatKey [" + buildType + "] attribute in the FPD file!"); } + if (ffs == null) { return false; } else { @@ -277,7 +242,7 @@ public class FfsProcess { outofdateEle.appendChild(sourceEle); Element targetEle = document.createElement("targetfiles"); Element fileEle = document.createElement("file"); - fileEle.setAttribute("name", "${BIN_DIR}\\" + targetFilename); + fileEle.setAttribute("name", "${BIN_DIR}" + File.separatorChar + targetFilename); targetEle.appendChild(fileEle); outofdateEle.appendChild(targetEle); Element sequentialEle = document.createElement("sequential"); @@ -349,7 +314,7 @@ public class FfsProcess { // outputPath = "${DEST_DIR_OUTPUT}"> // ele = doc.createElement("tool"); - ele.setAttribute("toolName", "${WORKSPACE_DIR}" + File.separatorChar + "Tools" + File.separatorChar + "Bin" + ele.setAttribute("toolName", "${WORKSPACE_DIR}" + File.separatorChar + "Tools" + File.separatorChar + "bin" + File.separatorChar + "GenCRC32Section"); ele.setAttribute("outputPath", "${DEST_DIR_OUTPUT}"); } @@ -380,20 +345,55 @@ public class FfsProcess { **/ private void dealSection(int mode, Document doc, Element root, XmlCursor cursor, Vector list) { String type = cursor.getAttributeText(new QName("SectionType")); - list.addElement(type); + + // + // Judge if file is specified? Yes, just use the file, else call Build Macro + // If fileName is null, means without FileNames specify in FPD file + // + String fileName = null; + cursor.push(); + if (cursor.toFirstChild()) { + do { + if (cursor.getName().getLocalPart().equalsIgnoreCase("Filenames")) { + cursor.push(); + if (cursor.toFirstChild()) { + do { + if (cursor.getName().getLocalPart().equalsIgnoreCase("Filename")) { + fileName = cursor.getTextValue(); + } + } while (cursor.toNextSibling()); + } + cursor.pop(); + } + } while (cursor.toNextSibling()); + } + + cursor.pop(); + + if (fileName == null) { + list.addElement(type); + } if (mode == MODE_GUID_DEFINED) { // // // Element ele = doc.createElement("input"); - ele.setAttribute("file", "${DEST_DIR_OUTPUT}" + File.separatorChar + basename + getSectionExt(type)); + if (fileName == null) { + ele.setAttribute("file", "${DEST_DIR_OUTPUT}" + File.separatorChar + basename + getSectionExt(type)); + } else { + ele.setAttribute("file", "${PLATFORM_DIR}" + File.separatorChar + fileName); + } root.appendChild(ele); } else { // // // Element ele = doc.createElement("sectFile"); - ele.setAttribute("fileName", "${DEST_DIR_OUTPUT}" + File.separatorChar + basename + getSectionExt(type)); + if (fileName == null) { + ele.setAttribute("fileName", "${DEST_DIR_OUTPUT}" + File.separatorChar + basename + getSectionExt(type)); + } else { + ele.setAttribute("fileName", "${PLATFORM_DIR}" + File.separatorChar + fileName); + } root.appendChild(ele); } }