]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/EfiRomTask.java
1) Applied ToolArg and FileArg class to represent tool arguments
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / EfiRomTask.java
index 7eb987854a2e4ad2dc8d3639ce2ce9ec9804e55e..caa77477adfc16f6e0286081746a0acb2563a93a 100644 (file)
@@ -23,92 +23,95 @@ import java.util.Iterator;
 import java.util.LinkedList;\r
 import java.util.List;\r
 \r
-import org.apache.tools.ant.Task;\r
-import org.apache.tools.ant.Project;\r
 import org.apache.tools.ant.BuildException;\r
-\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
+import com.sun.org.apache.bcel.internal.generic.NEW;\r
 \r
 /**\r
* SecFixupTask class.\r
- *\r
* SecFixupTask is used to call SecFixup.exe to fix up sec image.\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 String toolName = "EfiRom";\r
-\r
-    ///\r
-    /// Flash default file\r
-    ///\r
-    private String verbose = "";\r
-\r
-    ///\r
-    /// Flash device\r
-    ///\r
-    private String venderId = "";\r
-\r
-    ///\r
-    /// Flash device Image\r
-    ///\r
-    private String deviceId = "";\r
-\r
-    ///\r
-    /// MCI file\r
-    ///\r
-    private String outputFile = "";\r
-\r
-    ///\r
-    /// MCO file\r
-    ///\r
-    private List<Input> binaryFileList = new ArrayList<Input>();\r
-\r
-    ///\r
-    /// Efi PE32 image file\r
-    ///\r
-    private List<Input> pe32FileList = new ArrayList<Input>();\r
-\r
-    ///\r
-    /// Compress efi PE32 image file\r
-    ///\r
-    private List<Input> pe32ComprFileList = new ArrayList<Input>();\r
-\r
-    ///\r
-    /// Hex class code in the PCI data strutor header\r
-    ///\r
-    private String classCode = "";\r
-\r
-    ///\r
-    /// Hex revision in the PCI data header.\r
-    ///\r
-    private String revision = "";\r
-\r
-    ///\r
-    /// Dump the headers of an existing option rom image.\r
-    ///\r
-    private String dump = "";\r
-\r
-\r
-    ///\r
-    /// output directory\r
-    ///\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
-    ///\r
-    /// command and argument list\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
+      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
@@ -121,294 +124,259 @@ public class EfiRomTask extends Task implements EfiDefine {
         if (path == null) {\r
             command = toolName;\r
         } else {\r
-            command = path + File.separatorChar + toolName;\r
+            command = path + File.separator + toolName;\r
         }\r
-        argList.addFirst(command);\r
 \r
-        //\r
-        // add microcode binary files\r
-        //\r
-        if (this.binaryFileList.size() > 0){\r
-            argList.add("-b");\r
-            Iterator binList = this.binaryFileList.iterator();\r
-            while (binList.hasNext()){\r
-                argList.addAll(((Input)binList.next()).getNameList());\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
-        //\r
-        // add pe32 file\r
-        //\r
-        if (this.pe32FileList.size() > 0){\r
-            argList.add("-e");\r
-            Iterator pe32List = this.pe32FileList.iterator();\r
-            while (pe32List.hasNext()){\r
-                argList.addAll(((Input)pe32List.next()).getNameList());\r
-            }\r
-        }\r
+        try {\r
+            Commandline cmdline = new Commandline();\r
+            cmdline.setExecutable(command);\r
+            cmdline.createArgument().setLine(argument);\r
 \r
-        //\r
-        // add compressed pe32 file\r
-        //\r
-        if (this.pe32ComprFileList.size() > 0){\r
-            argList.add("-ec");\r
-            Iterator pe32ComprList = this.pe32ComprFileList.iterator();\r
-            while (pe32ComprList.hasNext()){\r
-                argList.addAll(((Input)pe32ComprList.next()).getNameList());\r
-            }\r
-        }\r
+            LogStreamHandler streamHandler = new LogStreamHandler(this,\r
+                    Project.MSG_INFO, Project.MSG_WARN);\r
+            Execute runner = new Execute(streamHandler, null);\r
 \r
-        EdkLog.log(this, EdkLog.EDK_VERBOSE, argList.toString().replaceAll(",",""));\r
-        EdkLog.log(this, EdkLog.EDK_INFO, " ");\r
+            runner.setAntRun(project);\r
+            runner.setCommandline(cmdline.getCommandline());\r
+            runner.setWorkingDirectory(new File(outputDir));\r
 \r
-        //\r
-        // lauch the program\r
-        //\r
-        ProcessBuilder pb = new ProcessBuilder(argList);\r
-        pb.directory(new File(outputDir));\r
-        int exitCode = 0;\r
-        try {\r
-            Process cmdProc = pb.start();\r
-            InputStreamReader cmdOut = new InputStreamReader(cmdProc.getInputStream());\r
-            char[] buf = new char[1024];\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
-            exitCode = cmdProc.waitFor();\r
+            int exitCode = runner.execute();\r
             if (exitCode != 0) {\r
-                int len = cmdOut.read(buf, 0, 1024);\r
-                EdkLog.log(EdkLog.EDK_INFO, new String(buf, 0, len));\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(EdkLog.EDK_VERBOSE, "EfiRom succeeded!");\r
+                EdkLog.log(this, EdkLog.EDK_VERBOSE, toolName + " succeeded!");\r
             }\r
         } catch (Exception e) {\r
             throw new BuildException(e.getMessage());\r
-        } finally {\r
-            if (exitCode != 0) {\r
-                throw new BuildException("EfiRom failed!");\r
-            }\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
+      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;\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
+      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 = "-p";\r
-            argList.add(this.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
+      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;\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 = VenderId;\r
-        argList.add("-v");\r
-        argList.add(this.venderId);\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
+      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;\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
+      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 = deviceId;\r
-        argList.add("-d");\r
-        argList.add(this.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
+      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;\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
+      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 = outputFile;\r
-\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
+      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;\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
+      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 = classCode;\r
-        argList.add("-cc");\r
-        argList.add(this.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
+      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;\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
+      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 = revision;\r
-        argList.add("-rev");\r
-        argList.add(this.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
+      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;\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
+      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 = "-dump";\r
-            argList.add(this.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
+      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
+      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 addBinaryFile(Input binaryFile){\r
-        this.binaryFileList.add(binaryFile);\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 addPe32File(Input pe32File){\r
-        this.pe32FileList.add(pe32File);\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 addPe32ComprFile(Input pe32ComprFile){\r
-        this.pe32ComprFileList.add(pe32ComprFile);\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