import java.util.Map;\r
import java.util.Set;\r
import java.util.Vector;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
\r
import org.apache.tools.ant.BuildException;\r
import org.apache.tools.ant.BuildListener;\r
+import org.apache.tools.ant.Location;\r
import org.apache.tools.ant.Project;\r
import org.apache.tools.ant.taskdefs.Ant;\r
import org.apache.tools.ant.taskdefs.Property;\r
import org.apache.xmlbeans.XmlObject;\r
-\r
-import org.tianocore.common.definitions.ToolDefinitions;\r
-import org.tianocore.common.exception.EdkException;\r
-import org.tianocore.common.logger.EdkLog;\r
import org.tianocore.build.autogen.AutoGen;\r
import org.tianocore.build.exception.AutoGenException;\r
import org.tianocore.build.exception.GenBuildException;\r
import org.tianocore.build.id.PackageIdentification;\r
import org.tianocore.build.id.PlatformIdentification;\r
import org.tianocore.build.tools.ModuleItem;\r
+import org.tianocore.common.definitions.ToolDefinitions;\r
+import org.tianocore.common.exception.EdkException;\r
+import org.tianocore.common.logger.EdkLog;\r
\r
/**\r
<p>\r
BuildException buildException = new BuildException(e.getMessage());\r
buildException.setStackTrace(e.getStackTrace());\r
throw buildException;\r
+ } catch (Exception e) {\r
+ BuildException buildException = new BuildException(e.getMessage());\r
+ buildException.setStackTrace(e.getStackTrace());\r
+ throw buildException;\r
}\r
}\r
\r
moduleId.setMsaFile(msaFile);\r
}\r
\r
- String[] producedLibraryClasses = saq.getLibraryClasses("ALWAYS_PRODUCED",null);\r
+ String[] producedLibraryClasses = saq.getLibraryClasses("ALWAYS_PRODUCED", null, null);\r
if (producedLibraryClasses.length == 0) {\r
moduleId.setLibrary(false);\r
} else {\r
}\r
\r
Set<String> archSet = new LinkedHashSet<String>();\r
-\r
- if ( getProject().getProperty("ARCH") != null) {\r
- String[] fpdArchList = getProject().getProperty("ARCH").split(" ");\r
+ String archString = getProject().getProperty("ARCH");\r
+ if (archString != null) {\r
+ String[] fpdArchList = archString.split(" ");\r
\r
for (int i = 0; i < fpdArchList.length; i++) {\r
if (archListSupByToolChain.contains(fpdArchList[i])) {\r
}\r
}\r
\r
+ if (archList.length == 0) {\r
+ EdkLog.log(this, EdkLog.EDK_WARNING, "Warning: " + "[" + archString + "] is not supported for " + moduleId + " in this build!\n");\r
+ }\r
+\r
for (int k = 0; k < archList.length; k++) {\r
\r
getProject().setProperty("ARCH", archList[k]);\r
\r
if (type.equalsIgnoreCase("all") || type.equalsIgnoreCase("build")) {\r
applyBuild(targetList[i], toolchainList[j], fpdModuleId);\r
- } else if (type.equalsIgnoreCase("clean")) {\r
- applyClean(fpdModuleId);\r
- } else if (type.equalsIgnoreCase("cleanall")) {\r
- applyCleanall(fpdModuleId);\r
+ } else {\r
+ applyNonBuildTarget(fpdModuleId);\r
}\r
}\r
}\r
getProject().setProperty("FILE_GUID", moduleId.getGuid());\r
getProject().setProperty("VERSION", moduleId.getVersion());\r
getProject().setProperty("MODULE_TYPE", moduleId.getModuleType());\r
- getProject().setProperty("MODULE_DIR", moduleId.getMsaFile().getParent().replaceAll("(\\\\)", "/"));\r
- getProject().setProperty("MODULE_RELATIVE_DIR", moduleId.getModuleRelativePath().replaceAll("(\\\\)", "/"));\r
+ File msaFile = moduleId.getMsaFile();\r
+ String msaFileName = msaFile.getName();\r
+ getProject().setProperty("MODULE_DIR", msaFile.getParent().replaceAll("(\\\\)", "/"));\r
+ getProject().setProperty("MODULE_RELATIVE_DIR", moduleId.getModuleRelativePath().replaceAll("(\\\\)", "/") \r
+ + File.separatorChar + msaFileName.substring(0, msaFileName.lastIndexOf('.')));\r
\r
//\r
// SUBSYSTEM\r
String cmdFlags = GlobalData.getCommandSetting(key, fpdModuleId);\r
if (cmdFlags != null) \r
{\r
-// Set<String> addset = new LinkedHashSet<String>();\r
-// Set<String> subset = new LinkedHashSet<String>();\r
-// putFlagsToSet(addset, cmdFlags);\r
-// getProject().setProperty(cmd[m] + "_FLAGS", getProject().replaceProperties(getFlags(addset, subset)));\r
getProject().setProperty(cmd[m] + "_FLAGS", cmdFlags);\r
} \r
else \r
getProject().setProperty(cmd[m] + "_FLAGS", "");\r
}\r
\r
-\r
//\r
// Set CC_EXT\r
//\r
} else {\r
getProject().setProperty(cmd[m] + "_DPATH", "");\r
}\r
+ \r
+ //\r
+ // Set CC_LIBPATH\r
+ //\r
+ key[4] = ToolDefinitions.TOOLS_DEF_ATTRIBUTE_LIBPATH;\r
+ String libpath = GlobalData.getCommandSetting(key, fpdModuleId);\r
+ if (libpath != null) {\r
+ getProject().setProperty(cmd[m] + "_LIBPATH", libpath.replaceAll("(\\\\)", "/"));\r
+ } else {\r
+ getProject().setProperty(cmd[m] + "_LIBPATH", "");\r
+ }\r
+ \r
+ //\r
+ // Set CC_INCLUDEPATH\r
+ //\r
+ key[4] = ToolDefinitions.TOOLS_DEF_ATTRIBUTE_INCLUDEPATH;\r
+ String includepath = GlobalData.getCommandSetting(key, fpdModuleId);\r
+ if (dpath != null) {\r
+ getProject().setProperty(cmd[m] + "_INCLUDEPATH", includepath.replaceAll("(\\\\)", "/"));\r
+ } else {\r
+ getProject().setProperty(cmd[m] + "_INCLUDEPATH", "");\r
+ }\r
}\r
}\r
\r
// if it is CUSTOM_BUILD\r
// then call the exist BaseName_build.xml directly.\r
//\r
- if (moduleId.getModuleType().equalsIgnoreCase("USER_DEFINED")) {\r
- EdkLog.log(this, "Call user-defined " + moduleId.getName() + "_build.xml");\r
+ String buildFilename = "";\r
+ if ((buildFilename = GetCustomizedBuildFile(fpdModuleId.getArch())) != "") {\r
+ EdkLog.log(this, "Call user-defined " + buildFilename);\r
\r
- String antFilename = getProject().getProperty("MODULE_DIR") + File.separatorChar + moduleId.getName() + "_build.xml";\r
+ String antFilename = getProject().getProperty("MODULE_DIR") + File.separatorChar + buildFilename;\r
antCall(antFilename, null);\r
\r
return ;\r
//\r
String ffsKeyword = saq.getModuleFfsKeyword();\r
ModuleBuildFileGenerator fileGenerator = new ModuleBuildFileGenerator(getProject(), ffsKeyword, fpdModuleId, includes, saq);\r
- String buildFilename = getProject().getProperty("DEST_DIR_OUTPUT") + File.separatorChar + moduleId.getName() + "_build.xml";\r
+ buildFilename = getProject().getProperty("DEST_DIR_OUTPUT") + File.separatorChar + moduleId.getName() + "_build.xml";\r
fileGenerator.genBuildFile(buildFilename);\r
\r
//\r
antCall(antFilename, null);\r
}\r
\r
+ private void applyNonBuildTarget(FpdModuleIdentification fpdModuleId){\r
+ //\r
+ // if it is CUSTOM_BUILD\r
+ // then call the exist BaseName_build.xml directly.\r
+ //\r
+ if (moduleId.getModuleType().equalsIgnoreCase("USER_DEFINED")) {\r
+ EdkLog.log(this, "Calling user-defined " + moduleId.getName() + "_build.xml");\r
+ \r
+ String antFilename = getProject().getProperty("MODULE_DIR") + File.separatorChar + moduleId.getName() + "_build.xml";\r
+ antCall(antFilename, this.type);\r
+ \r
+ return ;\r
+ }\r
+\r
+ String antFilename = getProject().getProperty("DEST_DIR_OUTPUT") + File.separatorChar + moduleId.getName() + "_build.xml";\r
+ antCall(antFilename, this.type);\r
+ }\r
+\r
private void applyClean(FpdModuleIdentification fpdModuleId){\r
//\r
// if it is CUSTOM_BUILD\r
ant.execute();\r
}\r
\r
-\r
- /**\r
- Separate the string and instore in set.\r
-\r
- <p> String is separated by Java Regulation Expression\r
- "[^\\\\]?(\".*?[^\\\\]\")[ \t,]+". </p>\r
-\r
- <p>For example: </p>\r
-\r
- <pre>\r
- "/nologo", "/W3", "/WX"\r
- "/C", "/DSTRING_DEFINES_FILE=\"BdsStrDefs.h\""\r
- </pre>\r
-\r
- @param set store the separated string\r
- @param str string to separate\r
- **/\r
- private void putFlagsToSet(Set<String> set, String str) {\r
- if (str == null || str.length() == 0) {\r
- return;\r
- }\r
-\r
- Pattern myPattern = Pattern.compile("[^\\\\]?(\".*?[^\\\\]\")[ \t,]+");\r
- Matcher matcher = myPattern.matcher(str + " ");\r
- while (matcher.find()) {\r
- String item = str.substring(matcher.start(1), matcher.end(1));\r
- set.add(item);\r
- }\r
- }\r
-\r
- /**\r
- Generate the final flags string will be used by compile command.\r
-\r
- @param add the add flags set\r
- @param sub the sub flags set\r
- @return final flags after add set substract sub set\r
- **/\r
- private String getFlags(Set<String> add, Set<String> sub) {\r
- String result = "";\r
- add.removeAll(sub);\r
- Iterator iter = add.iterator();\r
- while (iter.hasNext()) {\r
- String str = (String) iter.next();\r
- result += str.substring(1, str.length() - 1) + " ";\r
- }\r
- return result;\r
- }\r
-\r
public void setSingleModuleBuild(boolean isSingleModuleBuild) {\r
this.isSingleModuleBuild = isSingleModuleBuild;\r
}\r
public void setExternalProperties(Vector<Property> v) {\r
this.properties = v;\r
}\r
+\r
+ private String GetCustomizedBuildFile(String arch) {\r
+ String[][] files = saq.getSourceFiles(arch);\r
+ for (int i = 0; i < files.length; ++i) {\r
+ if (files[i][1].endsWith("build.xml")) {\r
+ return files[i][1];\r
+ }\r
+ }\r
+\r
+ return "";\r
+ }\r
}\r