Added outputDir attribute to support generating FV file in specified directory

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@273 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jwang36 2006-05-25 07:45:15 +00:00
parent f76fd83e6f
commit d05003bed6
1 changed files with 80 additions and 58 deletions

View File

@ -14,7 +14,6 @@
**/ **/
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File;
import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
@ -23,6 +22,16 @@ import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.ProcessBuilder;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/** /**
GenFvImageTask GenFvImageTask
@ -30,6 +39,10 @@ import org.apache.tools.ant.types.Commandline;
**/ **/
public class GenFvImageTask extends Task implements EfiDefine{ public class GenFvImageTask extends Task implements EfiDefine{
///
/// tool name
///
static final private String toolName = "GenFvImage";
/// ///
/// The name of input inf file /// The name of input inf file
/// ///
@ -38,7 +51,15 @@ public class GenFvImageTask extends Task implements EfiDefine{
/// The target architecture. /// The target architecture.
/// ///
private String arch=""; private String arch="";
///
/// Output directory
///
private String outputDir = ".";
///
/// argument list
///
LinkedList<String> argList = new LinkedList<String>();
/** /**
execute execute
@ -48,67 +69,44 @@ public class GenFvImageTask extends Task implements EfiDefine{
public void execute() throws BuildException { public void execute() throws BuildException {
Project project = this.getOwningTarget().getProject(); Project project = this.getOwningTarget().getProject();
String path = project.getProperty("env.Framework_Tools_Path"); String path = project.getProperty("env.Framework_Tools_Path");
String command = ""; if (path == null) {
if (path == null){
path = ""; path = "";
}else { } else {
path = path + File.separatorChar; path += File.separatorChar;
} }
if (arch.equalsIgnoreCase("")){ if (arch != null && arch.length() > 0) {
command = path + "GenFvImage"; argList.addFirst(path + toolName + "_" + arch);
} else {
argList.addFirst(path + toolName);
} }
if (arch.equalsIgnoreCase("ia32")){
command = path + "GenFvImage_IA32"; ///
} /// lauch the program
if (arch.equalsIgnoreCase("x64")){ ///
command = path + "GenFvImage_X64"; ProcessBuilder pb = new ProcessBuilder(argList);
} pb.directory(new File(outputDir));
if (arch.equalsIgnoreCase("ipf")){ int exitCode = 0;
command = path + "GenFvImage_IPF";
}
String argument = infFile;
try { try {
Process cmdProc = pb.start();
Commandline commandLine = new Commandline(); InputStreamReader cmdOut = new InputStreamReader(cmdProc.getInputStream());
commandLine.setExecutable(command); char[] buf = new char[1024];
commandLine.createArgument().setLine(argument);
exitCode = cmdProc.waitFor();
LogStreamHandler streamHandler = new LogStreamHandler(this, if (exitCode != 0) {
Project.MSG_INFO, int len = cmdOut.read(buf, 0, 1024);
Project.MSG_WARN); log(new String(buf, 0, len), Project.MSG_ERR);
//
// create a execute object and set it's commandline
//
Execute runner = new Execute(streamHandler,null);
runner.setAntRun(project);
runner.setCommandline(commandLine.getCommandline());
System.out.println(Commandline.toString(commandLine.getCommandline()));
int revl = -1;
//
// user execute class call external programs - GenFvImage
//
revl = runner.execute();
//
// execute command line success!
//
if (EFI_SUCCESS == revl){
System.out.println("GenFvImage succeeded!");
} else { } else {
log("GenFvImage - DONE!", Project.MSG_VERBOSE);
//
// execute command line failed!
//
throw new BuildException("GenFvImage failed !(error =" +
Integer.toHexString(revl) + ")");
} }
} catch (Exception e) { } catch (Exception e) {
System.out.println(e.getMessage()); throw new BuildException(e.getMessage());
} } finally {
if (exitCode != 0) {
throw new BuildException("GenFvImage: failed to generate FV file!");
}
}
} }
/** /**
getInfFile getInfFile
@ -128,7 +126,9 @@ public class GenFvImageTask extends Task implements EfiDefine{
@param infFile name of infFile @param infFile name of infFile
**/ **/
public void setInfFile(String infFile) { public void setInfFile(String infFile) {
this.infFile = "-I " + infFile; this.infFile = infFile;
argList.add("-I");
argList.add(infFile);
} }
/** /**
@ -150,5 +150,27 @@ public class GenFvImageTask extends Task implements EfiDefine{
**/ **/
public void setArch(String arch) { public void setArch(String arch) {
this.arch = arch; this.arch = arch;
} }
/**
getOutputDir
This function is to get output directory.
@return Path of output directory.
**/
public String getOutputDir() {
return outputDir;
}
/**
setOutputDir
This function is to set output directory.
@param outputDir The output direcotry.
**/
public void setOutputDir(String outputDir) {
this.outputDir = outputDir;
}
} }