]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/VfrCompilerTask.java
Added DllPath attribute
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / VfrCompilerTask.java
CommitLineData
878ddf1f 1/** @file\r
2This file is to define an ANT task which wraps VfrCompile.exe tool\r
3\r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14package org.tianocore.framework.tasks;\r
15\r
219e2247 16import java.io.File;\r
878ddf1f 17import java.io.IOException;\r
18import java.util.ArrayList;\r
19import java.util.List;\r
20\r
21import org.apache.tools.ant.BuildException;\r
22import org.apache.tools.ant.Project;\r
23import org.apache.tools.ant.Task;\r
24import org.apache.tools.ant.taskdefs.Execute;\r
25import org.apache.tools.ant.taskdefs.LogStreamHandler;\r
26import org.apache.tools.ant.types.Commandline;\r
27\r
93f5dd0a 28import org.tianocore.common.logger.EdkLog;\r
29\r
878ddf1f 30/**\r
31 VfrcompilerTask Task Class\r
32 class member \r
33 -createListFile : create an output IFR listing file.\r
34 -outPutDir : deposit all output files to directory OutputDir (default=cwd)\r
35 -createIfrBinFile: create an IFR HII pack file\r
36 -vfrFile : name of the input VFR script file\r
37 -processArg : c processer argument\r
38 -includepathList : add IncPath to the search path for VFR included files\r
39 **/\r
40public class VfrCompilerTask extends Task implements EfiDefine {\r
93f5dd0a 41 private static String toolName = "VfrCompile";\r
878ddf1f 42\r
93f5dd0a 43 private ToolArg createListFile = new ToolArg();\r
44 private ToolArg createIfrBinFile = new ToolArg();\r
45 private ToolArg processerArg = new ToolArg();\r
46 private FileArg vfrFile = new FileArg();\r
47 private IncludePath includepathList = new IncludePath();\r
48 private FileArg outPutDir = new FileArg(" -od ", ".");\r
e4b5a8c3 49 private String dllPath = "";\r
878ddf1f 50\r
51 /**\r
52 get class member of createList file\r
53\r
54 @returns file name of createList\r
55 **/\r
93f5dd0a 56 public boolean getCreateListFile() {\r
57 return this.createListFile.getValue().length() > 0;\r
878ddf1f 58 }\r
59\r
60 /**\r
61 set class member of createList file\r
62\r
63 @param createListFile if createList string equal "on" set '-l' flag\r
64 **/\r
93f5dd0a 65 public void setCreateListFile(boolean createListFile) {\r
66 if (createListFile) {\r
67 this.createListFile.setArg(" -", "l");\r
68 }\r
878ddf1f 69 }\r
70\r
71 /**\r
72 get output dir \r
73\r
74 @returns name of output dir\r
75 **/\r
76 public String getOutPutDir() {\r
93f5dd0a 77 return this.outPutDir.getValue();\r
878ddf1f 78 }\r
79\r
80 /**\r
81 set class member of outPutDir\r
82\r
83 @param outPutDir The directory name for ouput file\r
84 **/\r
85 public void setOutPutDir(String outPutDir) {\r
93f5dd0a 86 this.outPutDir.setArg(" -od ", outPutDir);\r
878ddf1f 87 }\r
88\r
89\r
90 /**\r
91 get class member of ifrBinFile\r
92\r
93 @return file name of ifrBinFile\r
94 **/\r
93f5dd0a 95 public boolean getCreateIfrBinFile() {\r
96 return this.createIfrBinFile.getValue().length() > 0;\r
878ddf1f 97 }\r
98\r
99 /**\r
100 set class member of ifrBinFile \r
101\r
102 @param createIfrBinFile The flag to specify if the IFR binary file should\r
103 be generated or not\r
104 */\r
93f5dd0a 105 public void setCreateIfrBinFile(boolean createIfrBinFile) {\r
106 if (createIfrBinFile) {\r
107 this.createIfrBinFile.setArg(" -", "ibin");\r
108 }\r
878ddf1f 109 }\r
110\r
111 /**\r
112 get class member of vfrFile\r
113\r
114 @returns name of vfrFile\r
115 **/\r
116 public String getVfrFile() {\r
93f5dd0a 117 return this.vfrFile.getValue();\r
878ddf1f 118 }\r
119\r
120 /**\r
121 set class member of vfrFile \r
122\r
123 @param vfrFile The name of VFR file\r
124 **/\r
125 public void setVfrFile(String vfrFile) {\r
93f5dd0a 126 this.vfrFile.setArg(" ", vfrFile);\r
878ddf1f 127 }\r
128\r
129 /**\r
130 add includePath in includepath List \r
131\r
132 @param includepath The IncludePath object which represents include path\r
133 **/\r
93f5dd0a 134 public void addConfiguredIncludepath(IncludePath includepath){\r
135 this.includepathList.insert(includepath);\r
878ddf1f 136 }\r
137\r
878ddf1f 138 /**\r
139 get class member of processerArg\r
140\r
141 @returns processer argument\r
142 **/\r
143 public String getProcesserArg() {\r
93f5dd0a 144 return this.processerArg.getValue();\r
878ddf1f 145 }\r
146\r
147\r
148 /**\r
149 set class member of processerArg\r
150\r
151 @param processerArg The processor argument\r
152 */\r
153 public void setProcesserArg(String processerArg) {\r
93f5dd0a 154 this.processerArg.setArg(" -ppflag ", processerArg);\r
878ddf1f 155 }\r
156\r
e4b5a8c3 157 public void setDllPath(String dllPath) {\r
158 this.dllPath = dllPath;\r
159 }\r
160\r
878ddf1f 161 /**\r
162 The standard execute method of ANT task.\r
163 **/\r
164 public void execute() throws BuildException {\r
165 Project project = this.getProject();\r
2da8968b 166 String toolPath= project.getProperty("env.FRAMEWORK_TOOLS_PATH");\r
878ddf1f 167 String command;\r
168 if (toolPath == null) {\r
93f5dd0a 169 command = toolName;\r
878ddf1f 170 } else {\r
93f5dd0a 171 command = toolPath + File.separator + toolName;\r
878ddf1f 172 }\r
878ddf1f 173\r
93f5dd0a 174 String argument = "" + createIfrBinFile\r
175 + processerArg \r
176 + includepathList\r
177 + outPutDir\r
178 + createListFile\r
179 + vfrFile;\r
878ddf1f 180 try {\r
181 ///\r
182 /// constructs the command-line\r
183 ///\r
184 Commandline commandLine = new Commandline();\r
185 commandLine.setExecutable(command);\r
186 commandLine.createArgument().setLine(argument);\r
187\r
188 ///\r
189 /// configures the Execute object\r
190 ///\r
191 LogStreamHandler streamHandler = new LogStreamHandler(this,\r
192 Project.MSG_INFO,\r
193 Project.MSG_WARN);\r
194\r
195 Execute runner = new Execute(streamHandler,null);\r
93f5dd0a 196 runner.setAntRun(project); \r
878ddf1f 197 runner.setCommandline(commandLine.getCommandline());\r
93f5dd0a 198 runner.setWorkingDirectory(new File(outPutDir.getValue())); \r
e4b5a8c3 199 runner.setEnvironment(new String[]{"PATH", dllPath});\r
caa44816 200 \r
93f5dd0a 201 EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(commandLine.getCommandline()));\r
202 EdkLog.log(this, vfrFile.toFileList());\r
878ddf1f 203\r
878ddf1f 204 int returnVal = runner.execute();\r
205 if (EFI_SUCCESS == returnVal) {\r
93f5dd0a 206 EdkLog.log(this, EdkLog.EDK_VERBOSE, "VfrCompile succeeded!");\r
878ddf1f 207 } else {\r
93f5dd0a 208 EdkLog.log(this, "ERROR = " + Integer.toHexString(returnVal));\r
3f7b510e 209 throw new BuildException("VfrCompile failed!");\r
878ddf1f 210 }\r
878ddf1f 211 } catch (IOException e) {\r
212 throw new BuildException(e.getMessage());\r
213 }\r
214 }\r
3f7b510e 215}\r