From 5c4eec41d79fad6c629416226c49ebdcd3b7d468 Mon Sep 17 00:00:00 2001 From: qouyang Date: Wed, 13 Sep 2006 09:20:36 +0000 Subject: [PATCH] (Customized Compression)If setting the EncapsulationType="Compress", Tool will transfer it to sectiontype="EFI_SECTION_COMPRESS" in element of task. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1529 6f19259b-4bc3-4df7-8a09-765794883524 --- .../framework/tasks/FlashMapTask.java | 6 - .../framework/tasks/FwImageTask.java | 2 - .../framework/tasks/GenFvImageTask.java | 3 - .../framework/tasks/GenSectionTask.java | 374 ++++++++++-------- .../framework/tasks/StrGatherTask.java | 2 - .../org/tianocore/framework/tasks/Tool.java | 1 - .../org/tianocore/build/FfsProcess.java | 7 +- 7 files changed, 206 insertions(+), 189 deletions(-) diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FlashMapTask.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FlashMapTask.java index 847abebb32..be6c21a292 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FlashMapTask.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FlashMapTask.java @@ -17,12 +17,6 @@ package org.tianocore.framework.tasks; 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.Project; import org.apache.tools.ant.BuildException; diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FwImageTask.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FwImageTask.java index b17e7fbf12..c991aa3f58 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FwImageTask.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/FwImageTask.java @@ -16,8 +16,6 @@ **/ package org.tianocore.framework.tasks; -import java.io.File; - import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFvImageTask.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFvImageTask.java index e2a65ccdf6..cba7a4e4bc 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFvImageTask.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFvImageTask.java @@ -23,9 +23,6 @@ import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.types.Commandline; import java.io.File; -import java.io.InputStreamReader; -import java.lang.ProcessBuilder; -import java.util.LinkedList; import org.tianocore.common.logger.EdkLog; diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java index 4d335e0ba6..8396f707ab 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java @@ -12,13 +12,12 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -**/ + **/ package org.tianocore.framework.tasks; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; -import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -31,40 +30,51 @@ import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.types.Commandline; 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 // private FileArg inputFile = new FileArg(); + // // outputfile name // private FileArg outputFile = new FileArg(); + // // section type // private ToolArg sectionType = new ToolArg(); + // // version number // private ToolArg versionNum = new ToolArg(); + // // interface string // private ToolArg interfaceString = new ToolArg(); + // // Section file list // private List
sectFileList = new ArrayList
(); - + + // + // flag indicated the element + // + private boolean haveTool = false; + /** - execute - - GenSectionTaks execute is to assemble tool command line & execute tool - command line. - - @throws BuildException - **/ + * execute + * + * GenSectionTaks execute is to assemble tool command line & execute tool + * command line. + * + * @throws BuildException + */ public void execute() throws BuildException { String command; Project project = this.getOwningTarget().getProject(); @@ -80,7 +90,8 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes // // argument of tools // - String argument = "" + inputFile + outputFile + sectionType + versionNum + interfaceString; + String argument = "" + inputFile + outputFile + sectionType + + versionNum + interfaceString; // // return value of gensection execution // @@ -98,8 +109,10 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes runner.setAntRun(project); runner.setCommandline(cmdline.getCommandline()); - EdkLog.log(this, inputFile.toFileList() + " => " + outputFile.toFileList()); - EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(cmdline.getCommandline())); + EdkLog.log(this, inputFile.toFileList() + " => " + + outputFile.toFileList()); + EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(cmdline + .getCommandline())); revl = runner.execute(); if (EFI_SUCCESS == revl) { @@ -108,7 +121,8 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes // // 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!"); } } catch (Exception e) { @@ -117,252 +131,264 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes } /** - getInputFile - - This function is to get class member "inputFile". - - @return name of input file - **/ + * getInputFile + * + * This function is to get class member "inputFile". + * + * @return name of input file + */ public String getInputFile() { return this.inputFile.getValue(); } /** - setInputFile - - This function is to set class member "inputFile". - - @param inputFile name of input file - **/ + * setInputFile + * + * This function is to set class member "inputFile". + * + * @param inputFile + * name of input file + */ public void setInputFile(String inputFile) { this.inputFile.setArg(" -i ", inputFile); } /** - getOutputFile - - This function is to get class member "outputFile". - - @return name of output file - **/ + * getOutputFile + * + * This function is to get class member "outputFile". + * + * @return name of output file + */ public String getOutputFile() { return this.outputFile.getValue(); } /** - setOutputfile - - This function is to set class member "outputFile". - @param outputFile name of output file - **/ + * setOutputfile + * + * This function is to set class member "outputFile". + * + * @param outputFile + * name of output file + */ public void setOutputfile(String outputFile) { this.outputFile.setArg(" -o ", outputFile); } /** - getSectionType - - This function is to get class member "sectionType". - - @return sectoin type - **/ + * getSectionType + * + * This function is to get class member "sectionType". + * + * @return sectoin type + */ public String getSectionType() { return this.sectionType.getValue(); } /** - setSectionType - - This function is to set class member "sectionType". - - @param sectionType section type - **/ + * setSectionType + * + * This function is to set class member "sectionType". + * + * @param sectionType + * section type + */ public void setSectionType(String sectionType) { this.sectionType.setArg(" -s ", sectionType); } /** - getVersionNum - - This function is to get class member "versionNum". - @return version number - **/ + * getVersionNum + * + * This function is to get class member "versionNum". + * + * @return version number + */ public String getVersionNum() { return this.versionNum.getValue(); } /** - setVersionNume - - This function is to set class member "versionNum". - @param versionNum version number - **/ + * setVersionNume + * + * This function is to set class member "versionNum". + * + * @param versionNum + * version number + */ public void setVersionNum(String versionNum) { this.versionNum.setArg(" -v ", versionNum); } /** - getInterfaceString - - This function is to get class member "interfaceString". - @return interface string - **/ + * getInterfaceString + * + * This function is to get class member "interfaceString". + * + * @return interface string + */ public String getInterfaceString() { return this.interfaceString.getValue(); } /** - setInterfaceString - - This funcion is to set class member "interfaceString". - @param interfaceString interface string - **/ + * setInterfaceString + * + * This funcion is to set class member "interfaceString". + * + * @param interfaceString + * interface string + */ public void setInterfaceString(String interfaceString) { this.interfaceString.setArg(" -a ", "\"" + interfaceString + "\""); } - + /** - addSectFile - - This function is to add sectFile to list. - - @param sectFile instance of sectFile. - **/ - public void addSectFile(SectFile sectFile){ + * addSectFile + * + * This function is to add sectFile to list. + * + * @param sectFile + * instance of sectFile. + */ + public void addSectFile(SectFile sectFile) { this.sectFileList.add(sectFile); } /** - setTool - - This function is to set the class member "Tool"; - - @param tool - **/ + * setTool + * + * This function is to set the class member "Tool"; + * + * @param tool + */ public void addTool(Tool tool) { this.sectFileList.add(tool); + this.haveTool = true; } - + /** - addGenSection - - This function is to add GenSectin element to list - @param task Instance of genSection - **/ - public void addGenSection(GenSectionTask task){ + * addGenSection + * + * This function is to add GenSectin element to list + * + * @param task + * Instance of genSection + */ + public void addGenSection(GenSectionTask task) { this.sectFileList.add(task); } - - public void toBuffer(DataOutputStream buffer){ + + public void toBuffer(DataOutputStream buffer) { // - // Search SectionList find earch section and call it's - // ToBuffer function. + // Search SectionList find earch section and call it's + // ToBuffer function. // - if (this.sectionType.getValue().equalsIgnoreCase("EFI_SECTION_COMPRESSION")){ - Section sect; - + if (this.sectionType.getValue().equalsIgnoreCase( + "EFI_SECTION_COMPRESSION") + && !this.haveTool) { + Section sect; + // - // Get section file in compress node. + // Get section file in compress node. // - try{ - ByteArrayOutputStream bo = new ByteArrayOutputStream (); - DataOutputStream Do = new DataOutputStream (bo); - + try { + ByteArrayOutputStream bo = new ByteArrayOutputStream(); + DataOutputStream Do = new DataOutputStream(bo); + // - // Get each section which under the compress {}; - // And add it is contains to File; + // Get each section which under the compress {}; + // And add it is contains to File; // Iterator SectionIter = this.sectFileList.iterator(); - while (SectionIter.hasNext()){ - sect = (Section)SectionIter.next(); - + while (SectionIter.hasNext()) { + sect = (Section) SectionIter.next(); + // - // Call each section class's toBuffer function. + // Call each section class's toBuffer function. // try { sect.toBuffer(Do); - } - catch (BuildException e) { + } catch (BuildException e) { System.out.print(e.getMessage()); - throw new BuildException ("Compress.toBuffer failed at section"); - } - + throw new BuildException( + "Compress.toBuffer failed at section"); + } + } - Do.close(); - + Do.close(); + // - // Call compress + // Call compress // byte[] fileBuffer = bo.toByteArray(); - + synchronized (CompressSection.semaphore) { - Compress myCompress = new Compress(fileBuffer, fileBuffer.length); - - // - // Add Compress header - // - CompressHeader Ch = new CompressHeader(); - Ch.SectionHeader.Size[0] = (byte)((myCompress.outputBuffer.length + - Ch.GetSize()) & - 0xff - ); - Ch.SectionHeader.Size[1] = (byte)(((myCompress.outputBuffer.length + - Ch.GetSize())& - 0xff00) >> 8 - ); - Ch.SectionHeader.Size[2] = (byte)(((myCompress.outputBuffer.length + - Ch.GetSize()) & - 0xff0000) >> 16 - ); - Ch.SectionHeader.type = (byte) EFI_SECTION_COMPRESSION; - - // - // Note: The compressName was not efsfective now. Using the - // EFI_STANDARD_COMPRSSION for compressType . - // That is follow old Genffsfile tools. Some code will be added for - // the different compressName; - // - Ch.UncompressLen = fileBuffer.length; - Ch.CompressType = EFI_STANDARD_COMPRESSION; - - // - // Change header struct to byte buffer - // - byte [] headerBuffer = new byte[Ch.GetSize()]; - Ch.StructToBuffer(headerBuffer); - - // - // First add CompressHeader to Buffer, then add Compress data. - // - buffer.write (headerBuffer); - buffer.write(myCompress.outputBuffer); - - // - // Buffer 4 Byte aligment - // - int size = Ch.GetSize() + myCompress.outputBuffer.length; - - while ((size & 0x03) != 0){ - size ++; - buffer.writeByte(0); - } + Compress myCompress = new Compress(fileBuffer, + fileBuffer.length); + + // + // Add Compress header + // + CompressHeader Ch = new CompressHeader(); + Ch.SectionHeader.Size[0] = (byte) ((myCompress.outputBuffer.length + Ch + .GetSize()) & 0xff); + Ch.SectionHeader.Size[1] = (byte) (((myCompress.outputBuffer.length + Ch + .GetSize()) & 0xff00) >> 8); + Ch.SectionHeader.Size[2] = (byte) (((myCompress.outputBuffer.length + Ch + .GetSize()) & 0xff0000) >> 16); + Ch.SectionHeader.type = (byte) EFI_SECTION_COMPRESSION; + + // + // Note: The compressName was not efsfective now. Using the + // EFI_STANDARD_COMPRSSION for compressType . + // That is follow old Genffsfile tools. Some code will be + // added for + // the different compressName; + // + Ch.UncompressLen = fileBuffer.length; + Ch.CompressType = EFI_STANDARD_COMPRESSION; + + // + // Change header struct to byte buffer + // + byte[] headerBuffer = new byte[Ch.GetSize()]; + Ch.StructToBuffer(headerBuffer); + + // + // First add CompressHeader to Buffer, then add Compress + // data. + // + buffer.write(headerBuffer); + buffer.write(myCompress.outputBuffer); + + // + // Buffer 4 Byte aligment + // + int size = Ch.GetSize() + myCompress.outputBuffer.length; + + while ((size & 0x03) != 0) { + size++; + buffer.writeByte(0); + } } - } - catch (Exception e){ + } catch (Exception e) { throw new BuildException("compress.toBuffer failed!\n"); - } + } } else { Section sect; Iterator sectionIter = this.sectFileList.iterator(); while (sectionIter.hasNext()) { - sect = (Section)sectionIter.next(); + sect = (Section) sectionIter.next(); try { // - // The last section don't need 4 byte ffsAligment. + // The last section don't need 4 byte ffsAligment. // sect.toBuffer(buffer); } catch (Exception e) { - throw new BuildException (e.getMessage()); + throw new BuildException(e.getMessage()); } } } diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/StrGatherTask.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/StrGatherTask.java index a92f727376..2a7b8a7e27 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/StrGatherTask.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/StrGatherTask.java @@ -14,8 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. package org.tianocore.framework.tasks; import java.io.File; -import java.util.*; - import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java index 31781eb1d6..e67e15d786 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ package org.tianocore.framework.tasks; -import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; diff --git a/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java b/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java index 3a67e6eb34..26b9390901 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java +++ b/Tools/Source/GenBuild/org/tianocore/build/FfsProcess.java @@ -273,7 +273,12 @@ public class FfsProcess { // ele = doc.createElement("gensection"); if (type != null) { - ele.setAttribute("sectiontype", "EFI_SECTION_GUID_DEFINED"); + if (type.equalsIgnoreCase("COMPRESS")) { + ele.setAttribute("sectionType", "EFI_SECTION_COMPRESSION"); + }else { + ele.setAttribute("sectiontype", "EFI_SECTION_GUID_DEFINED"); + } + } else { ele.setAttribute("sectiontype", sectType); } -- 2.39.2