X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Tools%2FSource%2FGenBuild%2Forg%2Ftianocore%2Fbuild%2FGenBuildTask.java;h=cdccfa5c096ed929bb11f4f4bf1cda36db1ce8a6;hp=0e807f8abbe07fc6c3bcc9671f24186413858bcd;hb=391dbbb1c00daefe78e7e44499d048943ca866ae;hpb=a29c47e01d9689fad735bbeccfaef67676a425d1
diff --git a/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java b/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java
index 0e807f8abb..cdccfa5c09 100644
--- a/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java
+++ b/Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java
@@ -32,8 +32,9 @@ import org.apache.tools.ant.taskdefs.Ant;
import org.apache.tools.ant.taskdefs.Property;
import org.apache.xmlbeans.XmlObject;
-import org.tianocore.build.exception.EdkException;
+import org.tianocore.build.autogen.AutoGen;
import org.tianocore.build.fpd.FpdParserTask;
+import org.tianocore.build.global.GenBuildLogger;
import org.tianocore.build.global.GlobalData;
import org.tianocore.build.global.OutputManager;
import org.tianocore.build.global.SurfaceAreaQuery;
@@ -42,6 +43,8 @@ import org.tianocore.build.id.ModuleIdentification;
import org.tianocore.build.id.PackageIdentification;
import org.tianocore.build.id.PlatformIdentification;
import org.tianocore.build.tools.ModuleItem;
+import org.tianocore.exception.EdkException;
+import org.tianocore.logger.EdkLog;
/**
@@ -97,11 +100,10 @@ public class GenBuildTask extends Ant {
private ModuleIdentification moduleId;
private Vector properties = new Vector();
-
+
private static Stack backupPropertiesStack = new Stack();
-
- private static Hashtable backupProperties;
+ private boolean isSingleModuleBuild = false;
/**
Public construct method. It is necessary for ANT task.
@@ -115,7 +117,14 @@ public class GenBuildTask extends Ant {
From module build, exception from module surface area invalid.
**/
public void execute() throws BuildException {
- try{
+ //
+ // set Logger
+ //
+ GenBuildLogger logger = new GenBuildLogger(getProject());
+ EdkLog.setLogLevel(getProject().getProperty("env.LOGLEVEL"));
+ EdkLog.setLogger(logger);
+ // remove !!
+ try {
pushProperties();
//
// Enable all specified properties
@@ -135,7 +144,7 @@ public class GenBuildTask extends Ant {
String packageGuid = getProject().getProperty("PACKAGE_GUID");
String packageVersion = getProject().getProperty("PACKAGE_VERSION");
if (moduleGuid == null || packageGuid == null) {
- throw new BuildException("GenBuild parameters error. ");
+ throw new BuildException("GenBuild parameter error.");
}
PackageIdentification packageId = new PackageIdentification(packageGuid, packageVersion);
moduleId = new ModuleIdentification(moduleGuid, moduleVersion);
@@ -149,7 +158,7 @@ public class GenBuildTask extends Ant {
SurfaceAreaQuery.setDoc(doc);
moduleId = SurfaceAreaQuery.getMsaHeader();
}
- String[] producedLibraryClasses = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");
+ String[] producedLibraryClasses = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED",null);
if (producedLibraryClasses.length == 0) {
moduleId.setLibrary(false);
}
@@ -160,7 +169,7 @@ public class GenBuildTask extends Ant {
//
// Judge whether it is single module build or not
//
- if (getProject().getProperty("PLATFORM") == null) {
+ if (isSingleModuleBuild) {
//
// Single Module build
//
@@ -170,8 +179,8 @@ public class GenBuildTask extends Ant {
//
// Platform build. Restore the platform related info
//
- String platformName = getProject().getProperty("PLATFORM");
- PlatformIdentification platformId = GlobalData.getPlatform(platformName);
+ 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("(\\\\)", "/"));
@@ -185,14 +194,29 @@ public class GenBuildTask extends Ant {
// If single module : intersection MSA supported ARCHs and tools def!!
// else, get arch from pass down
//
- String[] archList = new String[0];
- if ( getProject().getProperty("ARCH") != null ) {
- archList = getProject().getProperty("ARCH").split(" ");
+ Set archListSupByToolChain = new LinkedHashSet();
+ String[] archs = GlobalData.getToolChainInfo().getArchs();
+
+ for (int i = 0; i < archs.length; i ++) {
+ archListSupByToolChain.add(archs[i]);
+ }
+
+ Set archSet = new LinkedHashSet();
+
+ if ( getProject().getProperty("ARCH") != null) {
+ String[] fpdArchList = getProject().getProperty("ARCH").split(" ");
+
+ for (int i = 0; i < fpdArchList.length; i++) {
+ if (archListSupByToolChain.contains(fpdArchList[i])) {
+ archSet.add(fpdArchList[i]);
+ }
+ }
}
else {
- archList = GlobalData.getToolChainInfo().getArchs();
+ archSet = archListSupByToolChain;
}
-
+
+ String[] archList = archSet.toArray(new String[archSet.size()]);
//
// Judge if arch is all supported by current module. If not, throw Exception.
@@ -201,12 +225,13 @@ public class GenBuildTask extends Ant {
if (moduleSupportedArchs != null) {
for (int k = 0; k < archList.length; k++) {
if ( ! moduleSupportedArchs.contains(archList[k])) {
- throw new BuildException("ARCH [" + archList[k] + "] is not supported by " + moduleId + ". " + moduleId + " only supports [" + moduleSupportedArchs + "].");
+ throw new BuildException("Specified architecture [" + archList[k] + "] is not supported by " + moduleId + ". The module " + moduleId + " only supports [" + moduleSupportedArchs + "] architectures.");
}
}
}
for (int k = 0; k < archList.length; k++) {
+
getProject().setProperty("ARCH", archList[k]);
FpdModuleIdentification fpdModuleId = new FpdModuleIdentification(moduleId, archList[k]);
@@ -214,10 +239,12 @@ public class GenBuildTask extends Ant {
//
// Whether the module is built before
//
- if (GlobalData.isModuleBuilt(fpdModuleId)) {
- return ;
- }
- else {
+ if (moduleId.isLibrary() == false && GlobalData.hasFpdModuleSA(fpdModuleId) == false) {
+ System.out.println("\nWARNING: " + moduleId + " for " + archList[k] + " was not found in current platform FPD file!\n");
+ continue;
+ } else if (GlobalData.isModuleBuilt(fpdModuleId)) {
+ return;
+ } else {
GlobalData.registerBuiltModule(fpdModuleId);
}
@@ -233,6 +260,15 @@ public class GenBuildTask extends Ant {
getProject().setProperty("TARGET", targetList[i]);
String[] toolchainList = GlobalData.getToolChainInfo().getTagnames();
for(int j = 0; j < toolchainList.length; j ++){
+ //
+ // check if any tool is defined for current target + toolchain + arch
+ // don't do anything if no tools found
+ //
+ if (GlobalData.isCommandSet(targetList[i], toolchainList[j], archList[k]) == false) {
+ System.out.println("Warning: No build issued. No tools were found for [target=" + targetList[i] + " toolchain=" + toolchainList[j] + " arch=" + archList[k] + "]\n");
+ continue;
+ }
+
//
// Prepare for toolchain related common properties
// TOOLCHAIN
@@ -249,7 +285,6 @@ public class GenBuildTask extends Ant {
// MODULE or BASE_NAME, GUID or FILE_GUID, VERSION, MODULE_TYPE
// MODULE_DIR, MODULE_RELATIVE_DIR
// SUBSYSTEM, ENTRYPOINT, EBC_TOOL_LIB_PATH
- // LIBS, OBJECTS, SDB_FILES
//
setModuleCommonProperties(archList[k]);
@@ -273,7 +308,6 @@ public class GenBuildTask extends Ant {
}
popProperties();
}catch (Exception e){
- e.printStackTrace();
throw new BuildException(e.getMessage());
}
}
@@ -299,13 +333,13 @@ public class GenBuildTask extends Ant {
//
// Read ACTIVE_PLATFORM's FPD file (Call FpdParserTask's method)
//
- String activePlatformName = getProject().getProperty("ACTIVE_PLATFORM");
+ String filename = getProject().getProperty("PLATFORM_FILE");
- if (activePlatformName == null){
- throw new BuildException("Plese set ACTIVE_PLATFORM if you want to build a single module. ");
+ if (filename == null){
+ throw new BuildException("Please set ACTIVE_PLATFORM in the file: Tools/Conf/target.txt if you want to build a single module!");
}
- PlatformIdentification platformId = GlobalData.getPlatform(activePlatformName);
+ PlatformIdentification platformId = GlobalData.getPlatform(filename);
//
// Read FPD file
@@ -318,7 +352,7 @@ public class GenBuildTask extends Ant {
// Prepare for Platform related common properties
// PLATFORM, PLATFORM_DIR, PLATFORM_RELATIVE_DIR
//
- getProject().setProperty("PLATFORM", activePlatformName);
+ getProject().setProperty("PLATFORM", platformId.getName());
getProject().setProperty("PLATFORM_DIR", platformId.getFpdFile().getParent().replaceAll("(\\\\)", "/"));
getProject().setProperty("PLATFORM_RELATIVE_DIR", platformId.getPlatformRelativeDir().replaceAll("(\\\\)", "/"));
}
@@ -394,12 +428,7 @@ public class GenBuildTask extends Ant {
getProject().setProperty("ENTRYPOINT", "_ModuleEntryPoint");
}
- //
- // LIBS, OBJECTS, SDB_FILES
- //
getProject().setProperty("OBJECTS", "");
- getProject().setProperty("SDB_FILES", "");
- getProject().setProperty("LIBS", "");
}
private void getCompilerFlags(String target, String toolchain, FpdModuleIdentification fpdModuleId) throws EdkException {
@@ -414,7 +443,6 @@ public class GenBuildTask extends Ant {
key[4] = "NAME";
String cmdName = GlobalData.getCommandSetting(key, fpdModuleId);
File cmdFile = new File(cmdPath + File.separatorChar + cmdName);
-// GlobalData.log.info("PATH: " + cmdFile.getPath());
getProject().setProperty(cmd[m], cmdFile.getPath().replaceAll("(\\\\)", "/"));
//
@@ -422,7 +450,6 @@ public class GenBuildTask extends Ant {
//
key[4] = "FLAGS";
String cmdFlags = GlobalData.getCommandSetting(key, fpdModuleId);
-// GlobalData.log.info("Flags: " + cmdFlags);
Set addset = new LinkedHashSet();
Set subset = new LinkedHashSet();
putFlagsToSet(addset, cmdFlags);
@@ -433,7 +460,6 @@ public class GenBuildTask extends Ant {
//
key[4] = "EXT";
String extName = GlobalData.getCommandSetting(key, fpdModuleId);
-// GlobalData.log.info("Ext: " + extName);
if ( extName != null && ! extName.equalsIgnoreCase("")) {
getProject().setProperty(cmd[m] + "_EXT", extName);
}
@@ -446,7 +472,6 @@ public class GenBuildTask extends Ant {
//
key[4] = "FAMILY";
String toolChainFamily = GlobalData.getCommandSetting(key, fpdModuleId);
-// GlobalData.log.info("FAMILY: " + toolChainFamily);
if (toolChainFamily != null) {
getProject().setProperty(cmd[m] + "_FAMILY", toolChainFamily);
}
@@ -456,7 +481,6 @@ public class GenBuildTask extends Ant {
//
key[4] = "SPATH";
String spath = GlobalData.getCommandSetting(key, fpdModuleId);
-// GlobalData.log.info("SPATH: " + spath);
if (spath != null) {
getProject().setProperty(cmd[m] + "_SPATH", spath.replaceAll("(\\\\)", "/"));
}
@@ -469,7 +493,6 @@ public class GenBuildTask extends Ant {
//
key[4] = "DPATH";
String dpath = GlobalData.getCommandSetting(key, fpdModuleId);
-// GlobalData.log.info("DPATH: " + dpath);
if (dpath != null) {
getProject().setProperty(cmd[m] + "_DPATH", dpath.replaceAll("(\\\\)", "/"));
}
@@ -524,8 +547,9 @@ public class GenBuildTask extends Ant {
//
// AutoGen
//
-// AutoGen autogen = new AutoGen(getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId);
-// autogen.genAutogen();
+
+ AutoGen autogen = new AutoGen(getProject().getProperty("FV_DIR"), getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());
+ autogen.genAutogen();
//
@@ -584,7 +608,7 @@ public class GenBuildTask extends Ant {
// then call the exist BaseName_build.xml directly.
//
if (moduleId.getModuleType().equalsIgnoreCase("USER_DEFINED")) {
- GlobalData.log.info("Call user-defined " + moduleId.getName() + "_build.xml");
+ GlobalData.log.info("Calling user-defined " + moduleId.getName() + "_build.xml");
Ant ant = new Ant();
ant.setProject(getProject());
ant.setAntfile(getProject().getProperty("MODULE_DIR") + File.separatorChar + moduleId.getName() + "_build.xml");
@@ -614,7 +638,7 @@ public class GenBuildTask extends Ant {
// then call the exist BaseName_build.xml directly.
//
if (moduleId.getModuleType().equalsIgnoreCase("USER_DEFINED")) {
- GlobalData.log.info("Call user-defined " + moduleId.getName() + "_build.xml");
+ GlobalData.log.info("Calling user-defined " + moduleId.getName() + "_build.xml");
Ant ant = new Ant();
ant.setProject(getProject());
ant.setAntfile(getProject().getProperty("MODULE_DIR") + File.separatorChar + moduleId.getName() + "_build.xml");
@@ -688,60 +712,6 @@ public class GenBuildTask extends Ant {
return result;
}
- /**
- Generate the flags string with original format. The format is defined by
- Java Regulation Expression "[^\\\\]?(\".*?[^\\\\]\")[ \t,]+".
-
- For example:
-
-
- "/nologo", "/W3", "/WX"
- "/C", "/DSTRING_DEFINES_FILE=\"BdsStrDefs.h\""
-
-
- @param add the add flags set
- @param sub the sub flags set
- @return flags with original format
- **/
- private String getRawFlags(Set add, Set 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 addSet, Set 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());
}
@@ -755,4 +725,8 @@ public class GenBuildTask extends Ant {
getProject().setProperty(item, (String)backupProperties.get(item));
}
}
+
+ public void setSingleModuleBuild(boolean isSingleModuleBuild) {
+ this.isSingleModuleBuild = isSingleModuleBuild;
+ }
}