summaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorwuyizhong <wuyizhong@6f19259b-4bc3-4df7-8a09-765794883524>2006-06-30 20:10:58 +0000
committerwuyizhong <wuyizhong@6f19259b-4bc3-4df7-8a09-765794883524>2006-06-30 20:10:58 +0000
commit6ec40aef55a061d81507bd3f747297de4b35d91e (patch)
tree155a25721bbd5e55481d71516290ff2dd59224b4 /Tools
parent85c483cb181fd5af8e133d7316a649b43a7211fb (diff)
downloadedk2-platforms-6ec40aef55a061d81507bd3f747297de4b35d91e.tar.xz
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@696 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'Tools')
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/tools/DefaultBuildFileGenerator.java313
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/tools/ModuleItem.java88
-rw-r--r--Tools/Source/GenBuild/org/tianocore/build/tools/PackageItem.java60
3 files changed, 461 insertions, 0 deletions
diff --git a/Tools/Source/GenBuild/org/tianocore/build/tools/DefaultBuildFileGenerator.java b/Tools/Source/GenBuild/org/tianocore/build/tools/DefaultBuildFileGenerator.java
new file mode 100644
index 0000000000..422d5038c2
--- /dev/null
+++ b/Tools/Source/GenBuild/org/tianocore/build/tools/DefaultBuildFileGenerator.java
@@ -0,0 +1,313 @@
+/** @file
+ This file is an ANT task.
+
+ LibBuildFileGenerator task is used to generate module's build.xml file.
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+package org.tianocore.build.tools;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.tianocore.build.global.GlobalData;
+import org.tianocore.build.id.ModuleIdentification;
+import org.tianocore.build.id.PackageIdentification;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class DefaultBuildFileGenerator extends Task {
+
+ private Set<ModuleIdentification> modules = new LinkedHashSet<ModuleIdentification>();
+
+ private Set<PackageIdentification> packages = new LinkedHashSet<PackageIdentification>();
+
+ //
+ // <DefaultBuildFileGenerator mode="WORKSPACE | PACKAGE | MODULE">
+ // <PackageItem packageName="" packageGuid="" packageVersion="" />
+ // <ModuleItem moduleName="HelloWorld" moduleGuid="" moduleVersion="" packageName="" packageGuid="" packageVersion="" />
+ // </DefaultBuildFileGenerator>
+ //
+ private String mode = "MODULE";
+
+ private String license = " Copyright (c) 2006, Intel Corporation \n"
+ + "All rights reserved. This program and the accompanying materials \n"
+ + "are licensed and made available under the terms and conditions of the BSD License \n"
+ + "which accompanies this distribution. The full text of the license may be found at \n"
+ + "http://opensource.org/licenses/bsd-license.php \n"
+ + "\n"
+ + "THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN \"AS IS\" BASIS, \n"
+ + "WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.";
+
+ /**
+ Public construct method. It is necessary for ANT task.
+ **/
+ public DefaultBuildFileGenerator () {
+ }
+
+ public void execute() throws BuildException {
+ //
+ // Global Data initialization
+ //
+ GlobalData.initInfo("Tools" + File.separatorChar + "Conf" + File.separatorChar + "FrameworkDatabase.db",
+ getProject().getProperty("WORKSPACE_DIR"), "tools_def.txt");
+
+ if (mode.equalsIgnoreCase("WORKSPACE")) {
+ modules.clear();
+ packages = GlobalData.getPackageList();
+ }
+ else if (mode.equalsIgnoreCase("PACKAGE")) {
+ modules.clear();
+ }
+ if (mode.equalsIgnoreCase("WORKSPACE") || mode.equalsIgnoreCase("PACKAGE")) {
+ Iterator iter = packages.iterator();
+ while (iter.hasNext()) {
+ PackageIdentification packageId = (PackageIdentification)iter.next();
+ modules.addAll(GlobalData.getModules(packageId));
+ }
+ }
+
+ Iterator iter = modules.iterator();
+ while (iter.hasNext()) {
+ ModuleIdentification moduleId = (ModuleIdentification)iter.next();
+ genBuildFile (moduleId);
+ }
+ }
+
+ private void genBuildFile(ModuleIdentification moduleId) {
+ DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
+ try {
+ DocumentBuilder dombuilder = domfac.newDocumentBuilder();
+ Document document = dombuilder.newDocument();
+ //
+ // create root element and its attributes
+ //
+ document.appendChild(document.createComment(license));
+ Element root = document.createElement("project");
+ root.setAttribute("default", "all");
+ root.setAttribute("basedir", ".");
+ root.setAttribute("name", moduleId.getName());
+
+ //
+ // element for External ANT tasks
+ //
+ root.appendChild(document.createComment("Apply external ANT tasks"));
+ Element ele = document.createElement("taskdef");
+ ele.setAttribute("resource", "GenBuild.tasks");
+ root.appendChild(ele);
+
+ //
+ // <taskdef resource="net/sf/antcontrib/antlib.xml" />
+ //
+ ele = document.createElement("taskdef");
+ ele.setAttribute("resource", "net/sf/antcontrib/antlib.xml");
+ root.appendChild(ele);
+
+ ele = document.createElement("property");
+ ele.setAttribute("environment", "env");
+ root.appendChild(ele);
+
+ ele = document.createElement("property");
+ ele.setAttribute("name", "WORKSPACE_DIR");
+ ele.setAttribute("value", "${env.WORKSPACE}");
+ root.appendChild(ele);
+
+ ele = document.createElement("property");
+ ele.setAttribute("name", "MSA_FILENAME");
+ ele.setAttribute("value", GlobalData.getMsaFile(moduleId).getName());
+ root.appendChild(ele);
+
+ ele = document.createElement("property");
+ ele.setAttribute("name", "BASE_NAME");
+ ele.setAttribute("value", moduleId.getName());
+ root.appendChild(ele);
+
+ //
+ // Don't change it!!
+ //
+ ele = document.createElement("import");
+ ele.setAttribute("file", "${WORKSPACE_DIR}/Tools/Conf/BuildMacro.xml");
+ root.appendChild(ele);
+
+ //
+ // <target name="all">
+ // <GenBuild msaFile="HelloWorld.msa"/>
+ // </target>
+ //
+ Element targetEle = document.createElement("target");
+ targetEle.setAttribute("name", "all");
+
+ ele = document.createElement("GenBuild");
+ ele.setAttribute("msaFile", "${MSA_FILENAME}");
+ targetEle.appendChild(ele);
+
+ root.appendChild(targetEle);
+
+ //
+ // <target name="clean">
+ // <OutputDirSetup msaFile="HelloWorld.msa"/>
+ // <if>
+ // <available file="${DEST_DIR_OUTPUT}/HelloWorld_build.xml"/>
+ // <then>
+ // <ant antfile="${DEST_DIR_OUTPUT}/HelloWorld_build.xml" target="clean"/>
+ // </then>
+ // </if>
+ // <delete dir="${DEST_DIR_OUTPUT}" excludes="*.xml"/>
+ // </target>
+ //
+ targetEle = document.createElement("target");
+ targetEle.setAttribute("name", "clean");
+
+ ele = document.createElement("OutputDirSetup");
+ ele.setAttribute("msaFile", "${MSA_FILENAME}");
+ targetEle.appendChild(ele);
+
+ ele = document.createElement("if");
+
+ Element availableEle = document.createElement("available");
+ availableEle.setAttribute("file", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
+ ele.appendChild(availableEle);
+
+ Element thenEle = document.createElement("then");
+ Element antEle = document.createElement("ant");
+ antEle.setAttribute("antfile", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
+ antEle.setAttribute("target", "clean");
+ thenEle.appendChild(antEle);
+ ele.appendChild(thenEle);
+ targetEle.appendChild(ele);
+
+ ele = document.createElement("delete");
+ ele.setAttribute("dir", "${DEST_DIR_OUTPUT}");
+ ele.setAttribute("excludes", "*.xml");
+ targetEle.appendChild(ele);
+
+ root.appendChild(targetEle);
+
+ //
+ // <target name="cleanall">
+ // <OutputDirSetup msaFile="HelloWorld.msa"/>
+ // <if>
+ // <available file="${DEST_DIR_OUTPUT}/HelloWorld_build.xml"/>
+ // <then>
+ // <ant antfile="${DEST_DIR_OUTPUT}/HelloWorld_build.xml" target="cleanall"/>
+ // </then>
+ // </if>
+ // <delete dir="${DEST_DIR_OUTPUT}"/>
+ // <delete dir="${DEST_DIR_DEBUG}"/>
+ // <delete>
+ // <fileset dir="${BIN_DIR}" includes="**HelloWorld*"/>
+ // </delete>
+ // </target>
+ //
+ targetEle = document.createElement("target");
+ targetEle.setAttribute("name", "cleanall");
+
+ ele = document.createElement("OutputDirSetup");
+ ele.setAttribute("msaFile", "${MSA_FILENAME}");
+ targetEle.appendChild(ele);
+
+ ele = document.createElement("if");
+
+ availableEle = document.createElement("available");
+ availableEle.setAttribute("file", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
+ ele.appendChild(availableEle);
+
+ thenEle = document.createElement("then");
+ antEle = document.createElement("ant");
+ antEle.setAttribute("antfile", "${DEST_DIR_OUTPUT}/${BASE_NAME}_build.xml");
+ antEle.setAttribute("target", "cleanall");
+ thenEle.appendChild(antEle);
+ ele.appendChild(thenEle);
+ targetEle.appendChild(ele);
+
+ ele = document.createElement("delete");
+ ele.setAttribute("dir", "${DEST_DIR_OUTPUT}");
+ targetEle.appendChild(ele);
+
+ ele = document.createElement("delete");
+ ele.setAttribute("dir", "${DEST_DIR_DEBUG}");
+ targetEle.appendChild(ele);
+
+ ele = document.createElement("delete");
+
+ Element filesetEle = document.createElement("fileset");
+ filesetEle.setAttribute("dir", "${BIN_DIR}");
+ filesetEle.setAttribute("includes", "**${BASE_NAME}*");
+ ele.appendChild(filesetEle);
+
+ targetEle.appendChild(ele);
+
+ root.appendChild(targetEle);
+
+
+ document.appendChild(root);
+
+ //
+ // Prepare the DOM document for writing
+ //
+ Source source = new DOMSource(document);
+
+ //
+ // Prepare the output file
+ //
+ String filename = GlobalData.getMsaFile(moduleId).getParent() + File.separatorChar + "build.xml";
+ File file = new File(getProject().replaceProperties(filename));
+
+ GlobalData.log.info("File generating - " + filename);
+ //
+ // generate all directory path
+ //
+ Result result = new StreamResult(file);
+
+ //
+ // Write the DOM document to the file
+ //
+ Transformer xformer = TransformerFactory.newInstance()
+ .newTransformer();
+ xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+ xformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ xformer.transform(source, result);
+ } catch (Exception ex) {
+ System.out.println("##" + ex);
+ }
+
+ }
+
+ public void addConfiguredModuleItem(ModuleItem moduleItem) {
+ PackageIdentification packageId = new PackageIdentification(moduleItem.getPackageName(), moduleItem.getPackageGuid(), moduleItem.getPackageVersion());
+ ModuleIdentification moduleId = new ModuleIdentification(moduleItem.getModuleName(), moduleItem.getModuleGuid(), moduleItem.getModuleVersion());
+ moduleId.setPackage(packageId);
+ modules.add(moduleId);
+ }
+
+ public void addConfiguredPackageItem(PackageItem packageItem) {
+ PackageIdentification packageId = new PackageIdentification(packageItem.getPackageName(), packageItem.getPackageGuid(), packageItem.getPackageVersion());
+ packages.add(packageId);
+ }
+
+ public void setMode(String mode) {
+ this.mode = mode;
+ }
+}
diff --git a/Tools/Source/GenBuild/org/tianocore/build/tools/ModuleItem.java b/Tools/Source/GenBuild/org/tianocore/build/tools/ModuleItem.java
new file mode 100644
index 0000000000..8fa8d838d1
--- /dev/null
+++ b/Tools/Source/GenBuild/org/tianocore/build/tools/ModuleItem.java
@@ -0,0 +1,88 @@
+/** @file
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+package org.tianocore.build.tools;
+
+import org.apache.tools.ant.BuildException;
+
+public class ModuleItem {
+
+ private String moduleName;
+
+ private String moduleGuid;
+
+ private String moduleVersion;
+
+ private String packageName;
+
+ private String packageGuid;
+
+ private String packageVersion;
+
+ public ModuleItem(){
+
+ }
+
+ public void execute() throws BuildException {
+
+ }
+
+ public String getModuleGuid() {
+ return moduleGuid;
+ }
+
+ public void setModuleGuid(String moduleGuid) {
+ this.moduleGuid = moduleGuid;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public String getModuleVersion() {
+ return moduleVersion;
+ }
+
+ public void setModuleVersion(String moduleVersion) {
+ this.moduleVersion = moduleVersion;
+ }
+
+ public String getPackageGuid() {
+ return packageGuid;
+ }
+
+ public void setPackageGuid(String packageGuid) {
+ this.packageGuid = packageGuid;
+ }
+
+ public String getPackageName() {
+ return packageName;
+ }
+
+ public void setPackageName(String packageName) {
+ this.packageName = packageName;
+ }
+
+ public String getPackageVersion() {
+ return packageVersion;
+ }
+
+ public void setPackageVersion(String packageVersion) {
+ this.packageVersion = packageVersion;
+ }
+
+
+}
diff --git a/Tools/Source/GenBuild/org/tianocore/build/tools/PackageItem.java b/Tools/Source/GenBuild/org/tianocore/build/tools/PackageItem.java
new file mode 100644
index 0000000000..af824b111c
--- /dev/null
+++ b/Tools/Source/GenBuild/org/tianocore/build/tools/PackageItem.java
@@ -0,0 +1,60 @@
+/** @file
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+package org.tianocore.build.tools;
+
+import org.apache.tools.ant.BuildException;
+import org.tianocore.build.global.SurfaceAreaQuery;
+
+public class PackageItem {
+
+ private String packageName;
+
+ private String packageGuid;
+
+ private String packageVersion;
+
+ public PackageItem(){
+
+ }
+
+ public void execute() throws BuildException {
+
+ }
+
+ public String toString(){
+ return "[" + packageName + packageGuid + "]";
+ }
+ public String getPackageGuid() {
+ return packageGuid;
+ }
+
+ public void setPackageGuid(String packageGuid) {
+ this.packageGuid = packageGuid;
+ }
+
+ public String getPackageName() {
+ return packageName;
+ }
+
+ public void setPackageName(String packageName) {
+ this.packageName = packageName;
+ }
+
+ public String getPackageVersion() {
+ return packageVersion;
+ }
+
+ public void setPackageVersion(String packageVersion) {
+ this.packageVersion = packageVersion;
+ }
+}