import java.io.BufferedReader;\r
import java.io.File;\r
import java.io.InputStreamReader;\r
+import java.util.Hashtable;\r
import java.util.Iterator;\r
import java.util.LinkedHashSet;\r
import java.util.Map;\r
\r
import org.apache.tools.ant.BuildException;\r
import org.apache.tools.ant.Task;\r
+import org.tianocore.build.fpd.FpdParserForThread;\r
import org.tianocore.build.fpd.FpdParserTask;\r
import org.tianocore.build.global.GlobalData;\r
-import org.tianocore.build.global.PropertyManager;\r
import org.tianocore.build.toolchain.ConfigReader;\r
import org.tianocore.build.toolchain.ToolChainInfo;\r
import org.tianocore.common.definitions.ToolDefinitions;\r
\r
private Set<File> msaFiles = new LinkedHashSet<File>();\r
\r
+ //\r
+ // This is only for none-multi-thread build to reduce overriding message\r
+ //\r
+ public static Hashtable<String, String> originalProperties = new Hashtable<String, String>();\r
+ \r
String toolsDefFilename = ToolDefinitions.DEFAULT_TOOLS_DEF_FILE_PATH;\r
\r
String targetFilename = ToolDefinitions.TARGET_FILE_PATH;\r
String dbFilename = ToolDefinitions.FRAMEWORK_DATABASE_FILE_PATH;\r
\r
String activePlatform = null;\r
- \r
+\r
+ ///\r
+ /// The flag to present current is multi-thread enabled\r
+ ///\r
+ public static boolean multithread = false;\r
+\r
+ ///\r
+ /// The concurrent thread number\r
+ ///\r
+ public static int MAX_CONCURRENT_THREAD_NUMBER = 1;\r
+\r
///\r
/// there are three type: all (build), clean and cleanall\r
///\r
// Global Data initialization\r
//\r
File workspacePath = new File(getProject().getProperty("WORKSPACE"));\r
- PropertyManager.setProperty(getProject(), "WORKSPACE_DIR", workspacePath.getPath().replaceAll("(\\\\)", "/"));\r
+ getProject().setProperty("WORKSPACE_DIR", workspacePath.getPath().replaceAll("(\\\\)", "/"));\r
GlobalData.initInfo(dbFilename, workspacePath.getPath(), toolsDefFilename);\r
\r
//\r
//\r
if (buildFile.getName().endsWith(ToolDefinitions.FPD_EXTENSION)) {\r
System.out.println("Processing the FPD file [" + buildFile.getPath() + "] ..>> ");\r
+ //\r
+ // Iff for platform build will enable the multi-thread if set in target.txt\r
+ //\r
+ if (multithread && type.equalsIgnoreCase("all")) {\r
+ System.out.println("Multi-thread build is enabled. ");\r
+ FpdParserForThread fpdParserForThread = new FpdParserForThread();\r
+ fpdParserForThread.setType(type);\r
+ fpdParserForThread.setProject(getProject());\r
+ fpdParserForThread.setFpdFile(buildFile);\r
+ fpdParserForThread.execute();\r
+ return ;\r
+ }\r
+ \r
FpdParserTask fpdParserTask = new FpdParserTask();\r
fpdParserTask.setType(type);\r
fpdParserTask.setProject(getProject());\r
GenBuildTask genBuildTask = new GenBuildTask();\r
genBuildTask.setSingleModuleBuild(true);\r
genBuildTask.setType(type);\r
- PropertyManager.setProperty(getProject(), "PLATFORM_FILE", activePlatform);\r
+ getProject().setProperty("PLATFORM_FILE", activePlatform);\r
+ if( !multithread) {\r
+ originalProperties.put("PLATFORM_FILE", activePlatform);\r
+ }\r
genBuildTask.setProject(getProject());\r
genBuildTask.setMsaFile(buildFile);\r
genBuildTask.execute();\r
**/\r
private void backupSystemProperties() {\r
Map<String, String> sysProperties = System.getenv();\r
- Set<String> keys = sysProperties.keySet();\r
- Iterator<String> iter = keys.iterator();\r
+ Iterator<String> iter = sysProperties.keySet().iterator();\r
while (iter.hasNext()) {\r
String name = iter.next();\r
\r
// If system environment variable is not in ANT properties, add it\r
//\r
if (getProject().getProperty(name) == null) {\r
- PropertyManager.setProperty(getProject(), name, sysProperties.get(name));\r
+ getProject().setProperty(name, sysProperties.get(name));\r
}\r
}\r
+ \r
+ Hashtable allProperties = getProject().getProperties();\r
+ Iterator piter = allProperties.keySet().iterator();\r
+ while (piter.hasNext()) {\r
+ String name = (String)piter.next();\r
+ originalProperties.put(new String(name), new String((String)allProperties.get(name)));\r
+ }\r
+ \r
}\r
\r
private File intercommuniteWithUser(){\r
}\r
activePlatform = str;\r
}\r
+ \r
+ str = getValue("MULTIPLE_THREAD", targetFileInfo);\r
+ if (str != null && str.trim().equalsIgnoreCase("Enable")) {\r
+ multithread = true;\r
+ }\r
+ \r
+ str = getValue("MAX_CONCURRENT_THREAD_NUMBER", targetFileInfo);\r
+ if (str != null ) {\r
+ try {\r
+ int threadNum = Integer.parseInt(str);\r
+ if (threadNum > 0) {\r
+ MAX_CONCURRENT_THREAD_NUMBER = threadNum;\r
+ }\r
+ } catch (Exception enuma) {\r
+ \r
+ }\r
+ }\r
}\r
catch (Exception ex) {\r
throw new BuildException(ex.getMessage());\r