package org.tianocore.build;\r
\r
import java.io.File;\r
+import java.util.ArrayList;\r
import java.util.Hashtable;\r
import java.util.Iterator;\r
import java.util.LinkedHashSet;\r
SurfaceAreaQuery.setDoc(doc);\r
moduleId = SurfaceAreaQuery.getMsaHeader();\r
}\r
- String[] producedLibraryClasses = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED");\r
+ String[] producedLibraryClasses = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED",null);\r
if (producedLibraryClasses.length == 0) {\r
moduleId.setLibrary(false);\r
}\r
// If single module : intersection MSA supported ARCHs and tools def!!\r
// else, get arch from pass down\r
//\r
- String[] archList = new String[0];\r
- if ( getProject().getProperty("ARCH") != null ) {\r
- archList = getProject().getProperty("ARCH").split(" ");\r
+ Set<String> archListSupByToolChain = new LinkedHashSet<String>(); \r
+ String[] archs = GlobalData.getToolChainInfo().getArchs(); \r
+ \r
+ for (int i = 0; i < archs.length; i ++) {\r
+ archListSupByToolChain.add(archs[i]);\r
+ }\r
+ \r
+ Set<String> archSet = new LinkedHashSet<String>();\r
+ \r
+ if ( getProject().getProperty("ARCH") != null) {\r
+ String[] fpdArchList = getProject().getProperty("ARCH").split(" ");\r
+ \r
+ for (int i = 0; i < fpdArchList.length; i++) {\r
+ if (archListSupByToolChain.contains(fpdArchList[i])) {\r
+ archSet.add(fpdArchList[i]);\r
+ }\r
+ }\r
}\r
else {\r
- archList = GlobalData.getToolChainInfo().getArchs();\r
+ archSet = archListSupByToolChain; \r
}\r
- \r
+ \r
+ String[] archList = archSet.toArray(new String[archSet.size()]);\r
\r
//\r
// Judge if arch is all supported by current module. If not, throw Exception.\r
}\r
\r
for (int k = 0; k < archList.length; k++) {\r
+ \r
getProject().setProperty("ARCH", archList[k]);\r
\r
FpdModuleIdentification fpdModuleId = new FpdModuleIdentification(moduleId, archList[k]);\r
//\r
// Whether the module is built before\r
//\r
- if (GlobalData.isModuleBuilt(fpdModuleId)) {\r
- return ;\r
+ if ((moduleId.isLibrary() == false && GlobalData.hasFpdModuleSA(fpdModuleId) == false) \r
+ || GlobalData.isModuleBuilt(fpdModuleId)) {\r
+ return;\r
}\r
else {\r
GlobalData.registerBuiltModule(fpdModuleId);\r
// don't do anything if no tools found\r
// \r
if (GlobalData.isCommandSet(targetList[i], toolchainList[j], archList[k]) == false) {\r
- System.out.println("!!!Warning: No build issued. No tools found for [target=" + targetList[i] + " toolchain=" + toolchainList[j] + " arch=" + archList[k] + "]\n");\r
+ System.out.println("Warning: No build issued. No tools found for [target=" + targetList[i] + " toolchain=" + toolchainList[j] + " arch=" + archList[k] + "]\n");\r
continue;\r
}\r
\r
}\r
popProperties();\r
}catch (Exception e){\r
- e.printStackTrace();\r
throw new BuildException(e.getMessage());\r
}\r
}\r
key[4] = "NAME";\r
String cmdName = GlobalData.getCommandSetting(key, fpdModuleId);\r
File cmdFile = new File(cmdPath + File.separatorChar + cmdName);\r
-// GlobalData.log.info("PATH: " + cmdFile.getPath());\r
getProject().setProperty(cmd[m], cmdFile.getPath().replaceAll("(\\\\)", "/"));\r
\r
//\r
//\r
key[4] = "FLAGS";\r
String cmdFlags = GlobalData.getCommandSetting(key, fpdModuleId);\r
-// GlobalData.log.info("Flags: " + cmdFlags);\r
Set<String> addset = new LinkedHashSet<String>();\r
Set<String> subset = new LinkedHashSet<String>();\r
putFlagsToSet(addset, cmdFlags);\r
//\r
key[4] = "EXT";\r
String extName = GlobalData.getCommandSetting(key, fpdModuleId);\r
-// GlobalData.log.info("Ext: " + extName);\r
if ( extName != null && ! extName.equalsIgnoreCase("")) {\r
getProject().setProperty(cmd[m] + "_EXT", extName);\r
}\r
//\r
key[4] = "FAMILY";\r
String toolChainFamily = GlobalData.getCommandSetting(key, fpdModuleId);\r
-// GlobalData.log.info("FAMILY: " + toolChainFamily);\r
if (toolChainFamily != null) {\r
getProject().setProperty(cmd[m] + "_FAMILY", toolChainFamily);\r
}\r
//\r
key[4] = "SPATH";\r
String spath = GlobalData.getCommandSetting(key, fpdModuleId);\r
-// GlobalData.log.info("SPATH: " + spath);\r
if (spath != null) {\r
getProject().setProperty(cmd[m] + "_SPATH", spath.replaceAll("(\\\\)", "/"));\r
}\r
//\r
key[4] = "DPATH";\r
String dpath = GlobalData.getCommandSetting(key, fpdModuleId);\r
-// GlobalData.log.info("DPATH: " + dpath);\r
if (dpath != null) {\r
getProject().setProperty(cmd[m] + "_DPATH", dpath.replaceAll("(\\\\)", "/"));\r
}\r
// AutoGen\r
//\r
\r
- AutoGen autogen = new AutoGen(getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());\r
+ AutoGen autogen = new AutoGen(getProject().getProperty("FV_DIR"), getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());\r
autogen.genAutogen();\r
\r
\r