X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Tools%2FSource%2FGenBuild%2Forg%2Ftianocore%2Fbuild%2FFfsProcess.java;h=702c28fee765b2dbcf4bd7a94214ef2802a8d4a5;hp=5541be4b94af66d983d97e21a69be32f2adbbd83;hb=2619585ad0a13a369f3983f9c2d85b25778e4f30;hpb=8a9783c1f3f75ec5cd6e869f812e62fb5bcf1406 diff --git a/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java b/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java index 5541be4b94..702c28fee7 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java +++ b/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java @@ -21,20 +21,19 @@ import javax.xml.namespace.QName; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.xmlbeans.XmlCursor; -import org.apache.xmlbeans.XmlObject; import org.tianocore.BuildOptionsDocument; import org.tianocore.build.global.GlobalData; import org.tianocore.build.global.SurfaceAreaQuery; import org.tianocore.build.id.FpdModuleIdentification; +import org.tianocore.common.definitions.EdkDefinitions; +import org.tianocore.common.logger.EdkLog; import org.w3c.dom.Document; import org.w3c.dom.Element; -import org.w3c.dom.Node; /**
FfsProcess
is a class to find the corresponding FFS layout.
Property COMMON_FILE
specified which file to search. The element
- in COMMON_FILE
is like following:
The FFS Layout is like following:
<Ffs type="APPLICATION"> @@ -54,11 +53,6 @@ import org.w3c.dom.Node; **/ public class FfsProcess { - /// - /// Xml Document Node for corresponding FFS layout - /// - private Node ffs; - private BuildOptionsDocument.BuildOptions.Ffs ffsXmlObject; /// @@ -89,19 +83,7 @@ public class FfsProcess { /// /// mapping from section type to section output file extension /// - public static final String[][] sectionExt = { { "EFI_SECTION_FREEFORM_SUBTYPE_GUID", ".sec" }, - { "EFI_SECTION_VERSION", ".ver" }, - { "EFI_SECTION_USER_INTERFACE", ".ui" }, - { "EFI_SECTION_DXE_DEPEX", ".dpx" }, - { "EFI_SECTION_PEI_DEPEX", ".dpx" }, - { "EFI_SECTION_PE32", ".pe32" }, - { "EFI_SECTION_PIC", ".pic" }, - { "EFI_SECTION_TE", ".tes" }, - { "EFI_SECTION_RAW", ".sec" }, - { "EFI_SECTION_COMPRESSION", ".sec" }, - { "EFI_SECTION_GUID_DEFINED", ".sec" }, - { "EFI_SECTION_COMPATIBILITY16", ".sec" }, - { "EFI_SECTION_FIRMWARE_VOLUME_IMAGE", ".sec" } }; + public static final String[][] sectionExt = EdkDefinitions.SectionTypeExtensions; /** search in the type, if componentType is listed in type, return true; @@ -122,33 +104,20 @@ public class FfsProcess { } /** - Find the corresponding FFS layout inCOMMON_FILE
if it - does not specify in module's surface area. + Find the corresponding FFS layout inFPD
. @param buildType Current module's component type @param project Ant project @return whether find the corresponding FFS layout @throws BuildException - If specified COMMON_FILE XML file is not valide. + If can't find FFS Layout in FPD. **/ public boolean initSections(String buildType, Project project, FpdModuleIdentification fpdModuleId) throws BuildException { // - // Firstly, try to find in ModuleSA - // -// BuildOptionsDocument.BuildOptions.Ffs[] ffsArray = SurfaceAreaQuery.getModuleFfs(); -// for (int i = 0; i < ffsArray.length; i++) { -// if (isMatch(ffsArray[i].getFfsKey(), buildType)) { -// ffsXmlObject = ffsArray[i]; -// return true; -// } -// } - + // Try to find Ffs layout from FPD file // - // secondly, try to sections defined in PLATFORM level - // - SurfaceAreaQuery.push(GlobalData.getFpdBuildOptions()); - BuildOptionsDocument.BuildOptions.Ffs[] ffsArray = SurfaceAreaQuery.getFpdFfs(); - SurfaceAreaQuery.pop(); + SurfaceAreaQuery saq = new SurfaceAreaQuery(GlobalData.getFpdBuildOptionsMap()); + BuildOptionsDocument.BuildOptions.Ffs[] ffsArray = saq.getFpdFfs(); for (int i = 0; i < ffsArray.length; i++) { if (isMatch(ffsArray[i].getFfsKey(), buildType)) { ffsXmlObject = ffsArray[i]; @@ -161,17 +130,12 @@ public class FfsProcess { // Otherwise report warning message // if (buildType == null) { - System.out.println("Warning: this module doesn't specify a FfsFormatKey. "); - } - else { - throw new BuildException("Can't find FfsFormatKey [" + buildType + "] in FPD file. "); - } - - if (ffs == null) { - return false; + EdkLog.log(EdkLog.EDK_WARNING, "Warning: this module doesn't specify a FfsFormatKey. "); } else { - return true; + throw new BuildException("Can't find the FfsFormatKey [" + buildType + "] attribute in the FPD file!"); } + + return false; } /** @@ -185,43 +149,36 @@ public class FfsProcess { **/ public String[] getGenSectionElements(Document document, String basename, String guid, String targetFilename) { this.basename = basename; - if (ffs == null && ffsXmlObject == null) { + if (ffsXmlObject == null) { return new String[0]; } VectorsectionList = new Vector (); XmlCursor cursor = null; try { - if (ffsXmlObject == null) { - cursor = XmlObject.Factory.parse(ffs).newCursor(); - } - else { - cursor = ffsXmlObject.newCursor(); - } + cursor = ffsXmlObject.newCursor(); } catch (Exception e) { return null; } int mode = MODE_NONE; - Element root = document.createElement("genffsfile"); - root.setAttribute("outputDir", "${BIN_DIR}"); - root.setAttribute("moduleType", "${MODULE_TYPE}"); - root.setAttribute("BaseName", basename); - root.setAttribute("fileGuid", guid); - if (ffsXmlObject == null) { - cursor.toFirstChild(); - } + Element genffsfileEle = document.createElement("genffsfile"); + genffsfileEle.setAttribute("outputDir", "${BIN_DIR}"); + genffsfileEle.setAttribute("moduleType", "${MODULE_TYPE}"); + genffsfileEle.setAttribute("BaseName", basename); + genffsfileEle.setAttribute("fileGuid", guid); + if (cursor.toFirstChild()) { do { if (cursor.getName().getLocalPart().equalsIgnoreCase("Attribute")) { String name = cursor.getAttributeText(new QName("Name")); String value = cursor.getAttributeText(new QName("Value")); - root.setAttribute(changeAttributeName(name), value); + genffsfileEle.setAttribute(changeAttributeName(name), value); } else if (cursor.getName().getLocalPart().equalsIgnoreCase("Section")) { cursor.push(); - dealSection(mode, document, root, cursor, sectionList); + dealSection(mode, document, genffsfileEle, cursor, sectionList); cursor.pop(); } else if (cursor.getName().getLocalPart().equalsIgnoreCase("Sections")) { cursor.push(); - dealSections(mode, document, root, cursor, sectionList); + dealSections(mode, document, genffsfileEle, cursor, sectionList); cursor.pop(); } } while (cursor.toNextSibling()); @@ -246,7 +203,7 @@ public class FfsProcess { targetEle.appendChild(fileEle); outofdateEle.appendChild(targetEle); Element sequentialEle = document.createElement("sequential"); - sequentialEle.appendChild(root); + sequentialEle.appendChild(genffsfileEle); outofdateEle.appendChild(sequentialEle); ffsNode = outofdateEle; return result;