From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 6F4541A1E24 for ; Mon, 17 Oct 2016 02:45:40 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga102.fm.intel.com with ESMTP; 17 Oct 2016 02:45:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,357,1473145200"; d="scan'208";a="20321622" Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.144]) by fmsmga005.fm.intel.com with ESMTP; 17 Oct 2016 02:45:39 -0700 From: Yonghong Zhu To: edk2-devel@lists.01.org Cc: Liming Gao Date: Mon, 17 Oct 2016 17:45:33 +0800 Message-Id: <1476697533-5368-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [Patch] BaseTools: Enhance tool to generate EFI_HII_IIBT_DUPLICATE image block X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Oct 2016 09:45:40 -0000 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 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yonghong Zhu --- 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