]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/GenBuild/org/tianocore/build/GenBuildThread.java
Add thread control classes. (2)
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / GenBuildThread.java
1 /** @file
2 This file is for single module thread definition.
3
4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13 package org.tianocore.build;
14
15 import java.util.Hashtable;
16 import java.util.Iterator;
17 import java.util.LinkedHashSet;
18 import java.util.Set;
19 import java.util.Vector;
20
21 import org.apache.tools.ant.BuildListener;
22 import org.apache.tools.ant.Project;
23 import org.apache.tools.ant.taskdefs.Property;
24 import org.tianocore.build.GenBuildTask;
25 import org.tianocore.build.fpd.FpdParserForThread;
26 import org.tianocore.build.id.FpdModuleIdentification;
27 import org.tianocore.build.id.ModuleIdentification;
28
29 /**
30 Add more comment here.
31
32 @since GenBuild 1.0
33 **/
34 public class GenBuildThread implements Runnable {
35
36 private ModuleIdentification parentModuleId = null;
37
38 private ModuleIdentification moduleId = null;
39
40 private Set<FpdModuleIdentification> dependencies = new LinkedHashSet<FpdModuleIdentification>();
41
42 private int status = FpdParserForThread.STATUS_DEPENDENCY_NOT_READY;
43
44 private Project project = null;
45
46 public Object semaphore = new Object();
47
48 private String arch = null;
49
50 private boolean highPriority = false;
51
52 private Thread thread;
53
54 public GenBuildThread() {
55 thread = new Thread(this);
56 }
57
58 public boolean start() {
59 if (highPriority) {
60 thread.setPriority(Thread.MAX_PRIORITY);
61 }
62
63 status = FpdParserForThread.STATUS_START_RUN;
64 thread.start();
65 return true;
66 }
67
68 public void run() {
69
70 FpdModuleIdentification fpdModuleId = new FpdModuleIdentification(moduleId, arch);
71
72 //
73 // Prepare pass down properties
74 // ARCH, MODULE_GUID, MODULE_VERSION, PACKAGE_GUID, PACKAGE_VERSION, PLATFORM_FILE
75 //
76 Vector<Property> properties = new Vector<Property>();
77 Property property = new Property();
78 property.setName("ARCH");
79 property.setValue(arch);
80 properties.add(property);
81
82 property = new Property();
83 property.setName("MODULE_GUID");
84 property.setValue(moduleId.getGuid());
85 properties.add(property);
86
87 property = new Property();
88 property.setName("MODULE_VERSION");
89 if (moduleId.getVersion() == null) {
90 property.setValue("");
91 } else {
92 property.setValue(moduleId.getVersion());
93 }
94 properties.add(property);
95
96 property = new Property();
97 property.setName("PACKAGE_GUID");
98 property.setValue(moduleId.getPackage().getGuid());
99 properties.add(property);
100
101 property = new Property();
102 property.setName("PACKAGE_VERSION");
103 if (moduleId.getPackage().getVersion() == null) {
104 property.setValue("");
105 } else {
106 property.setValue(moduleId.getPackage().getVersion());
107 }
108 properties.add(property);
109
110 // property = new Property();
111 // property.setName("PLATFORM_FILE");
112 // property.setValue(arch);
113 // properties.add(property);
114
115 //
116 // Build the Module
117 //
118 GenBuildTask genBuildTask = new GenBuildTask();
119
120 Project newProject = new Project();
121
122 Hashtable passdownProperties = project.getProperties();
123 Iterator iter = passdownProperties.keySet().iterator();
124 while (iter.hasNext()) {
125 String item = (String) iter.next();
126 newProject.setProperty(item, (String) passdownProperties.get(item));
127 }
128
129 newProject.setInputHandler(project.getInputHandler());
130
131 Iterator listenerIter = project.getBuildListeners().iterator();
132 while (listenerIter.hasNext()) {
133 newProject.addBuildListener((BuildListener) listenerIter.next());
134 }
135
136 project.initSubProject(newProject);
137
138 genBuildTask.setProject(newProject);
139
140 genBuildTask.setExternalProperties(properties);
141
142 genBuildTask.parentId = parentModuleId;
143
144 genBuildTask.perform();
145
146 status = FpdParserForThread.STATUS_END_RUN;
147
148 System.out.println(fpdModuleId + " build finished. ");
149
150 //
151 //
152 //
153 synchronized (FpdParserForThread.deamonSemaphore) {
154 FpdParserForThread.subCount();
155 FpdParserForThread.deamonSemaphore.notifyAll();
156 }
157 }
158
159 public void setArch(String arch) {
160 this.arch = arch;
161 }
162
163 public void setDependencies(Set<FpdModuleIdentification> dependencies) {
164 this.dependencies = dependencies;
165 }
166
167 public void setModuleId(ModuleIdentification moduleId) {
168 this.moduleId = moduleId;
169 }
170
171 public void setParentModuleId(ModuleIdentification parentModuleId) {
172 this.parentModuleId = parentModuleId;
173 }
174
175 public void setProject(Project project) {
176 this.project = project;
177 }
178
179 public void setHighPriority(boolean highPriority) {
180 this.highPriority = highPriority;
181 }
182
183
184 public Set<FpdModuleIdentification> getDependencies() {
185 return dependencies;
186 }
187
188 public ModuleIdentification getModuleId() {
189 return moduleId;
190 }
191
192 public int getStatus() {
193 //
194 // Add code here to judge dependency
195 //
196 if (status == FpdParserForThread.STATUS_DEPENDENCY_NOT_READY) {
197 Iterator<FpdModuleIdentification> iter = dependencies.iterator();
198 boolean flag = true;
199 while (iter.hasNext()) {
200 FpdModuleIdentification item = iter.next();
201 if (FpdParserForThread.allThreads.get(item).getStatus() == 1) {
202 flag = false;
203 break ;
204 }
205 }
206 if (flag) {
207 status = FpdParserForThread.STATUS_DEPENDENCY_READY;
208 }
209 }
210 return status;
211 }
212
213 public void setStatus(int status) {
214 this.status = status;
215 }
216
217 }