import org.apache.tools.ant.Project;\r
import org.apache.xmlbeans.XmlCursor;\r
import org.apache.xmlbeans.XmlObject;\r
+import org.tianocore.BuildOptionsDocument;\r
+import org.tianocore.build.global.GlobalData;\r
+import org.tianocore.build.global.SurfaceAreaQuery;\r
+import org.tianocore.build.id.FpdModuleIdentification;\r
import org.w3c.dom.Document;\r
import org.w3c.dom.Element;\r
import org.w3c.dom.NamedNodeMap;\r
/// Xml Document Node for corresponding FFS layout\r
///\r
private Node ffs;\r
+ \r
+ private BuildOptionsDocument.BuildOptions.Ffs ffsXmlObject;\r
\r
///\r
/// ANT script to call GenFfs\r
@throws BuildException\r
If specified COMMON_FILE XML file is not valide.\r
**/\r
- public boolean initSections(String buildType, Project project) throws BuildException {\r
+ public boolean initSections(String buildType, Project project, FpdModuleIdentification fpdModuleId) throws BuildException {\r
//\r
- // first try to sections defined in PLATFORM level\r
+ // Firstly, try to find in ModuleSA\r
//\r
-\r
+// BuildOptionsDocument.BuildOptions.Ffs[] ffsArray = SurfaceAreaQuery.getModuleFfs();\r
+// for (int i = 0; i < ffsArray.length; i++) {\r
+// if (isMatch(ffsArray[i].getFfsKey(), buildType)) {\r
+// ffsXmlObject = ffsArray[i];\r
+// return true;\r
+// }\r
+// }\r
+ \r
+ //\r
+ // secondly, try to sections defined in PLATFORM level\r
+ //\r
+ SurfaceAreaQuery.push(GlobalData.getFpdBuildOptions());\r
+ BuildOptionsDocument.BuildOptions.Ffs[] ffsArray = SurfaceAreaQuery.getFpdFfs();\r
+ SurfaceAreaQuery.pop();\r
+ for (int i = 0; i < ffsArray.length; i++) {\r
+ if (isMatch(ffsArray[i].getFfsKey(), buildType)) {\r
+ ffsXmlObject = ffsArray[i];\r
+ return true;\r
+ }\r
+ }\r
+ \r
//\r
// if module specify sections itself, it's okay\r
// otherwise find sections from WORKSPACE default setting with\r
**/\r
public String[] getGenSectionElements(Document document, String basename, String guid, String targetFilename) {\r
this.basename = basename;\r
- if (ffs == null) {\r
+ if (ffs == null && ffsXmlObject == null) {\r
return new String[0];\r
}\r
Vector<String> sectionList = new Vector<String>();\r
XmlCursor cursor = null;\r
try {\r
- cursor = XmlObject.Factory.parse(ffs).newCursor();\r
+ if (ffsXmlObject == null) {\r
+ cursor = XmlObject.Factory.parse(ffs).newCursor();\r
+ }\r
+ else {\r
+ cursor = ffsXmlObject.newCursor();\r
+ }\r
} catch (Exception e) {\r
return null;\r
}\r
int mode = MODE_NONE;\r
Element root = document.createElement("genffsfile");\r
root.setAttribute("outputDir", "${BIN_DIR}");\r
+ root.setAttribute("moduleType", "${MODULE_TYPE}");\r
root.setAttribute("BaseName", basename);\r
root.setAttribute("fileGuid", guid);\r
- cursor.toFirstChild();\r
+ if (ffsXmlObject == null) {\r
+ cursor.toFirstChild();\r
+ }\r
if (cursor.toFirstChild()) {\r
do {\r
if (cursor.getName().getLocalPart().equalsIgnoreCase("Attribute")) {\r
// outputPath = "${DEST_DIR_OUTPUT}">\r
//\r
ele = doc.createElement("tool");\r
- ele.setAttribute("toolName", "${WORKSPACE_DIR}" + File.separatorChar + "Tools" + File.separatorChar + "bin"\r
+ ele.setAttribute("toolName", "${WORKSPACE_DIR}" + File.separatorChar + "Tools" + File.separatorChar + "Bin"\r
+ File.separatorChar + "GenCRC32Section");\r
ele.setAttribute("outputPath", "${DEST_DIR_OUTPUT}");\r
}\r
}\r
\r
/**\r
- Get the corresponding section file suffix.\r
+ Get the corresponding section file suffix.\r
\r
@param type Section type\r
@return Corresponding section file extension\r