--- /dev/null
+/** @file\r
+ EfiRomTask class.\r
+\r
+ EfiRomTask is used to call FlashMap.exe to lay out the flash.\r
+\r
+\r
+ Copyright (c) 2006, Intel Corporation\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+ **/\r
+package org.tianocore.framework.tasks;\r
+\r
+import java.io.File;\r
+import java.util.LinkedList;\r
+\r
+import org.apache.tools.ant.BuildException;\r
+import org.apache.tools.ant.Project;\r
+import org.apache.tools.ant.Task;\r
+import org.tianocore.common.logger.EdkLog;\r
+import org.apache.tools.ant.taskdefs.Execute;\r
+import org.apache.tools.ant.taskdefs.LogStreamHandler;\r
+import org.apache.tools.ant.types.Commandline;\r
+\r
+/**\r
+ SecFixupTask class.\r
+ \r
+ SecFixupTask is used to call SecFixup.exe to fix up sec image.\r
+ **/\r
+public class EfiRomTask extends Task implements EfiDefine {\r
+ //\r
+ // tool name\r
+ //\r
+ private final static String toolName = "EfiRom";\r
+\r
+ //\r
+ // Flash default file\r
+ //\r
+ private ToolArg verbose = new ToolArg();\r
+\r
+ //\r
+ // Flash device\r
+ //\r
+ private ToolArg venderId = new ToolArg();\r
+\r
+ //\r
+ // Flash device Image\r
+ //\r
+ private ToolArg deviceId = new ToolArg();\r
+\r
+ //\r
+ // output file\r
+ //\r
+ private FileArg outputFile = new FileArg();\r
+\r
+ //\r
+ // binary file\r
+ //\r
+ private Input binaryFileList = new Input();\r
+\r
+ //\r
+ // Efi PE32 image file\r
+ //\r
+ private Input pe32FileList = new Input();\r
+\r
+ //\r
+ // Compress efi PE32 image file\r
+ //\r
+ private Input pe32ComprFileList = new Input();\r
+\r
+ //\r
+ // Hex class code in the PCI data strutor header\r
+ //\r
+ private ToolArg classCode = new ToolArg();\r
+\r
+ //\r
+ // Hex revision in the PCI data header.\r
+ //\r
+ private ToolArg revision = new ToolArg();\r
+\r
+ //\r
+ // Dump the headers of an existing option rom image.\r
+ //\r
+ private ToolArg dump = new ToolArg();\r
+\r
+ //\r
+ // output directory\r
+ //\r
+ private String outputDir = ".";\r
+\r
+ //\r
+ // command and argument list\r
+ //\r
+ LinkedList<String> argList = new LinkedList<String>();\r
+\r
+ /**\r
+ execute\r
+ \r
+ EfiRomTask execute function is to assemble tool command line & execute\r
+ tool command line\r
+ \r
+ @throws BuidException\r
+ **/\r
+ public void execute() throws BuildException {\r
+\r
+ Project project = this.getOwningTarget().getProject();\r
+\r
+ //\r
+ // absolute path of efi tools\r
+ //\r
+ String path = project.getProperty("env.FRAMEWORK_TOOLS_PATH");\r
+ String command;\r
+ if (path == null) {\r
+ command = toolName;\r
+ } else {\r
+ command = path + File.separator + toolName;\r
+ }\r
+\r
+ String argument = "" + verbose + venderId + deviceId + dump + revision + classCode \r
+ + binaryFileList.toStringWithSinglepPrefix(" -b ")\r
+ + pe32FileList.toStringWithSinglepPrefix(" -e ")\r
+ + pe32ComprFileList.toStringWithSinglepPrefix(" -ec ")\r
+ + outputFile;\r
+\r
+ try {\r
+ Commandline cmdline = new Commandline();\r
+ cmdline.setExecutable(command);\r
+ cmdline.createArgument().setLine(argument);\r
+\r
+ LogStreamHandler streamHandler = new LogStreamHandler(this,\r
+ Project.MSG_INFO, Project.MSG_WARN);\r
+ Execute runner = new Execute(streamHandler, null);\r
+\r
+ runner.setAntRun(project);\r
+ runner.setCommandline(cmdline.getCommandline());\r
+ runner.setWorkingDirectory(new File(outputDir));\r
+\r
+ EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(cmdline.getCommandline()));\r
+ EdkLog.log(this, EdkLog.EDK_INFO, binaryFileList.toFileList() \r
+ + pe32FileList.toFileList() + pe32ComprFileList.toFileList()\r
+ + " => " + outputFile.toFileList());\r
+\r
+ int exitCode = runner.execute();\r
+ if (exitCode != 0) {\r
+ //\r
+ // command execution fail\r
+ //\r
+ EdkLog.log(this, "ERROR = " + Integer.toHexString(exitCode));\r
+ throw new BuildException(toolName + " failed!");\r
+ } else {\r
+ EdkLog.log(this, EdkLog.EDK_VERBOSE, toolName + " succeeded!");\r
+ }\r
+ } catch (Exception e) {\r
+ throw new BuildException(e.getMessage());\r
+ }\r
+ }\r
+\r
+ /**\r
+ getVerbose\r
+ \r
+ This function is to get class member "verbose"\r
+ \r
+ @return verbose for verbose output.\r
+ **/\r
+ public String getVerbose() {\r
+ return verbose.getValue();\r
+ }\r
+\r
+ /**\r
+ setVerbose\r
+ \r
+ This function is to set class member "verbose"\r
+ \r
+ @param verbose for verbose output.\r
+ **/\r
+ public void setVerbose(boolean verbose) {\r
+ if (verbose){\r
+ this.verbose.setArg(" -", "p");\r
+ }\r
+ }\r
+\r
+ /**\r
+ getVenderId\r
+ \r
+ This function is to get class member "venderId"\r
+ \r
+ @return venderId String of venderId.\r
+ **/\r
+ public String getVenderId() {\r
+ return venderId.getValue();\r
+ }\r
+\r
+ /**\r
+ setVenderId\r
+ \r
+ This function is to set class member "venderId"\r
+ \r
+ @param venderId String of venderId.\r
+ **/\r
+ public void setVenderId(String venderId) {\r
+ this.venderId.setArg(" -v ", venderId);\r
+ }\r
+\r
+ /**\r
+ getDeviceId\r
+ \r
+ This function is to get class member "deviceId"\r
+ \r
+ @return deviceId String of device ID.\r
+ **/\r
+ public String getDeviceId() {\r
+ return this.deviceId.getValue();\r
+ }\r
+\r
+ /**\r
+ setDeviceId\r
+ \r
+ This function is to set class member "deviceId"\r
+ \r
+ @param deviceId String of device ID.\r
+ **/\r
+ public void setDeviceId(String deviceId) {\r
+ this.deviceId.setArg(" -d ", deviceId);\r
+ }\r
+\r
+\r
+ /**\r
+ getOutputFile\r
+ \r
+ This function is to get class member "outputFile"\r
+ \r
+ @return outputFile name of output directory.\r
+ **/\r
+ public String getOutputFile() {\r
+ return outputFile.getValue();\r
+ }\r
+\r
+ /**\r
+ setOutputFile\r
+ \r
+ This function is to set class member "dscFile"\r
+ \r
+ @param outputFile name of DSC file\r
+ **/\r
+ public void setOutputFile(String outputFile) {\r
+ this.outputFile.setArg(" -o ", outputFile);\r
+ }\r
+\r
+ /**\r
+ getClassCode\r
+ \r
+ This function is to get class member "classCode"\r
+ \r
+ @return fdImage name of class code file.\r
+ **/\r
+ public String getClassCode() {\r
+ return classCode.getValue();\r
+ }\r
+\r
+ /**\r
+ setclassCode\r
+ \r
+ This function is to set class member "classCode"\r
+ \r
+ @param fdImage name of class code file.\r
+ **/\r
+ public void setclassCode(String classCode) {\r
+ this.classCode.setArg(" -cc ", classCode);\r
+ }\r
+\r
+ /**\r
+ getRevision\r
+ \r
+ This function is to get class member "revision".\r
+ \r
+ @return revision hex revision in the PDI data header.\r
+ **/\r
+ public String getRevision() {\r
+ return revision.getValue();\r
+ }\r
+\r
+ /**\r
+ setRevision\r
+ \r
+ This function is to set class member "revision"\r
+ \r
+ @param revision hex revision in the PDI data header.\r
+ **/\r
+ public void setRevision(String revision) {\r
+ this.revision.setArg(" -rev ", revision);\r
+ }\r
+\r
+ /**\r
+ getFlashDeviceImage\r
+ \r
+ This function is to get class member "dump"\r
+ \r
+ @return flashDeviceImage name of flash device image\r
+ **/\r
+ public String getDump() {\r
+ return dump.getValue();\r
+ }\r
+\r
+ /**\r
+ setFlashDeviceImage\r
+ \r
+ This function is to set class member "dump"\r
+ \r
+ @param flashDeviceImage name of flash device image\r
+ **/\r
+ public void setDump(boolean dump) {\r
+ if (dump) {\r
+ this.dump.setArg(" -", "dump");\r
+ }\r
+ }\r
+\r
+ /**\r
+ getOutputDir\r
+ \r
+ This function is to get class member "outputDir"\r
+ \r
+ @return outputDir string of output directory\r
+ **/\r
+ public String getOutputDir() {\r
+ return outputDir;\r
+ }\r
+\r
+ /**\r
+ setOutputDir\r
+ \r
+ This function is to set class member "outputDir"\r
+ \r
+ @param outputDir string of output directory\r
+ **/\r
+ public void setOutputDir(String outputDir) {\r
+ this.outputDir = outputDir;\r
+ }\r
+\r
+ /**\r
+ addBinaryFile\r
+ \r
+ This function is to add binary file to binaryFile list.\r
+ \r
+ @param binaryFile name of binary file.\r
+ **/\r
+ public void addConfiguredBinaryFile(Input binaryFile){\r
+ this.binaryFileList.insert(binaryFile);\r
+ }\r
+\r
+ /**\r
+ addPe32File\r
+ \r
+ This function is to add pe32 file to pe32File list.\r
+ \r
+ @param pe32File name of pe32 file.\r
+ **/\r
+ public void addConfiguredPe32File(Input pe32File){\r
+ this.pe32FileList.insert(pe32File);\r
+ }\r
+\r
+ /**\r
+ addPe32ComprFile\r
+ \r
+ This function os to add compressed pe32 file to pe32ComprFile list.\r
+ \r
+ @param pe32ComprFile name of compressed pe32 file.\r
+ **/\r
+ public void addConfiguredPe32ComprFile(Input pe32ComprFile){\r
+ this.pe32ComprFileList.insert(pe32ComprFile);\r
+ }\r
+}\r