Remove some unused code and adjust some code format. Modules build with FPD sequence. Delete three unused Java files.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1179 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
wuyizhong 2006-08-03 02:55:45 +00:00
parent 802e005517
commit 01413f0ccb
14 changed files with 376 additions and 877 deletions

View File

@ -3,9 +3,6 @@ bl = org.tianocore.build.global.VariableTask
GenBuild = org.tianocore.build.GenBuildTask
FrameworkBuild = org.tianocore.build.FrameworkBuildTask
OnDependency = org.tianocore.build.global.OnDependency
ToolChainSetup = org.tianocore.build.toolchain.ToolChainTask
OutputDirSetup = org.tianocore.build.OutputDirSetup
sourcefiles = org.tianocore.build.global.DpFileList
targetfiles = org.tianocore.build.global.DpFileList
file = org.tianocore.build.global.DpFile
DefaultBuildFileGenerator = org.tianocore.build.tools.DefaultBuildFileGenerator

View File

@ -16,7 +16,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
package org.tianocore.build;
import java.io.File;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashSet;
@ -719,60 +718,6 @@ public class GenBuildTask extends Ant {
return result;
}
/**
Generate the flags string with original format. The format is defined by
Java Regulation Expression "[^\\\\]?(\".*?[^\\\\]\")[ \t,]+". </p>
<p>For example: </p>
<pre>
"/nologo", "/W3", "/WX"
"/C", "/DSTRING_DEFINES_FILE=\"BdsStrDefs.h\""
</pre>
@param add the add flags set
@param sub the sub flags set
@return flags with original format
**/
private String getRawFlags(Set<String> add, Set<String> sub) {
String result = null;
add.removeAll(sub);
Iterator iter = add.iterator();
while (iter.hasNext()) {
String str = (String) iter.next();
result += "\"" + str.substring(1, str.length() - 1) + "\", ";
}
return result;
}
private String parseOptionString(String optionString, Set<String> addSet, Set<String> subSet) {
boolean overrideOption = false;
Pattern pattern = Pattern.compile("ADD\\.\\[(.+)\\]");
Matcher matcher = pattern.matcher(optionString);
while (matcher.find()) {
overrideOption = true;
String addOption = optionString.substring(matcher.start(1), matcher.end(1)).trim();
putFlagsToSet(addSet, addOption);
}
pattern = Pattern.compile("SUB\\.\\[(.+)\\]");
matcher = pattern.matcher(optionString);
while (matcher.find()) {
overrideOption = true;
String subOption = optionString.substring(matcher.start(1), matcher.end(1)).trim();
putFlagsToSet(subSet, subOption);
}
if (overrideOption == true) {
return null;
}
return optionString;
}
private void pushProperties() {
backupPropertiesStack.push(getProject().getProperties());
}

View File

@ -1,270 +0,0 @@
package org.tianocore.build;
import java.io.File;
import java.util.Map;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.xmlbeans.XmlObject;
import org.tianocore.build.fpd.FpdParserTask;
import org.tianocore.build.global.GlobalData;
import org.tianocore.build.global.SurfaceAreaQuery;
import org.tianocore.build.id.ModuleIdentification;
import org.tianocore.build.id.PackageIdentification;
import org.tianocore.build.id.PlatformIdentification;
public class OutputDirSetup extends Task {
///
/// Module surface area file.
///
File msaFile;
///
/// Module's Identification.
///
private ModuleIdentification moduleId;
///
/// Module's component type, such as SEC, LIBRARY, BS_DRIVER and so on.
///
private String componentType;
private boolean isSingleModuleBuild = false;
// private ToolChainFactory toolChainFactory;
/**
Public construct method. It is necessary for ANT task.
**/
public OutputDirSetup() {
}
public void execute() throws BuildException {
//
// Global Data initialization
//
// GlobalData.initInfo("Tools" + File.separatorChar + "Conf" + File.separatorChar + "FrameworkDatabase.db",
// getProject().getProperty("WORKSPACE_DIR"));
//
// Parse MSA and get the basic information
// Including BaseName, GUID, Version, ComponentType and SupportedArchs
//
Map<String, XmlObject> doc = GlobalData.getNativeMsa(msaFile);
SurfaceAreaQuery.setDoc(doc);
//
// String[]: {BaseName, ModuleType, ComponentType, Guid, Version}
//
moduleId = SurfaceAreaQuery.getMsaHeader();
// REMOVE!!! TBD
componentType = "APPLICATION";
//
// Judge whether it is single module build or not
//
if (isSingleModuleBuild) {
//
// Single Module build
//
prepareSingleModuleBuild();
}
else {
//
// Platform build
//
String filename = getProject().getProperty("PLATFORM_FILE");
PlatformIdentification platformId = GlobalData.getPlatform(filename);
getProject().setProperty("PLATFORM_DIR", platformId.getFpdFile().getParent().replaceAll("(\\\\)", "/"));
getProject().setProperty("PLATFORM_RELATIVE_DIR", platformId.getPlatformRelativeDir().replaceAll("(\\\\)", "/"));
String packageName = getProject().getProperty("PACKAGE");
String packageGuid = getProject().getProperty("PACKAGE_GUID");
String packageVersion = getProject().getProperty("PACKAGE_VERSION");
PackageIdentification packageId = new PackageIdentification(packageName, packageGuid, packageVersion);
moduleId.setPackage(packageId);
}
//
// Tools Definition file parse
//
parseToolsDefinitionFile();
//
// For Every TOOLCHAIN, TARGET, ARCH
//
// String[] targetList = GlobalData.getTargets();
// for (int i = 0; i < targetList.length; i ++){
// //
// // Prepare for target related common properties
// // TARGET
// //
// getProject().setProperty("TARGET", targetList[i]);
// String[] toolchainList = GlobalData.getToolChains();
// for(int j = 0; j < toolchainList.length; j ++){
// //
// // Prepare for toolchain related common properties
// // TOOLCHAIN
// //
// getProject().setProperty("TOOLCHAIN", toolchainList[j]);
// //
// // If single module : intersection MSA supported ARCHs and tools def!!
// // else, get arch from pass down
// //
// String[] archList = GlobalData.getArchs();
// for (int k = 0; k < archList.length; k++) {
//
// FpdModuleIdentification fpdModuleId = new FpdModuleIdentification(moduleId, archList[k]);
//
// SurfaceAreaQuery.setDoc(GlobalData.getDoc(fpdModuleId));
//
// //
// // Prepare for all other common properties
// // PACKAGE, PACKAGE_GUID, PACKAGE_VERSION, PACKAGE_DIR, PACKAGE_RELATIVE_DIR
// // MODULE or BASE_NAME, GUID or FILE_GUID, VERSION, COMPONENT_TYPE
// // MODULE_DIR, MODULE_RELATIVE_DIR
// // SUBSYSTEM, ENTRYPOINT, EBC_TOOL_LIB_PATH
// // LIBS, OBJECTS, SDB_FILES
// //
// getProject().setProperty("ARCH", archList[k]);
// setModuleCommonProperties();
//
// //
// // String[0] is build mode. String[1] is user-defined output dir.
// //
// String buildMode = SurfaceAreaQuery.getFpdIntermediateDirectories();
// String userDefinedOutputDir = SurfaceAreaQuery.getFpdOutputDirectory();
//
// //
// // OutputManage prepare for
// // BIN_DIR, DEST_DIR_DEBUG, DEST_DIR_OUTPUT, BUILD_DIR, FV_DIR
// //
// OutputManager.getInstance().update(getProject(), userDefinedOutputDir, buildMode);
//
// }
// }
// }
}
private void prepareSingleModuleBuild(){
//
// Find out the package which the module belongs to
// TBD: Enhance it!!!!
//
PackageIdentification packageId = GlobalData.getPackageForModule(moduleId);
moduleId.setPackage(packageId);
//
// Read ACTIVE_PLATFORM's FPD file (Call FpdParserTask's method)
//
String filename = getProject().getProperty("PLATFORM_FILE");
PlatformIdentification platformId = GlobalData.getPlatform(filename);
//
// Read FPD file
//
FpdParserTask fpdParser = new FpdParserTask();
fpdParser.parseFpdFile(platformId.getFpdFile());
//
// Prepare for Platform related common properties
// PLATFORM, PLATFORM_DIR, PLATFORM_RELATIVE_DIR
//
getProject().setProperty("PLATFORM", platformId.getName());
getProject().setProperty("PLATFORM_DIR", platformId.getFpdFile().getParent().replaceAll("(\\\\)", "/"));
getProject().setProperty("PLATFORM_RELATIVE_DIR", platformId.getPlatformRelativeDir().replaceAll("(\\\\)", "/"));
}
/**
**/
private void setModuleCommonProperties() {
//
// Prepare for all other common properties
// PACKAGE, PACKAGE_GUID, PACKAGE_VERSION, PACKAGE_DIR, PACKAGE_RELATIVE_DIR
//
PackageIdentification packageId = moduleId.getPackage();
getProject().setProperty("PACKAGE", packageId.getName());
getProject().setProperty("PACKAGE_GUID", packageId.getGuid());
getProject().setProperty("PACKAGE_VERSION", packageId.getVersion());
GlobalData.log.info("" + packageId);
getProject().setProperty("PACKAGE_DIR", packageId.getPackageDir().replaceAll("(\\\\)", "/"));
getProject().setProperty("PACKAGE_RELATIVE_DIR", packageId.getPackageRelativeDir().replaceAll("(\\\\)", "/"));
//
// MODULE or BASE_NAME, GUID or FILE_GUID, VERSION, COMPONENT_TYPE
// MODULE_DIR, MODULE_RELATIVE_DIR
//
getProject().setProperty("MODULE", moduleId.getName());
getProject().setProperty("BASE_NAME", moduleId.getName());
getProject().setProperty("GUID", moduleId.getGuid());
getProject().setProperty("FILE_GUID", moduleId.getGuid());
getProject().setProperty("VERSION", moduleId.getVersion());
getProject().setProperty("COMPONENT_TYPE", componentType);
getProject().setProperty("MODULE_DIR", moduleId.getMsaFile().getParent().replaceAll("(\\\\)", "/"));
getProject().setProperty("MODULE_RELATIVE_DIR", moduleId.getModuleRelativePath().replaceAll("(\\\\)", "/"));
}
/**
Method is for ANT use to initialize MSA file.
@param msaFilename MSA file name
**/
public void setMsaFile(String msaFilename) {
String moduleDir = getProject().getProperty("MODULE_DIR");
if (moduleDir == null) {
moduleDir = getProject().getBaseDir().getPath();
}
msaFile = new File(moduleDir + File.separatorChar + msaFilename);
}
/**
Compile flags setup.
<p> Take command <code>CC</code> and arch <code>IA32</code> for example,
Those flags are from <code>ToolChainFactory</code>: </p>
<ul>
<li> IA32_CC </li>
<li> IA32_CC_STD_FLAGS </li>
<li> IA32_CC_GLOBAL_FLAGS </li>
<li> IA32_CC_GLOBAL_ADD_FLAGS </li>
<li> IA32_CC_GLOBAL_SUB_FLAGS </li>
</ul>
Those flags can user-define:
<ul>
<li> IA32_CC_PROJ_FLAGS </li>
<li> IA32_CC_PROJ_ADD_FLAGS </li>
<li> IA32_CC_PROJ_SUB_FLAGS </li>
<li> CC_PROJ_FLAGS </li>
<li> CC_PROJ_ADD_FLAGS </li>
<li> CC_PROJ_SUB_FLAGS </li>
<li> CC_FLAGS </li>
<li> IA32_CC_FLAGS </li>
</ul>
<p> The final flags is composed of STD, GLOBAL and PROJ. If CC_FLAGS or
IA32_CC_FLAGS is specified, STD, GLOBAL and PROJ will not affect. </p>
Note that the <code>ToolChainFactory</code> executes only once
during whole build process.
**/
private void parseToolsDefinitionFile() {
//
// If ToolChain has been set up before, do nothing.
// CONF dir + tools definition file name
//
String confDir = GlobalData.getWorkspacePath() + File.separatorChar + "Tools" + File.separatorChar + "Conf";
String toolsDefFilename = "tools_def.txt";
if (getProject().getProperty("env.TOOLS_DEF") != null) {
toolsDefFilename = getProject().getProperty("env.TOOLS_DEF");
}
// toolChainFactory = new ToolChainFactory(confDir, toolsDefFilename);
// toolChainFactory.setupToolChain();
}
}

View File

@ -25,7 +25,6 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.util.TreeMap;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
@ -98,11 +97,6 @@ public class FpdParserTask extends Task {
///
private Map<String, Set<FpdModuleIdentification>> fvs = new HashMap<String, Set<FpdModuleIdentification>>();
///
/// Mapping from sequence number to FV names
///
private Map<String, Set<String>> sequences = new TreeMap<String, Set<String>>();
///
/// FpdParserTask can specify some ANT properties.
///
@ -152,10 +146,6 @@ public class FpdParserTask extends Task {
//
isUnified = OutputManager.getInstance().prepareBuildDir(getProject());
//
// Generate FDF (Flash Definition File) file
//
//
// For every Target and ToolChain
//
@ -183,7 +173,7 @@ public class FpdParserTask extends Task {
//
// Gen build.xml
//
PlatformBuildFileGenerator fileGenerator = new PlatformBuildFileGenerator(getProject(), outfiles, fvs, sequences, isUnified);
PlatformBuildFileGenerator fileGenerator = new PlatformBuildFileGenerator(getProject(), outfiles, isUnified);
fileGenerator.genBuildFile();
//
@ -426,8 +416,7 @@ public class FpdParserTask extends Task {
SurfaceAreaQuery.pop();
fpdModuleId.setFvBinding(fvBinding);
String fvSequence = fpdModuleId.getSequence();
updateFvs(fvSequence, fvBinding, fpdModuleId);
updateFvs(fvBinding, fpdModuleId);
//
// Prepare for out put file name
@ -499,7 +488,7 @@ public class FpdParserTask extends Task {
@param fvName current FV name
@param moduleName current module identification
**/
private void updateFvs(String fvSequence, String fvName, FpdModuleIdentification fpdModuleId) {
private void updateFvs(String fvName, FpdModuleIdentification fpdModuleId) {
if (fvName == null || fvName.trim().length() == 0) {
fvName = "NULL";
}
@ -517,19 +506,6 @@ public class FpdParserTask extends Task {
set.add(fpdModuleId);
fvs.put(fvNameArray[i], set);
}
//
// Put fvName to corresponding fvSequence
//
if (sequences.containsKey(fvSequence)) {
Set<String> set = sequences.get(fvSequence);
set.add(fvNameArray[i]);
}
else {
Set<String> set = new LinkedHashSet<String>();
set.add(fvNameArray[i]);
sequences.put(fvSequence, set);
}
}
}

View File

@ -48,16 +48,6 @@ public class PlatformBuildFileGenerator {
///
private Map<FpdModuleIdentification, String> outfiles;
///
/// Mapping from FV name to its modules
///
private Map<String, Set<FpdModuleIdentification>> fvs;
///
/// Mapping from sequence number to FV names
///
private Map<String, Set<String>> sequences;
private boolean isUnified = true;
private Project project;
@ -68,11 +58,9 @@ public class PlatformBuildFileGenerator {
+ "Abstract:\n"
+ "Auto-generated ANT build file for building of EFI Modules/Platforms\n";
public PlatformBuildFileGenerator(Project project, Map<FpdModuleIdentification, String> outfiles, Map<String, Set<FpdModuleIdentification>> fvs, Map<String, Set<String>> sequences, boolean isUnified){
public PlatformBuildFileGenerator(Project project, Map<FpdModuleIdentification, String> outfiles, boolean isUnified){
this.project = project;
this.outfiles = outfiles;
this.fvs = fvs;
this.sequences = sequences;
this.isUnified = isUnified;
this.platformName = project.getProperty("PLATFORM");
}
@ -117,35 +105,21 @@ public class PlatformBuildFileGenerator {
ele.setAttribute("environment", "env");
root.appendChild(ele);
Set<String> sequenceKeys = sequences.keySet();
Iterator sequenceIter = sequenceKeys.iterator();
String dependsStr = "prebuild";
while (sequenceIter.hasNext()) {
String num = (String)sequenceIter.next();
if (dependsStr.length() > 0) {
dependsStr += " , ";
}
dependsStr += "modules" + num + ", fvs" + num;
}
//
// Default Target
//
root.appendChild(document.createComment("Default target"));
ele = document.createElement("target");
ele.setAttribute("name", "all");
ele.setAttribute("depends", dependsStr + ", postbuild");
ele.setAttribute("depends", "prebuild, modules, fvs, postbuild");
root.appendChild(ele);
//
// Modules and Fvs Target
//
sequenceIter = sequenceKeys.iterator();
while (sequenceIter.hasNext()) {
String num = (String)sequenceIter.next();
applyModules(document, root, num);
applyFvs(document, root, num);
}
applyModules(document, root);
applyFvs(document, root);
//
// Clean Target
@ -194,82 +168,75 @@ public class PlatformBuildFileGenerator {
}
}
private void applyModules(Document document, Node root, String num) {
private void applyModules(Document document, Node root) {
root.appendChild(document.createComment("Modules target"));
Element ele = document.createElement("target");
ele.setAttribute("name", "modules" + num);
Set<String> fvNameSet = sequences.get(num);
ele.setAttribute("name", "modules");
Iterator fvNameIter = fvNameSet.iterator();
while (fvNameIter.hasNext()) {
String fvName = (String)fvNameIter.next();
Set<FpdModuleIdentification> set = fvs.get(fvName);
Iterator iter = set.iterator();
while (iter.hasNext()) {
FpdModuleIdentification fpdModuleId = (FpdModuleIdentification) iter.next();
ModuleIdentification moduleId = fpdModuleId.getModule();
Element moduleEle = document.createElement("GenBuild");
moduleEle.setAttribute("type", "build");
//
// Inherit Properties.
//{"ARCH", "PACKAGE", "PACKAGE_GUID", "PACKAGE_VERSION", "MODULE_DIR"}
//
//
// ARCH
//
Element property = document.createElement("property");
property.setAttribute("name", "ARCH");
property.setAttribute("value", fpdModuleId.getArch());
moduleEle.appendChild(property);
Set<FpdModuleIdentification> set = outfiles.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
FpdModuleIdentification fpdModuleId = (FpdModuleIdentification) iter.next();
ModuleIdentification moduleId = fpdModuleId.getModule();
Element moduleEle = document.createElement("GenBuild");
moduleEle.setAttribute("type", "build");
//
// Inherit Properties.
//{"ARCH", "PACKAGE", "PACKAGE_GUID", "PACKAGE_VERSION", "MODULE_DIR"}
//
//
// ARCH
//
Element property = document.createElement("property");
property.setAttribute("name", "ARCH");
property.setAttribute("value", fpdModuleId.getArch());
moduleEle.appendChild(property);
//
// MODULE_GUID
//
property = document.createElement("property");
property.setAttribute("name", "MODULE_GUID");
property.setAttribute("value", moduleId.getGuid());
moduleEle.appendChild(property);
//
// MODULE_VERSION
//
property = document.createElement("property");
property.setAttribute("name", "MODULE_VERSION");
property.setAttribute("value", moduleId.getVersion());
moduleEle.appendChild(property);
//
// PACKAGE_GUID
//
property = document.createElement("property");
property.setAttribute("name", "PACKAGE_GUID");
property.setAttribute("value", moduleId.getPackage().getGuid());
moduleEle.appendChild(property);
//
// PACKAGE_VERSION
//
property = document.createElement("property");
property.setAttribute("name", "PACKAGE_VERSION");
property.setAttribute("value", moduleId.getPackage().getVersion());
moduleEle.appendChild(property);
ele.appendChild(moduleEle);
}
//
// MODULE_GUID
//
property = document.createElement("property");
property.setAttribute("name", "MODULE_GUID");
property.setAttribute("value", moduleId.getGuid());
moduleEle.appendChild(property);
//
// MODULE_VERSION
//
property = document.createElement("property");
property.setAttribute("name", "MODULE_VERSION");
property.setAttribute("value", moduleId.getVersion());
moduleEle.appendChild(property);
//
// PACKAGE_GUID
//
property = document.createElement("property");
property.setAttribute("name", "PACKAGE_GUID");
property.setAttribute("value", moduleId.getPackage().getGuid());
moduleEle.appendChild(property);
//
// PACKAGE_VERSION
//
property = document.createElement("property");
property.setAttribute("name", "PACKAGE_VERSION");
property.setAttribute("value", moduleId.getPackage().getVersion());
moduleEle.appendChild(property);
ele.appendChild(moduleEle);
}
root.appendChild(ele);
}
private void applyFvs(Document document, Node root, String num) {
Set<String> fvNameSet = sequences.get(num);
private void applyFvs(Document document, Node root) {
//
// FVS Target
//
root.appendChild(document.createComment("FVs target"));
Element ele = document.createElement("target");
ele.setAttribute("name", "fvs" + num);
ele.setAttribute("name", "fvs");
//
// For every Target and ToolChain
@ -283,13 +250,11 @@ public class PlatformBuildFileGenerator {
+ toolchainList[j] + File.separatorChar + "FV";
String[] validFv = SurfaceAreaQuery.getFpdValidImageNames();
for (int k = 0; k < validFv.length; k++) {
if (fvNameSet.contains(validFv[k]) || ! isListInSequence(validFv[k])) {
String inputFile = fvOutputDir + "" + File.separatorChar + validFv[k].toUpperCase() + ".inf";
Element fvEle = document.createElement("genfvimage");
fvEle.setAttribute("infFile", inputFile);
fvEle.setAttribute("outputDir", fvOutputDir);
ele.appendChild(fvEle);
}
String inputFile = fvOutputDir + "" + File.separatorChar + validFv[k].toUpperCase() + ".inf";
Element fvEle = document.createElement("genfvimage");
fvEle.setAttribute("infFile", inputFile);
fvEle.setAttribute("outputDir", fvOutputDir);
ele.appendChild(fvEle);
}
}
}
@ -576,16 +541,4 @@ public class PlatformBuildFileGenerator {
}
return root;
}
private boolean isListInSequence(String fvName) {
Set<String> numbers = sequences.keySet();
Iterator<String> iter = numbers.iterator();
while (iter.hasNext()) {
Set<String> fvNameSet = sequences.get(iter.next());
if (fvNameSet.contains(fvName)) {
return true;
}
}
return false;
}
}

View File

@ -15,32 +15,38 @@ package org.tianocore.build.id;
/**
This class is used to identify a module with BaseName, GUID, Version, PackageName
and ARCH.
This class is used to identify a module with Module Guid, Module Version,
Package Guid, Package Version and Arch.
@since GenBuild 1.0
**/
**/
public class FpdModuleIdentification {
private String arch;
private String fvBinding = "NULL"; // Optional
private String sequence = "0"; // Optional
private ModuleIdentification module;
private String target; // Optional
private String toolchain; // Optional
public FpdModuleIdentification(String arch, String fvBinding, String sequence, ModuleIdentification module){
/**
Constructor Method.
@param arch Build Arch
@param fvBinding Belong to what FVs
@param module ModuleIdentification
**/
public FpdModuleIdentification(String arch, String fvBinding, ModuleIdentification module){
this.arch = arch;
this.fvBinding = fvBinding;
this.sequence = sequence;
this.module = module;
}
/**
Constructor Method.
@param arch Build Arch
@param module ModuleIdentification
**/
public FpdModuleIdentification(ModuleIdentification module, String arch){
this.arch = arch;
this.module = module;
@ -66,42 +72,58 @@ public class FpdModuleIdentification {
}
}
/**
@param fvBinding
**/
public void setFvBinding(String fvBinding) {
this.fvBinding = fvBinding;
}
public void setSequence(String sequence) {
this.sequence = sequence;
}
/* (non-Javadoc)
@see java.lang.Object#toString()
**/
public String toString(){
return arch + ":" + module;
}
/**
@return String fvBinding
**/
public String getFvBinding() {
return fvBinding;
}
public String getSequence() {
return sequence;
}
/**
@return ModuleIdentification module ID
**/
public ModuleIdentification getModule() {
return module;
}
/**
@param module Module Identification
**/
public void setModule(ModuleIdentification module) {
this.module = module;
}
/**
@return String arch
**/
public String getArch() {
return arch;
}
/**
@param arch build ARCH
**/
public void setArch(String arch) {
this.arch = arch;
}
/* (non-Javadoc)
@see java.lang.Object#hashCode()
**/
public int hashCode(){
return module.hashCode();
}

View File

@ -13,8 +13,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
package org.tianocore.build.id;
import org.tianocore.build.global.GlobalData;
/**
This class is used to identify with its GUID and Version.
@since GenBuild 1.0
**/
public class Identification {
String name;
@ -23,19 +27,29 @@ public class Identification {
String version;
String type; // Optional
/**
@param name Name
@param guid Guid
@param version Version
**/
Identification(String name, String guid, String version){
this.name = name;
this.guid = guid;
this.version = version;
}
/**
@param guid Guid
@param version Version
**/
Identification(String guid, String version){
this.guid = guid;
this.version = version;
}
/* (non-Javadoc)
@see java.lang.Object#equals(java.lang.Object)
**/
public boolean equals(Object obj) {
if (obj instanceof Identification) {
Identification id = (Identification)obj;
@ -57,14 +71,23 @@ public class Identification {
}
}
/**
@param name Name
**/
public void setName(String name) {
this.name = name;
}
/**
@param guid Guid
**/
public void setGuid(String guid) {
this.guid = guid;
}
/**
@param version Version
**/
public void setVersion(String version) {
this.version = version;
}
@ -73,14 +96,23 @@ public class Identification {
return guid;
}
/**
@return String Name
**/
public String getName() {
return name;
}
/**
@return String Version
**/
public String getVersion() {
return version;
}
/* (non-Javadoc)
@see java.lang.Object#hashCode()
**/
public int hashCode(){
return guid.toLowerCase().hashCode();
}

View File

@ -16,7 +16,12 @@ package org.tianocore.build.id;
import java.io.File;
import org.tianocore.build.global.GlobalData;
/**
This class is used to identify a module with Module Guid, Module Version,
Package Guid, Package Version.
@since GenBuild 1.0
**/
public class ModuleIdentification extends Identification {
private PackageIdentification packageId;
@ -27,37 +32,69 @@ public class ModuleIdentification extends Identification {
private boolean isLibrary = false;
/**
@param guid Guid
@param version Version
**/
public ModuleIdentification(String guid, String version){
super(guid, version);
}
/**
@param guid Guid
@param version Version
@param packageId Package Identification
**/
public ModuleIdentification(String guid, String version, PackageIdentification packageId){
super(guid, version);
this.packageId = packageId;
}
/**
@param name Name
@param guid Guid
@param version Version
**/
public ModuleIdentification(String name, String guid, String version){
super(name, guid, version);
}
/**
@param name Name
@param guid Guid
@param version Version
@param packageId PackageIdentification
**/
public ModuleIdentification(String name, String guid, String version, PackageIdentification packageId){
super(name, guid, version);
this.packageId = packageId;
}
/**
@return boolean is this module is library
**/
public boolean isLibrary() {
return isLibrary;
}
/**
@param isLibrary
**/
public void setLibrary(boolean isLibrary) {
this.isLibrary = isLibrary;
}
/**
@return MSA File
**/
public File getMsaFile() {
prepareMsaFile();
return msaFile;
}
/**
@return Module relative path to package
**/
public String getModuleRelativePath() {
prepareMsaFile();
if (msaFile.getParent().length() == packageId.getPackageDir().length()) {
@ -72,6 +109,9 @@ public class ModuleIdentification extends Identification {
}
}
/**
@param msaFile Set Msa File
**/
public void setMsaFile(File msaFile) {
this.msaFile = msaFile;
}
@ -109,14 +149,23 @@ public class ModuleIdentification extends Identification {
}
}
/**
@param packageId set package identification
**/
public void setPackage(PackageIdentification packageId) {
this.packageId = packageId;
}
/**
@return get package identification
**/
public PackageIdentification getPackage() {
return packageId;
}
/**
@return get module type
**/
public String getModuleType() {
if (moduleType == null) {
GlobalData.refreshModuleIdentification(this);
@ -124,6 +173,9 @@ public class ModuleIdentification extends Identification {
return moduleType;
}
/**
@param moduleType set module type
**/
public void setModuleType(String moduleType) {
this.moduleType = moduleType;
}

View File

@ -16,35 +16,69 @@ import java.io.File;
import org.tianocore.build.global.GlobalData;
/**
This class is used to identify a package.
@since GenBuild 1.0
**/
public class PackageIdentification extends Identification{
//
// It is optional
// SPD file
//
private File spdFile;
/**
@param guid Guid
@param version Version
**/
public PackageIdentification(String guid, String version){
super(guid, version);
}
/**
@param name Name
@param guid Guid
@param version Version
**/
public PackageIdentification(String name, String guid, String version){
super(name, guid, version);
}
/**
@param name Name
@param guid Guid
@param version Version
@param spdFilename SPD file name
**/
public PackageIdentification(String name, String guid, String version, String spdFilename){
super(name, guid, version);
this.spdFile = new File(spdFilename);
}
/**
@param name Name
@param guid Guid
@param version Version
@param spdFile SPD file
**/
public PackageIdentification(String name, String guid, String version, File spdFile){
super(name, guid, version);
this.spdFile = spdFile;
}
/**
set SPD file.
@param spdFile SPD file
**/
public void setSpdFile(File spdFile) {
this.spdFile = spdFile;
}
/**
get SPD file
@return SPD file
**/
public File getSpdFile() {
return spdFile;
}
@ -61,11 +95,19 @@ public class PackageIdentification extends Identification{
}
}
/**
get package directory
@return Package Directory
**/
public String getPackageDir(){
prepareSpdFile();
return spdFile.getParent();
}
/**
get package relative directory.
@return package relative directory
**/
public String getPackageRelativeDir(){
prepareSpdFile();
String relativeDir =spdFile.getParent().substring(GlobalData.getWorkspacePath().length());

View File

@ -16,23 +16,52 @@ import java.io.File;
import org.tianocore.build.global.GlobalData;
/**
This class is used to identify a platform.
@since GenBuild 1.0
**/
public class PlatformIdentification extends Identification{
///
/// FPD file
///
private File fpdFile;
/**
@param guid Guid
@param version Version
**/
public PlatformIdentification(String guid, String version){
super(guid, version);
}
/**
@param name Name
@param guid Guid
@param version Version
**/
public PlatformIdentification(String name, String guid, String version){
super(name, guid, version);
}
/**
@param name Name
@param guid Guid
@param version Version
@param fpdFilename Fpd File Name
**/
public PlatformIdentification(String name, String guid, String version, String fpdFilename){
super(name, guid, version);
this.fpdFile = new File(fpdFilename);
}
/**
@param name Name
@param guid Guid
@param version Version
@param fpdFile Fpd File
**/
public PlatformIdentification(String name, String guid, String version, File fpdFile){
super(name, guid, version);
this.fpdFile = fpdFile;
@ -42,14 +71,26 @@ public class PlatformIdentification extends Identification{
return "Platform " + name + "["+guid+"]";
}
/**
Set FPD file.
@param fpdFile FPD File
**/
public void setFpdFile(File fpdFile) {
this.fpdFile = fpdFile;
}
/**
Get FPD file.
@return Fpd File
**/
public File getFpdFile() {
return fpdFile;
}
/**
Get FPD relative file to workspace.
@return Fpd Relative file.
**/
public String getRelativeFpdFile (){
String relativeDir = fpdFile.getPath().substring(GlobalData.getWorkspacePath().length());
if(relativeDir.startsWith("\\") || relativeDir.startsWith("/")) {
@ -58,6 +99,10 @@ public class PlatformIdentification extends Identification{
return relativeDir;
}
/**
Get Platform relative directory to workspace.
@return Platform relative directory
**/
public String getPlatformRelativeDir(){
String relativeDir = fpdFile.getParent().substring(GlobalData.getWorkspacePath().length());
if(relativeDir.startsWith("\\") || relativeDir.startsWith("/")) {

View File

@ -1,63 +0,0 @@
/** @file
ToolChainTask class.
ToolChainTask class's main fucntion is read all tool chain related config files.
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.toolchain;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
/**
This class is an ANT task. The main function is to read all tool chain related
config files.
@since GenBuild 1.0
**/
public class ToolChainTask extends Task{
///
/// environment variable name of toolchain
///
static private String toolsEnv = "env.TOOLS_DEF";
///
/// configuration file path
///
private String confPath = ".";
/**
Public construct method. It is necessary for ANT task.
**/
public ToolChainTask(){
}
/**
ANT task's entry point, will be called after init(). Using
<code>ToolChainFactory</code> to parse all config files, and
set TARGET property.
@throws BuildException
Config files are invalid.
**/
public void execute() throws BuildException {
String toolChain = getProject().getProperty(toolsEnv);
}
/**
Set the path of config files.
@param confPath the path of config files
**/
public void setConfPath(String confPath) {
this.confPath = confPath;
}
}

View File

@ -1,313 +0,0 @@
/** @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;
}
}

View File

@ -13,20 +13,24 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
package org.tianocore.build.tools;
import org.apache.tools.ant.BuildException;
/**
Ant element for module.
@since GenBuild 1.0
**/
public class ModuleItem {
private String moduleName;
private String moduleName = null;
private String moduleGuid;
private String moduleGuid = null;
private String moduleVersion;
private String moduleVersion = null;
private String packageName;
private String packageName = null;
private String packageGuid;
private String packageGuid = null;
private String packageVersion;
private String packageVersion = null;
public ModuleItem(){
@ -36,50 +40,98 @@ public class ModuleItem {
}
/**
Get module Guid.
@return Module Guid
**/
public String getModuleGuid() {
return moduleGuid;
}
/**
Set module Guid
@param moduleGuid Module Guid
**/
public void setModuleGuid(String moduleGuid) {
this.moduleGuid = moduleGuid;
}
/**
Get Module Name.
@return Module Name
**/
public String getModuleName() {
return moduleName;
}
/**
Set Module Name.
@param moduleName Module Name
**/
public void setModuleName(String moduleName) {
this.moduleName = moduleName;
}
/**
Get Module Version.
@return Module Version
**/
public String getModuleVersion() {
return moduleVersion;
}
/**
Set Module Version.
@param moduleVersion Module version
**/
public void setModuleVersion(String moduleVersion) {
this.moduleVersion = moduleVersion;
}
/**
Get Package Guid.
@return Package Guid
**/
public String getPackageGuid() {
return packageGuid;
}
/**
Set Package Guid.
@param packageGuid Package Guid
**/
public void setPackageGuid(String packageGuid) {
this.packageGuid = packageGuid;
}
/**
Get Package Name.
@return Package Name
**/
public String getPackageName() {
return packageName;
}
/**
Set Package Name.
@param packageName Package Name
**/
public void setPackageName(String packageName) {
this.packageName = packageName;
}
/**
Get Package Version.
@return Package Version
**/
public String getPackageVersion() {
return packageVersion;
}
/**
Set Package Version.
@param packageVersion Package Version
**/
public void setPackageVersion(String packageVersion) {
this.packageVersion = packageVersion;
}

View File

@ -14,13 +14,18 @@ package org.tianocore.build.tools;
import org.apache.tools.ant.BuildException;
/**
Ant element for Package.
@since GenBuild 1.0
**/
public class PackageItem {
private String packageName;
private String packageName = null;
private String packageGuid;
private String packageGuid = null;
private String packageVersion;
private String packageVersion = null;
public PackageItem(){
@ -33,26 +38,50 @@ public class PackageItem {
public String toString(){
return "[" + packageName + packageGuid + "]";
}
/**
Get Package Guid.
@return Package Guid
**/
public String getPackageGuid() {
return packageGuid;
}
/**
Set Package Guid.
@param packageGuid Package Guid
**/
public void setPackageGuid(String packageGuid) {
this.packageGuid = packageGuid;
}
/**
Get Package Name.
@return Package Name
**/
public String getPackageName() {
return packageName;
}
/**
Set Package Name.
@param packageName Package Name
**/
public void setPackageName(String packageName) {
this.packageName = packageName;
}
/**
Get Package Version.
@return Package Version
**/
public String getPackageVersion() {
return packageVersion;
}
/**
Set Package Version.
@param packageVersion Package Version
**/
public void setPackageVersion(String packageVersion) {
this.packageVersion = packageVersion;
}