]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/EfiRomTask.java
Remove FrameworkLogger in FrameworkTasks and EdkException in GenBuild. Update EdkLog...
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / EfiRomTask.java
CommitLineData
a15bb0d3 1/** @file\r
2 EfiRomTask class.\r
3\r
4 EfiRomTask is used to call FlashMap.exe to lay out the flash.\r
ff225cbb 5\r
6\r
a15bb0d3 7 Copyright (c) 2006, Intel Corporation\r
8 All rights reserved. This program and the accompanying materials\r
9 are licensed and made available under the terms and conditions of the BSD License\r
10 which accompanies this distribution. The full text of the license may be found at\r
11 http://opensource.org/licenses/bsd-license.php\r
ff225cbb 12\r
a15bb0d3 13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
15\r
16 **/\r
17package org.tianocore.framework.tasks;\r
18\r
19import java.io.File;\r
20import java.io.InputStreamReader;\r
21import java.util.ArrayList;\r
22import java.util.Iterator;\r
23import java.util.LinkedList;\r
24import java.util.List;\r
25\r
26import org.apache.tools.ant.Task;\r
27import org.apache.tools.ant.Project;\r
28import org.apache.tools.ant.BuildException;\r
ff225cbb 29\r
30import org.tianocore.common.logger.EdkLog;\r
a15bb0d3 31\r
32/**\r
33 * SecFixupTask class.\r
ff225cbb 34 *\r
a15bb0d3 35 * SecFixupTask is used to call SecFixup.exe to fix up sec image.\r
36 */\r
37public class EfiRomTask extends Task implements EfiDefine {\r
38 ///\r
39 /// tool name\r
40 ///\r
41 private final String toolName = "EfiRom";\r
ff225cbb 42\r
a15bb0d3 43 ///\r
44 /// Flash default file\r
45 ///\r
46 private String verbose = "";\r
47\r
48 ///\r
49 /// Flash device\r
50 ///\r
51 private String venderId = "";\r
52\r
53 ///\r
54 /// Flash device Image\r
55 ///\r
56 private String deviceId = "";\r
ff225cbb 57\r
a15bb0d3 58 ///\r
59 /// MCI file\r
60 ///\r
61 private String outputFile = "";\r
ff225cbb 62\r
a15bb0d3 63 ///\r
64 /// MCO file\r
65 ///\r
66 private List<Input> binaryFileList = new ArrayList<Input>();\r
ff225cbb 67\r
a15bb0d3 68 ///\r
69 /// Efi PE32 image file\r
70 ///\r
71 private List<Input> pe32FileList = new ArrayList<Input>();\r
ff225cbb 72\r
a15bb0d3 73 ///\r
74 /// Compress efi PE32 image file\r
75 ///\r
76 private List<Input> pe32ComprFileList = new ArrayList<Input>();\r
ff225cbb 77\r
a15bb0d3 78 ///\r
79 /// Hex class code in the PCI data strutor header\r
80 ///\r
81 private String classCode = "";\r
ff225cbb 82\r
a15bb0d3 83 ///\r
84 /// Hex revision in the PCI data header.\r
85 ///\r
86 private String revision = "";\r
ff225cbb 87\r
a15bb0d3 88 ///\r
89 /// Dump the headers of an existing option rom image.\r
90 ///\r
91 private String dump = "";\r
ff225cbb 92\r
93\r
a15bb0d3 94 ///\r
95 /// output directory\r
96 ///\r
57cc2ee7 97 private String outputDir = ".";\r
ff225cbb 98\r
99\r
a15bb0d3 100 ///\r
101 /// command and argument list\r
102 ///\r
103 LinkedList<String> argList = new LinkedList<String>();\r
104 /**\r
105 * execute\r
ff225cbb 106 *\r
a15bb0d3 107 * EfiRomTask execute function is to assemble tool command line & execute\r
108 * tool command line\r
ff225cbb 109 *\r
a15bb0d3 110 * @throws BuidException\r
111 */\r
112 public void execute() throws BuildException {\r
113\r
114 Project project = this.getOwningTarget().getProject();\r
91f7d582 115\r
a15bb0d3 116 //\r
117 // absolute path of efi tools\r
118 //\r
119 String path = project.getProperty("env.FRAMEWORK_TOOLS_PATH");\r
120 String command;\r
121 if (path == null) {\r
122 command = toolName;\r
123 } else {\r
124 command = path + File.separatorChar + toolName;\r
125 }\r
126 argList.addFirst(command);\r
ff225cbb 127\r
a15bb0d3 128 //\r
129 // add microcode binary files\r
130 //\r
131 if (this.binaryFileList.size() > 0){\r
132 argList.add("-b");\r
133 Iterator binList = this.binaryFileList.iterator();\r
134 while (binList.hasNext()){\r
82810f3b 135 argList.addAll(((Input)binList.next()).getNameList());\r
a15bb0d3 136 }\r
137 }\r
ff225cbb 138\r
a15bb0d3 139 //\r
140 // add pe32 file\r
141 //\r
142 if (this.pe32FileList.size() > 0){\r
143 argList.add("-e");\r
144 Iterator pe32List = this.pe32FileList.iterator();\r
145 while (pe32List.hasNext()){\r
82810f3b 146 argList.addAll(((Input)pe32List.next()).getNameList());\r
a15bb0d3 147 }\r
148 }\r
ff225cbb 149\r
a15bb0d3 150 //\r
151 // add compressed pe32 file\r
152 //\r
153 if (this.pe32ComprFileList.size() > 0){\r
154 argList.add("-ec");\r
155 Iterator pe32ComprList = this.pe32ComprFileList.iterator();\r
156 while (pe32ComprList.hasNext()){\r
82810f3b 157 argList.addAll(((Input)pe32ComprList.next()).getNameList());\r
a15bb0d3 158 }\r
159 }\r
219e2247 160\r
91f7d582 161 EdkLog.log(this, EdkLog.EDK_VERBOSE, argList.toString().replaceAll(",",""));\r
162 EdkLog.log(this, EdkLog.EDK_INFO, " ");\r
219e2247 163\r
a15bb0d3 164 //\r
165 // lauch the program\r
166 //\r
167 ProcessBuilder pb = new ProcessBuilder(argList);\r
168 pb.directory(new File(outputDir));\r
169 int exitCode = 0;\r
170 try {\r
171 Process cmdProc = pb.start();\r
172 InputStreamReader cmdOut = new InputStreamReader(cmdProc.getInputStream());\r
173 char[] buf = new char[1024];\r
174\r
175 exitCode = cmdProc.waitFor();\r
176 if (exitCode != 0) {\r
177 int len = cmdOut.read(buf, 0, 1024);\r
219e2247 178 EdkLog.log(EdkLog.EDK_INFO, new String(buf, 0, len));\r
a15bb0d3 179 } else {\r
219e2247 180 EdkLog.log(EdkLog.EDK_VERBOSE, "EfiRom succeeded!");\r
a15bb0d3 181 }\r
182 } catch (Exception e) {\r
183 throw new BuildException(e.getMessage());\r
184 } finally {\r
185 if (exitCode != 0) {\r
219e2247 186 throw new BuildException("EfiRom failed!");\r
a15bb0d3 187 }\r
188 }\r
189 }\r
ff225cbb 190\r
a15bb0d3 191 /**\r
192 * getVerbose\r
ff225cbb 193 *\r
a15bb0d3 194 * This function is to get class member "verbose"\r
ff225cbb 195 *\r
a15bb0d3 196 * @return verbose for verbose output.\r
197 */\r
198 public String getVerbose() {\r
199 return verbose;\r
200 }\r
ff225cbb 201\r
a15bb0d3 202 /**\r
203 * setVerbose\r
ff225cbb 204 *\r
a15bb0d3 205 * This function is to set class member "verbose"\r
ff225cbb 206 *\r
a15bb0d3 207 * @param verbose for verbose output.\r
208 */\r
209 public void setVerbose(boolean verbose) {\r
210 if (verbose){\r
211 this.verbose = "-p";\r
ff225cbb 212 argList.add(this.verbose);\r
a15bb0d3 213 }\r
214 }\r
ff225cbb 215\r
a15bb0d3 216 /**\r
217 * getVenderId\r
ff225cbb 218 *\r
a15bb0d3 219 * This function is to get class member "venderId"\r
ff225cbb 220 *\r
a15bb0d3 221 * @return venderId String of venderId.\r
222 */\r
223 public String getVenderId() {\r
224 return venderId;\r
225 }\r
ff225cbb 226\r
a15bb0d3 227 /**\r
228 * setVenderId\r
ff225cbb 229 *\r
a15bb0d3 230 * This function is to set class member "venderId"\r
ff225cbb 231 *\r
a15bb0d3 232 * @param venderId String of venderId.\r
233 */\r
234 public void setVenderId(String VenderId) {\r
235 this.venderId = VenderId;\r
236 argList.add("-v");\r
237 argList.add(this.venderId);\r
238 }\r
ff225cbb 239\r
a15bb0d3 240 /**\r
241 * getDeviceId\r
ff225cbb 242 *\r
a15bb0d3 243 * This function is to get class member "deviceId"\r
ff225cbb 244 *\r
a15bb0d3 245 * @return deviceId String of device ID.\r
246 */\r
247 public String getDeviceId() {\r
248 return this.deviceId;\r
249 }\r
ff225cbb 250\r
a15bb0d3 251 /**\r
252 * setDeviceId\r
ff225cbb 253 *\r
a15bb0d3 254 * This function is to set class member "deviceId"\r
ff225cbb 255 *\r
a15bb0d3 256 * @param deviceId String of device ID.\r
257 */\r
258 public void setDeviceId(String deviceId) {\r
259 this.deviceId = deviceId;\r
260 argList.add("-d");\r
261 argList.add(this.deviceId);\r
262 }\r
263\r
ff225cbb 264\r
a15bb0d3 265 /**\r
266 * getOutputFile\r
ff225cbb 267 *\r
a15bb0d3 268 * This function is to get class member "outputFile"\r
ff225cbb 269 *\r
a15bb0d3 270 * @return outputFile name of output directory.\r
271 */\r
272 public String getOutputFile() {\r
273 return outputFile;\r
274 }\r
ff225cbb 275\r
a15bb0d3 276 /**\r
277 * setOutputFile\r
ff225cbb 278 *\r
a15bb0d3 279 * This function is to set class member "dscFile"\r
ff225cbb 280 *\r
a15bb0d3 281 * @param outputFile name of DSC file\r
282 */\r
283 public void setOutputFile(String outputFile) {\r
284 this.outputFile = outputFile;\r
ff225cbb 285\r
a15bb0d3 286 }\r
ff225cbb 287\r
a15bb0d3 288 /**\r
289 * getClassCode\r
ff225cbb 290 *\r
a15bb0d3 291 * This function is to get class member "classCode"\r
ff225cbb 292 *\r
a15bb0d3 293 * @return fdImage name of class code file.\r
294 */\r
295 public String getClassCode() {\r
296 return classCode;\r
297 }\r
ff225cbb 298\r
a15bb0d3 299 /**\r
300 * setclassCode\r
ff225cbb 301 *\r
47f2f011 302 * This function is to set class member "classCode"\r
ff225cbb 303 *\r
a15bb0d3 304 * @param fdImage name of class code file.\r
305 */\r
306 public void setclassCode(String classCode) {\r
307 this.classCode = classCode;\r
308 argList.add("-cc");\r
309 argList.add(this.classCode);\r
310 }\r
ff225cbb 311\r
a15bb0d3 312 /**\r
313 * getRevision\r
ff225cbb 314 *\r
a15bb0d3 315 * This function is to get class member "revision".\r
ff225cbb 316 *\r
a15bb0d3 317 * @return revision hex revision in the PDI data header.\r
318 */\r
319 public String getRevision() {\r
320 return revision;\r
321 }\r
ff225cbb 322\r
a15bb0d3 323 /**\r
324 * setRevision\r
ff225cbb 325 *\r
a15bb0d3 326 * This function is to set class member "revision"\r
ff225cbb 327 *\r
a15bb0d3 328 * @param revision hex revision in the PDI data header.\r
329 */\r
330 public void setRevision(String revision) {\r
331 this.revision = revision;\r
332 argList.add("-rev");\r
333 argList.add(this.revision);\r
334 }\r
ff225cbb 335\r
a15bb0d3 336 /**\r
337 * getFlashDeviceImage\r
ff225cbb 338 *\r
47f2f011 339 * This function is to get class member "dump"\r
ff225cbb 340 *\r
a15bb0d3 341 * @return flashDeviceImage name of flash device image\r
342 */\r
343 public String getDump() {\r
344 return dump;\r
345 }\r
ff225cbb 346\r
a15bb0d3 347 /**\r
348 * setFlashDeviceImage\r
ff225cbb 349 *\r
47f2f011 350 * This function is to set class member "dump"\r
ff225cbb 351 *\r
a15bb0d3 352 * @param flashDeviceImage name of flash device image\r
353 */\r
354 public void setDump(boolean dump) {\r
355 if (dump){\r
356 this.dump = "-dump";\r
357 argList.add(this.dump);\r
358 }\r
359 }\r
360\r
361 /**\r
362 * getOutputDir\r
ff225cbb 363 *\r
a15bb0d3 364 * This function is to get class member "outputDir"\r
ff225cbb 365 *\r
366 * @return outputDir string of output directory\r
a15bb0d3 367 */\r
368 public String getOutputDir() {\r
369 return outputDir;\r
370 }\r
ff225cbb 371\r
a15bb0d3 372 /**\r
373 * setOutputDir\r
ff225cbb 374 *\r
a15bb0d3 375 * This function is to set class member "outputDir"\r
ff225cbb 376 *\r
a15bb0d3 377 * @param outputDir string of output directory\r
378 */\r
379 public void setOutputDir(String outputDir) {\r
380 this.outputDir = outputDir;\r
381 }\r
382 /**\r
383 * addBinaryFile\r
ff225cbb 384 *\r
a15bb0d3 385 * This function is to add binary file to binaryFile list.\r
ff225cbb 386 *\r
a15bb0d3 387 * @param binaryFile name of binary file.\r
388 */\r
389 public void addBinaryFile(Input binaryFile){\r
390 this.binaryFileList.add(binaryFile);\r
391 }\r
ff225cbb 392\r
a15bb0d3 393 /**\r
394 * addPe32File\r
ff225cbb 395 *\r
396 * This function is to add pe32 file to pe32File list.\r
397 *\r
a15bb0d3 398 * @param pe32File name of pe32 file.\r
399 */\r
400 public void addPe32File(Input pe32File){\r
401 this.pe32FileList.add(pe32File);\r
402 }\r
ff225cbb 403\r
a15bb0d3 404 /**\r
405 * addPe32ComprFile\r
ff225cbb 406 *\r
a15bb0d3 407 * This function os to add compressed pe32 file to pe32ComprFile list.\r
ff225cbb 408 *\r
a15bb0d3 409 * @param pe32ComprFile name of compressed pe32 file.\r
410 */\r
411 public void addPe32ComprFile(Input pe32ComprFile){\r
412 this.pe32ComprFileList.add(pe32ComprFile);\r
413 }\r
414}\r