1## @file 2# process compress section generation 3# 4# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> 5# 6# This program and the accompanying materials 7# are licensed and made available under the terms and conditions of the BSD License 8# which accompanies this distribution. The full text of the license may be found at 9# http://opensource.org/licenses/bsd-license.php 10# 11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13# 14 15## 16# Import Modules 17# 18from Ffs import Ffs 19import Section 20import subprocess 21import Common.LongFilePathOs as os 22from GenFdsGlobalVariable import GenFdsGlobalVariable 23from CommonDataClass.FdfClass import CompressSectionClassObject 24 25## generate compress section 26# 27# 28class CompressSection (CompressSectionClassObject) : 29 30 ## compress types: PI standard and non PI standard 31 CompTypeDict = { 32 'PI_STD' : 'PI_STD', 33 'PI_NONE' : 'PI_NONE' 34 } 35 36 ## The constructor 37 # 38 # @param self The object pointer 39 # 40 def __init__(self): 41 CompressSectionClassObject.__init__(self) 42 43 ## GenSection() method 44 # 45 # Generate compressed section 46 # 47 # @param self The object pointer 48 # @param OutputPath Where to place output file 49 # @param ModuleName Which module this section belongs to 50 # @param SecNum Index of section 51 # @param KeyStringList Filter for inputs of section generation 52 # @param FfsInf FfsInfStatement object that contains this section data 53 # @param Dict dictionary contains macro and its value 54 # @retval tuple (Generated file name, section alignment) 55 # 56 def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = {}): 57 58 if FfsInf != None: 59 self.CompType = FfsInf.__ExtendMacro__(self.CompType) 60 self.Alignment = FfsInf.__ExtendMacro__(self.Alignment) 61 62 SectFiles = tuple() 63 Index = 0 64 for Sect in self.SectionList: 65 Index = Index + 1 66 SecIndex = '%s.%d' %(SecNum, Index) 67 ReturnSectList, AlignValue = Sect.GenSection(OutputPath, ModuleName, SecIndex, KeyStringList, FfsInf, Dict) 68 if ReturnSectList != []: 69 for FileData in ReturnSectList: 70 SectFiles += (FileData,) 71 72 73 OutputFile = OutputPath + \ 74 os.sep + \ 75 ModuleName + \ 76 'SEC' + \ 77 SecNum + \ 78 Ffs.SectionSuffix['COMPRESS'] 79 OutputFile = os.path.normpath(OutputFile) 80 81 GenFdsGlobalVariable.GenerateSection(OutputFile, SectFiles, Section.Section.SectionType['COMPRESS'], 82 CompressionType=self.CompTypeDict[self.CompType]) 83 OutputFileList = [] 84 OutputFileList.append(OutputFile) 85 return OutputFileList, self.Alignment 86 87 88