Reviewed-by: Liming Gao <liming....@intel.com>

> -----Original Message-----
> From: Zhu, Yonghong
> Sent: Monday, October 17, 2016 5:46 PM
> To: edk2-devel@lists.01.org
> Cc: Gao, Liming <liming....@intel.com>
> Subject: [Patch] BaseTools: Enhance tool to generate
> EFI_HII_IIBT_DUPLICATE image block
> 
> When *.IDF file contains multiple definitions of image which point to the
> same image, current build tool generates multiple image blocks which
> contain the same image content.
> This patch enhance tool to generate EFI_HII_IIBT_DUPLICATE image blocks
> for non-first images for such case, to save the HII package size.
> 
> Fixes: https://bugzilla.tianocore.org/show_bug.cgi?id=145
> 
> Cc: Liming Gao <liming....@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Yonghong Zhu <yonghong....@intel.com>
> ---
>  BaseTools/Source/Python/AutoGen/GenC.py | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/BaseTools/Source/Python/AutoGen/GenC.py
> b/BaseTools/Source/Python/AutoGen/GenC.py
> index 8089e3a..de6eb0e 100644
> --- a/BaseTools/Source/Python/AutoGen/GenC.py
> +++ b/BaseTools/Source/Python/AutoGen/GenC.py
> @@ -1637,10 +1637,11 @@ def CreateIdfFileCode(Info, AutoGenC, StringH,
> IdfGenCFlag, IdfGenBinBuffer):
>              PaletteInfoOffset = 0
>              ImageBuffer = pack('x')
>              PaletteBuffer = pack('x')
>              BufferStr = ''
>              PaletteStr = ''
> +            FileDict = {}
>              for Idf in ImageFiles.ImageFilesDict:
>                  if ImageFiles.ImageFilesDict[Idf]:
>                      for FileObj in ImageFiles.ImageFilesDict[Idf]:
>                          for sourcefile in Info.SourceFileList:
>                              if FileObj.FileName == sourcefile.File:
> @@ -1661,10 +1662,23 @@ def CreateIdfFileCode(Info, AutoGenC, StringH,
> IdfGenCFlag, IdfGenBinBuffer):
>                              if (ValueStartPtr - len(DEFINE_STR + ID)) <= 0:
>                                  Line = DEFINE_STR + ' ' + ID + ' ' + 
> DecToHexStr(Index, 4) +
> '\n'
>                              else:
>                                  Line = DEFINE_STR + ' ' + ID + ' ' * 
> (ValueStartPtr -
> len(DEFINE_STR + ID)) + DecToHexStr(Index, 4) + '\n'
> 
> +                            if File not in FileDict:
> +                                FileDict[File] = Index
> +                            else:
> +                                DuplicateBlock = pack('B', 
> EFI_HII_IIBT_DUPLICATE)
> +                                DuplicateBlock += pack('H', FileDict[File])
> +                                ImageBuffer += DuplicateBlock
> +                                BufferStr = WriteLine(BufferStr, '// %s: %s: 
> %s' %
> (DecToHexStr(Index, 4), ID, DecToHexStr(Index, 4)))
> +                                TempBufferList = AscToHexList(DuplicateBlock)
> +                                BufferStr = WriteLine(BufferStr,
> CreateArrayItem(TempBufferList, 16) + '\n')
> +                                StringH.Append(Line)
> +                                Index += 1
> +                                continue
> +
>                              TmpFile = open(File.Path, 'rb')
>                              Buffer = TmpFile.read()
>                              TmpFile.close()
>                              if File.Ext.upper() == '.PNG':
>                                  TempBuffer = pack('B', 
> EFI_HII_IIBT_IMAGE_PNG)
> --
> 2.6.1.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to