(Customized Compression)If setting the EncapsulationType="Compress", Tool will transfer it to sectiontype="EFI_SECTION_COMPRESS" in <gensection>element of <genffsFile> task.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1529 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qouyang 2006-09-13 09:20:36 +00:00
parent d965d1f63f
commit 5c4eec41d7
7 changed files with 206 additions and 189 deletions

View File

@ -17,12 +17,6 @@
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File; import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;

View File

@ -16,8 +16,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;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;

View File

@ -23,9 +23,6 @@ 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.File;
import java.io.InputStreamReader;
import java.lang.ProcessBuilder;
import java.util.LinkedList;
import org.tianocore.common.logger.EdkLog; import org.tianocore.common.logger.EdkLog;

View File

@ -18,7 +18,6 @@ package org.tianocore.framework.tasks;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -31,40 +30,51 @@ import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
import org.tianocore.common.logger.EdkLog; import org.tianocore.common.logger.EdkLog;
public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes { public class GenSectionTask extends Task implements EfiDefine, Section,
FfsTypes {
// //
// inputfile name // inputfile name
// //
private FileArg inputFile = new FileArg(); private FileArg inputFile = new FileArg();
// //
// outputfile name // outputfile name
// //
private FileArg outputFile = new FileArg(); private FileArg outputFile = new FileArg();
// //
// section type // section type
// //
private ToolArg sectionType = new ToolArg(); private ToolArg sectionType = new ToolArg();
// //
// version number // version number
// //
private ToolArg versionNum = new ToolArg(); private ToolArg versionNum = new ToolArg();
// //
// interface string // interface string
// //
private ToolArg interfaceString = new ToolArg(); private ToolArg interfaceString = new ToolArg();
// //
// Section file list // Section file list
// //
private List<Section> sectFileList = new ArrayList<Section>(); private List<Section> sectFileList = new ArrayList<Section>();
//
// flag indicated the <tool> element
//
private boolean haveTool = false;
/** /**
execute * execute
*
GenSectionTaks execute is to assemble tool command line & execute tool * GenSectionTaks execute is to assemble tool command line & execute tool
command line. * command line.
*
@throws BuildException * @throws BuildException
**/ */
public void execute() throws BuildException { public void execute() throws BuildException {
String command; String command;
Project project = this.getOwningTarget().getProject(); Project project = this.getOwningTarget().getProject();
@ -80,7 +90,8 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
// //
// argument of tools // argument of tools
// //
String argument = "" + inputFile + outputFile + sectionType + versionNum + interfaceString; String argument = "" + inputFile + outputFile + sectionType
+ versionNum + interfaceString;
// //
// return value of gensection execution // return value of gensection execution
// //
@ -98,8 +109,10 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
runner.setAntRun(project); runner.setAntRun(project);
runner.setCommandline(cmdline.getCommandline()); runner.setCommandline(cmdline.getCommandline());
EdkLog.log(this, inputFile.toFileList() + " => " + outputFile.toFileList()); EdkLog.log(this, inputFile.toFileList() + " => "
EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(cmdline.getCommandline())); + outputFile.toFileList());
EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(cmdline
.getCommandline()));
revl = runner.execute(); revl = runner.execute();
if (EFI_SUCCESS == revl) { if (EFI_SUCCESS == revl) {
@ -108,7 +121,8 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
// //
// command execution fail // command execution fail
// //
EdkLog.log(this, EdkLog.EDK_INFO, "ERROR = " + Integer.toHexString(revl)); EdkLog.log(this, EdkLog.EDK_INFO, "ERROR = "
+ Integer.toHexString(revl));
throw new BuildException("GenSection failed!"); throw new BuildException("GenSection failed!");
} }
} catch (Exception e) { } catch (Exception e) {
@ -117,138 +131,152 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
} }
/** /**
getInputFile * getInputFile
*
This function is to get class member "inputFile". * This function is to get class member "inputFile".
*
@return name of input file * @return name of input file
**/ */
public String getInputFile() { public String getInputFile() {
return this.inputFile.getValue(); return this.inputFile.getValue();
} }
/** /**
setInputFile * setInputFile
*
This function is to set class member "inputFile". * This function is to set class member "inputFile".
*
@param inputFile name of input file * @param inputFile
**/ * name of input file
*/
public void setInputFile(String inputFile) { public void setInputFile(String inputFile) {
this.inputFile.setArg(" -i ", inputFile); this.inputFile.setArg(" -i ", inputFile);
} }
/** /**
getOutputFile * getOutputFile
*
This function is to get class member "outputFile". * This function is to get class member "outputFile".
*
@return name of output file * @return name of output file
**/ */
public String getOutputFile() { public String getOutputFile() {
return this.outputFile.getValue(); return this.outputFile.getValue();
} }
/** /**
setOutputfile * setOutputfile
*
This function is to set class member "outputFile". * This function is to set class member "outputFile".
@param outputFile name of output file *
**/ * @param outputFile
* name of output file
*/
public void setOutputfile(String outputFile) { public void setOutputfile(String outputFile) {
this.outputFile.setArg(" -o ", outputFile); this.outputFile.setArg(" -o ", outputFile);
} }
/** /**
getSectionType * getSectionType
*
This function is to get class member "sectionType". * This function is to get class member "sectionType".
*
@return sectoin type * @return sectoin type
**/ */
public String getSectionType() { public String getSectionType() {
return this.sectionType.getValue(); return this.sectionType.getValue();
} }
/** /**
setSectionType * setSectionType
*
This function is to set class member "sectionType". * This function is to set class member "sectionType".
*
@param sectionType section type * @param sectionType
**/ * section type
*/
public void setSectionType(String sectionType) { public void setSectionType(String sectionType) {
this.sectionType.setArg(" -s ", sectionType); this.sectionType.setArg(" -s ", sectionType);
} }
/** /**
getVersionNum * getVersionNum
*
This function is to get class member "versionNum". * This function is to get class member "versionNum".
@return version number *
**/ * @return version number
*/
public String getVersionNum() { public String getVersionNum() {
return this.versionNum.getValue(); return this.versionNum.getValue();
} }
/** /**
setVersionNume * setVersionNume
*
This function is to set class member "versionNum". * This function is to set class member "versionNum".
@param versionNum version number *
**/ * @param versionNum
* version number
*/
public void setVersionNum(String versionNum) { public void setVersionNum(String versionNum) {
this.versionNum.setArg(" -v ", versionNum); this.versionNum.setArg(" -v ", versionNum);
} }
/** /**
getInterfaceString * getInterfaceString
*
This function is to get class member "interfaceString". * This function is to get class member "interfaceString".
@return interface string *
**/ * @return interface string
*/
public String getInterfaceString() { public String getInterfaceString() {
return this.interfaceString.getValue(); return this.interfaceString.getValue();
} }
/** /**
setInterfaceString * setInterfaceString
*
This funcion is to set class member "interfaceString". * This funcion is to set class member "interfaceString".
@param interfaceString interface string *
**/ * @param interfaceString
* interface string
*/
public void setInterfaceString(String interfaceString) { public void setInterfaceString(String interfaceString) {
this.interfaceString.setArg(" -a ", "\"" + interfaceString + "\""); this.interfaceString.setArg(" -a ", "\"" + interfaceString + "\"");
} }
/** /**
addSectFile * addSectFile
*
This function is to add sectFile to list. * This function is to add sectFile to list.
*
@param sectFile instance of sectFile. * @param sectFile
**/ * instance of sectFile.
*/
public void addSectFile(SectFile sectFile) { public void addSectFile(SectFile sectFile) {
this.sectFileList.add(sectFile); this.sectFileList.add(sectFile);
} }
/** /**
setTool * setTool
*
This function is to set the class member "Tool"; * This function is to set the class member "Tool";
*
@param tool * @param tool
**/ */
public void addTool(Tool tool) { public void addTool(Tool tool) {
this.sectFileList.add(tool); this.sectFileList.add(tool);
this.haveTool = true;
} }
/** /**
addGenSection * addGenSection
*
This function is to add GenSectin element to list * This function is to add GenSectin element to list
@param task Instance of genSection *
**/ * @param task
* Instance of genSection
*/
public void addGenSection(GenSectionTask task) { public void addGenSection(GenSectionTask task) {
this.sectFileList.add(task); this.sectFileList.add(task);
} }
@ -258,7 +286,9 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
// Search SectionList find earch section and call it's // Search SectionList find earch section and call it's
// ToBuffer function. // ToBuffer function.
// //
if (this.sectionType.getValue().equalsIgnoreCase("EFI_SECTION_COMPRESSION")){ if (this.sectionType.getValue().equalsIgnoreCase(
"EFI_SECTION_COMPRESSION")
&& !this.haveTool) {
Section sect; Section sect;
// //
@ -281,10 +311,10 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
// //
try { try {
sect.toBuffer(Do); sect.toBuffer(Do);
} } catch (BuildException e) {
catch (BuildException e) {
System.out.print(e.getMessage()); System.out.print(e.getMessage());
throw new BuildException ("Compress.toBuffer failed at section"); throw new BuildException(
"Compress.toBuffer failed at section");
} }
} }
@ -296,30 +326,26 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
byte[] fileBuffer = bo.toByteArray(); byte[] fileBuffer = bo.toByteArray();
synchronized (CompressSection.semaphore) { synchronized (CompressSection.semaphore) {
Compress myCompress = new Compress(fileBuffer, fileBuffer.length); Compress myCompress = new Compress(fileBuffer,
fileBuffer.length);
// //
// Add Compress header // Add Compress header
// //
CompressHeader Ch = new CompressHeader(); CompressHeader Ch = new CompressHeader();
Ch.SectionHeader.Size[0] = (byte)((myCompress.outputBuffer.length + Ch.SectionHeader.Size[0] = (byte) ((myCompress.outputBuffer.length + Ch
Ch.GetSize()) & .GetSize()) & 0xff);
0xff Ch.SectionHeader.Size[1] = (byte) (((myCompress.outputBuffer.length + Ch
); .GetSize()) & 0xff00) >> 8);
Ch.SectionHeader.Size[1] = (byte)(((myCompress.outputBuffer.length + Ch.SectionHeader.Size[2] = (byte) (((myCompress.outputBuffer.length + Ch
Ch.GetSize())& .GetSize()) & 0xff0000) >> 16);
0xff00) >> 8
);
Ch.SectionHeader.Size[2] = (byte)(((myCompress.outputBuffer.length +
Ch.GetSize()) &
0xff0000) >> 16
);
Ch.SectionHeader.type = (byte) EFI_SECTION_COMPRESSION; Ch.SectionHeader.type = (byte) EFI_SECTION_COMPRESSION;
// //
// Note: The compressName was not efsfective now. Using the // Note: The compressName was not efsfective now. Using the
// EFI_STANDARD_COMPRSSION for compressType . // EFI_STANDARD_COMPRSSION for compressType .
// That is follow old Genffsfile tools. Some code will be added for // That is follow old Genffsfile tools. Some code will be
// added for
// the different compressName; // the different compressName;
// //
Ch.UncompressLen = fileBuffer.length; Ch.UncompressLen = fileBuffer.length;
@ -332,7 +358,8 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
Ch.StructToBuffer(headerBuffer); Ch.StructToBuffer(headerBuffer);
// //
// First add CompressHeader to Buffer, then add Compress data. // First add CompressHeader to Buffer, then add Compress
// data.
// //
buffer.write(headerBuffer); buffer.write(headerBuffer);
buffer.write(myCompress.outputBuffer); buffer.write(myCompress.outputBuffer);
@ -347,8 +374,7 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes
buffer.writeByte(0); buffer.writeByte(0);
} }
} }
} } catch (Exception e) {
catch (Exception e){
throw new BuildException("compress.toBuffer failed!\n"); throw new BuildException("compress.toBuffer failed!\n");
} }
} else { } else {

View File

@ -14,8 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.File; import java.io.File;
import java.util.*;
import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;

View File

@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/ **/
package org.tianocore.framework.tasks; package org.tianocore.framework.tasks;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.File; import java.io.File;

View File

@ -273,7 +273,12 @@ public class FfsProcess {
// //
ele = doc.createElement("gensection"); ele = doc.createElement("gensection");
if (type != null) { if (type != null) {
if (type.equalsIgnoreCase("COMPRESS")) {
ele.setAttribute("sectionType", "EFI_SECTION_COMPRESSION");
}else {
ele.setAttribute("sectiontype", "EFI_SECTION_GUID_DEFINED"); ele.setAttribute("sectiontype", "EFI_SECTION_GUID_DEFINED");
}
} else { } else {
ele.setAttribute("sectiontype", sectType); ele.setAttribute("sectiontype", sectType);
} }