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);
}
}