import java.util.Set;\r
import java.util.Vector;\r
\r
+import org.apache.tools.ant.BuildException;\r
import org.apache.tools.ant.BuildListener;\r
import org.apache.tools.ant.Project;\r
import org.apache.tools.ant.taskdefs.Property;\r
\r
private Thread thread;\r
\r
- public GenBuildThread() {\r
- thread = new Thread(this);\r
+ public GenBuildThread(ModuleIdentification moduleId, String arch) {\r
+ this.moduleId = moduleId;\r
+ this.arch = arch;\r
+ thread = new Thread(FpdParserForThread.tg, this, moduleId + ":" + arch);\r
}\r
\r
public boolean start() {\r
if (highPriority) {\r
thread.setPriority(Thread.MAX_PRIORITY);\r
}\r
- \r
+\r
status = FpdParserForThread.STATUS_START_RUN;\r
thread.start();\r
return true;\r
}\r
\r
public void run() {\r
- \r
- FpdModuleIdentification fpdModuleId = new FpdModuleIdentification(moduleId, arch);\r
-\r
- //\r
- // Prepare pass down properties\r
- // ARCH, MODULE_GUID, MODULE_VERSION, PACKAGE_GUID, PACKAGE_VERSION, PLATFORM_FILE\r
- //\r
- Vector<Property> properties = new Vector<Property>();\r
- Property property = new Property();\r
- property.setName("ARCH");\r
- property.setValue(arch);\r
- properties.add(property);\r
-\r
- property = new Property();\r
- property.setName("MODULE_GUID");\r
- property.setValue(moduleId.getGuid());\r
- properties.add(property);\r
-\r
- property = new Property();\r
- property.setName("MODULE_VERSION");\r
- if (moduleId.getVersion() == null) {\r
- property.setValue("");\r
- } else {\r
- property.setValue(moduleId.getVersion());\r
- }\r
- properties.add(property);\r
-\r
- property = new Property();\r
- property.setName("PACKAGE_GUID");\r
- property.setValue(moduleId.getPackage().getGuid());\r
- properties.add(property);\r
-\r
- property = new Property();\r
- property.setName("PACKAGE_VERSION");\r
- if (moduleId.getPackage().getVersion() == null) {\r
- property.setValue("");\r
- } else {\r
- property.setValue(moduleId.getPackage().getVersion());\r
- }\r
- properties.add(property);\r
-\r
- // property = new Property();\r
- // property.setName("PLATFORM_FILE");\r
- // property.setValue(arch);\r
- // properties.add(property);\r
\r
- //\r
- // Build the Module\r
- //\r
- GenBuildTask genBuildTask = new GenBuildTask();\r
-\r
- Project newProject = new Project();\r
-\r
- Hashtable passdownProperties = project.getProperties();\r
- Iterator iter = passdownProperties.keySet().iterator();\r
- while (iter.hasNext()) {\r
- String item = (String) iter.next();\r
- newProject.setProperty(item, (String) passdownProperties.get(item));\r
- }\r
-\r
- newProject.setInputHandler(project.getInputHandler());\r
-\r
- Iterator listenerIter = project.getBuildListeners().iterator();\r
- while (listenerIter.hasNext()) {\r
- BuildListener item = (BuildListener) listenerIter.next();\r
+ FpdModuleIdentification fpdModuleId = new FpdModuleIdentification(moduleId, arch);\r
+ \r
+ try {\r
+ //\r
+ // Prepare pass down properties\r
+ // ARCH, MODULE_GUID, MODULE_VERSION, PACKAGE_GUID, PACKAGE_VERSION, PLATFORM_FILE\r
+ //\r
+ Vector<Property> properties = new Vector<Property>();\r
+ Property property = new Property();\r
+ property.setName("ARCH");\r
+ property.setValue(arch);\r
+ properties.add(property);\r
+ \r
+ property = new Property();\r
+ property.setName("MODULE_GUID");\r
+ property.setValue(moduleId.getGuid());\r
+ properties.add(property);\r
+ \r
+ property = new Property();\r
+ property.setName("MODULE_VERSION");\r
+ if (moduleId.getVersion() == null) {\r
+ property.setValue("");\r
+ } else {\r
+ property.setValue(moduleId.getVersion());\r
+ }\r
+ properties.add(property);\r
+ \r
+ property = new Property();\r
+ property.setName("PACKAGE_GUID");\r
+ property.setValue(moduleId.getPackage().getGuid());\r
+ properties.add(property);\r
+ \r
+ property = new Property();\r
+ property.setName("PACKAGE_VERSION");\r
+ if (moduleId.getPackage().getVersion() == null) {\r
+ property.setValue("");\r
+ } else {\r
+ property.setValue(moduleId.getPackage().getVersion());\r
+ }\r
+ properties.add(property);\r
+ \r
+ //\r
+ // Build the Module\r
+ //\r
+ GenBuildTask genBuildTask = new GenBuildTask();\r
+ \r
+ Project newProject = new Project();\r
+ \r
+ Hashtable passdownProperties = project.getProperties();\r
+ Iterator iter = passdownProperties.keySet().iterator();\r
+ while (iter.hasNext()) {\r
+ String item = (String) iter.next();\r
+ newProject.setProperty(item, (String) passdownProperties.get(item));\r
+ }\r
+ \r
+ newProject.setInputHandler(project.getInputHandler());\r
+ \r
+ Iterator listenerIter = project.getBuildListeners().iterator();\r
+ while (listenerIter.hasNext()) {\r
+ newProject.addBuildListener((BuildListener)listenerIter.next());\r
+ }\r
+ \r
+ project.initSubProject(newProject);\r
+ \r
+ genBuildTask.setProject(newProject);\r
+ \r
+ genBuildTask.setExternalProperties(properties);\r
+ \r
+ genBuildTask.parentId = parentModuleId;\r
+ \r
+ genBuildTask.execute();\r
+ } catch (BuildException be) {\r
+ FpdParserForThread.tg.interrupt();\r
+ EdkLog.log("GenBuild", EdkLog.EDK_ALWAYS, moduleId + " with Arch " + arch +" build error. \n" + be.getMessage());\r
+ FpdParserForThread.isError = true; \r
\r
-// if (item instanceof BuildLogger) {\r
-// BuildLogger newLogger = new GenBuildLogger(newProject);\r
-// BuildLogger oldLogger = (BuildLogger)item;\r
-// newLogger.setEmacsMode(true);\r
-// EdkLog.log("GenBuild", EdkLog.EDK_ALWAYS, "########");\r
-// } else {\r
- newProject.addBuildListener(item);\r
-// }\r
+ synchronized (FpdParserForThread.deamonSemaphore) {\r
+ FpdParserForThread.deamonSemaphore.notifyAll();\r
+ }\r
+ return ;\r
}\r
-\r
- project.initSubProject(newProject);\r
-\r
- genBuildTask.setProject(newProject);\r
-\r
- genBuildTask.setExternalProperties(properties);\r
-\r
- genBuildTask.parentId = parentModuleId;\r
-\r
- genBuildTask.perform();\r
-\r
+ \r
status = FpdParserForThread.STATUS_END_RUN;\r
\r
EdkLog.log("GenBuild", EdkLog.EDK_ALWAYS, fpdModuleId + " build finished. ");\r