import java.util.HashMap;\r
import java.util.HashSet;\r
import java.util.Iterator;\r
+import java.util.LinkedHashSet;\r
import java.util.List;\r
import java.util.Map;\r
import java.util.Set;\r
///\r
/// Tool Chain Related, try to refine and put some logic process to ToolChainFactory\r
///\r
- public synchronized static ToolChainInfo getToolChainInfo() {\r
+ public synchronized static ToolChainInfo getToolChainInfo() throws EdkException {\r
if (toolChainInfo == null) {\r
toolChainInfo = toolsDef.getConfigInfo().intersection(toolChainEnvInfo);\r
if (toolChainPlatformInfo != null) {\r
}\r
toolChainInfo.addCommands(toolsDef.getConfigInfo().getCommands());\r
toolChainInfo.normalize();\r
+\r
+ if (toolChainInfo.getTargets().length == 0) {\r
+ throw new EdkException("No valid target specified! Please check your TARGET definition in Tools/Conf/target.txt.");\r
+ }\r
+\r
+ if (toolChainInfo.getTagnames().length == 0) {\r
+ throw new EdkException("No valid tool chain specified! Please check your TOOL_CHAIN_TAG definition in Tools/Conf/target.txt.");\r
+ }\r
+\r
+ if (toolChainInfo.getArchs().length == 0) {\r
+ throw new EdkException("No valid ARCH specified! Please check your TARGET_ARCH definition in Tools/Conf/target.txt.");\r
+ }\r
+\r
+ if (toolChainInfo.getCommands().length == 0) {\r
+ throw new EdkException("No valid COMMAND specified! Please check your TARGET definition in Tools/Conf/tools_def.txt.");\r
+ }\r
+\r
EdkLog.log("Init", EdkLog.EDK_ALWAYS, "Current build tool chain information summary: ");\r
EdkLog.log("Init", EdkLog.EDK_ALWAYS, toolChainInfo + "");\r
}\r
msaFamilyBuildOption.put(moduleId, toolChainOption);\r
}\r
\r
- public static boolean isCommandSet(String target, String toolchain, String arch) {\r
+ public static boolean isCommandSet(String target, String toolchain, String arch) throws EdkException {\r
String[] commands = getToolChainInfo().getCommands();\r
\r
for (int i = 0; i < commands.length; ++i) {\r
return setting;\r
}\r
\r
+ Set<String> flagSet = new LinkedHashSet<String>();\r
+ flagSet.add(setting);\r
+ \r
//\r
// Tool's option can be in .fpd and/or .msa file\r
//\r
//\r
option = msaFamilyBuildOption.get(fpdModuleId.getModule());\r
if (option != null && (optionString = option.get(toolChainFamilyKey)) != null) {\r
- setting += (" " + optionString);\r
+ flagSet.add(optionString);\r
}\r
\r
//\r
//\r
option = msaBuildOption.get(fpdModuleId.getModule());\r
if (option != null && (optionString = option.get(toolChainKey)) != null) {\r
- setting += (" " + optionString);\r
+ flagSet.add(optionString);\r
}\r
\r
//\r
//\r
optionString = platformToolChainFamilyOption.get(toolChainFamilyKey);\r
if (optionString != null) {\r
- setting += (" " + optionString);\r
+ flagSet.add(optionString);\r
}\r
\r
//\r
//\r
optionString = platformToolChainOption.get(toolChainKey);\r
if (optionString != null) {\r
- setting += (" " + optionString);\r
+ flagSet.add(optionString);\r
}\r
\r
//\r
//\r
option = moduleToolChainFamilyOption.get(fpdModuleId);\r
if (option != null && (optionString = option.get(toolChainFamilyKey)) != null) {\r
- setting += (" " + optionString);\r
+ flagSet.add(optionString);\r
}\r
\r
//\r
//\r
option = moduleToolChainOption.get(fpdModuleId);\r
if (option != null && (optionString = option.get(toolChainKey)) != null) {\r
- setting += (" " + optionString);\r
+ flagSet.add(optionString);\r
+ }\r
+ \r
+ setting = "";\r
+ for(Iterator<String> iter = flagSet.iterator(); iter.hasNext();) {\r
+ setting += iter.next() +" ";\r
}\r
-\r
return setting;\r
}\r
\r