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 in COMMON_FILE if it
-      does not specify in module's surface area. 
+      Find the corresponding FFS layout in FPD. 
       
       @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];
         }
         Vector sectionList = 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;