dbcf346c173291ee4d966c16ceb98db216535b1e
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / GenFvImageTask.java
1 /** @file
2 GenFvImageTask class.
3
4 GenFvImageTask is to call GenFvImage.exe to generate FvImage.
5
6 Copyright (c) 2006, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16 package org.tianocore.framework.tasks;
17
18 import org.apache.tools.ant.BuildException;
19 import org.apache.tools.ant.Project;
20 import org.apache.tools.ant.Task;
21 import org.apache.tools.ant.taskdefs.Execute;
22 import org.apache.tools.ant.taskdefs.LogStreamHandler;
23 import org.apache.tools.ant.types.Commandline;
24
25 import java.io.File;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.io.InputStreamReader;
29 import java.lang.ProcessBuilder;
30 import java.util.ArrayList;
31 import java.util.LinkedList;
32 import java.util.List;
33 import java.util.Map;
34
35 /**
36 GenFvImageTask
37
38 GenFvImageTask is to call GenFvImage.exe to generate the FvImage.
39
40 **/
41 public class GenFvImageTask extends Task implements EfiDefine{
42 ///
43 /// tool name
44 ///
45 static final private String toolName = "GenFvImage";
46 ///
47 /// The name of input inf file
48 ///
49 private String infFile="";
50 ///
51 /// Output directory
52 ///
53 private String outputDir = ".";
54 ///
55 /// argument list
56 ///
57 LinkedList<String> argList = new LinkedList<String>();
58
59 /**
60 execute
61
62 GenFvImageTask execute is to assemble tool command line & execute tool
63 command line.
64 **/
65 public void execute() throws BuildException {
66 Project project = this.getOwningTarget().getProject();
67 String path = project.getProperty("env.FRAMEWORK_TOOLS_PATH");
68
69 if (path == null) {
70 path = "";
71 } else {
72 path += File.separatorChar;
73 }
74 argList.addFirst(path + toolName);
75
76 /// lauch the program
77 ///
78 ProcessBuilder pb = new ProcessBuilder(argList);
79 pb.directory(new File(outputDir));
80 int exitCode = 0;
81 try {
82 Process cmdProc = pb.start();
83 InputStreamReader cmdOut = new InputStreamReader(cmdProc.getInputStream());
84 char[] buf = new char[1024];
85
86 exitCode = cmdProc.waitFor();
87 if (exitCode != 0) {
88 int len = cmdOut.read(buf, 0, 1024);
89 log(new String(buf, 0, len), Project.MSG_ERR);
90 } else {
91 log("GenFvImage - DONE!", Project.MSG_VERBOSE);
92 }
93 } catch (Exception e) {
94 throw new BuildException(e.getMessage());
95 } finally {
96 if (exitCode != 0) {
97 //throw new BuildException("GenFvImage: failed to generate FV file!");
98 }
99 }
100
101 }
102 /**
103 getInfFile
104
105 This function is to get class member of infFile
106 @return String name of infFile
107 **/
108 public String getInfFile() {
109 return infFile;
110 }
111
112 /**
113 setInfFile
114
115 This function is to set class member of infFile.
116
117 @param infFile name of infFile
118 **/
119 public void setInfFile(String infFile) {
120 this.infFile = infFile;
121 argList.add("-I");
122 argList.add(infFile);
123 }
124
125 /**
126 getOutputDir
127
128 This function is to get output directory.
129
130 @return Path of output directory.
131 **/
132 public String getOutputDir() {
133 return outputDir;
134 }
135
136 /**
137 setOutputDir
138
139 This function is to set output directory.
140
141 @param outputDir The output direcotry.
142 **/
143 public void setOutputDir(String outputDir) {
144 this.outputDir = outputDir;
145 }
146 }