| ## @file | |
| # process VTF generation | |
| # | |
| # Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> | |
| # | |
| # This program and the accompanying materials | |
| # are licensed and made available under the terms and conditions of the BSD License | |
| # which accompanies this distribution. The full text of the license may be found at | |
| # http://opensource.org/licenses/bsd-license.php | |
| # | |
| # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| # | |
| ## | |
| # Import Modules | |
| # | |
| from GenFdsGlobalVariable import GenFdsGlobalVariable | |
| import Common.LongFilePathOs as os | |
| from CommonDataClass.FdfClass import VtfClassObject | |
| from Common.LongFilePathSupport import OpenLongFilePath as open | |
| T_CHAR_LF = '\n' | |
| ## generate VTF | |
| # | |
| # | |
| class Vtf (VtfClassObject): | |
| ## The constructor | |
| # | |
| # @param self The object pointer | |
| # | |
| def __init__(self): | |
| VtfClassObject.__init__(self) | |
| ## GenVtf() method | |
| # | |
| # Generate VTF | |
| # | |
| # @param self The object pointer | |
| # @param FdAddressDict dictionary contains FV name and its base address | |
| # @retval Dict FV and corresponding VTF file name | |
| # | |
| def GenVtf(self, FdAddressDict) : | |
| self.GenBsfInf() | |
| OutputFile = os.path.join(GenFdsGlobalVariable.FvDir, self.UiName + '.Vtf') | |
| BaseAddArg = self.GetBaseAddressArg(FdAddressDict) | |
| OutputArg, VtfRawDict = self.GenOutputArg() | |
| Cmd = ( | |
| 'GenVtf', | |
| ) + OutputArg + ( | |
| '-f', self.BsfInfName, | |
| ) + BaseAddArg | |
| GenFdsGlobalVariable.CallExternalTool(Cmd, "GenFv -Vtf Failed!") | |
| GenFdsGlobalVariable.SharpCounter = 0 | |
| return VtfRawDict | |
| ## GenBsfInf() method | |
| # | |
| # Generate inf used to generate VTF | |
| # | |
| # @param self The object pointer | |
| # | |
| def GenBsfInf (self): | |
| FvList = self.GetFvList() | |
| self.BsfInfName = os.path.join(GenFdsGlobalVariable.FvDir, self.UiName + '.inf') | |
| BsfInf = open (self.BsfInfName, 'w+') | |
| if self.ResetBin != None: | |
| BsfInf.writelines ("[OPTIONS]" + T_CHAR_LF) | |
| BsfInf.writelines ("IA32_RST_BIN" + \ | |
| " = " + \ | |
| GenFdsGlobalVariable.MacroExtend(GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.ResetBin)) + \ | |
| T_CHAR_LF ) | |
| BsfInf.writelines (T_CHAR_LF ) | |
| BsfInf.writelines ("[COMPONENTS]" + T_CHAR_LF) | |
| for ComponentObj in self.ComponentStatementList : | |
| BsfInf.writelines ("COMP_NAME" + \ | |
| " = " + \ | |
| ComponentObj.CompName + \ | |
| T_CHAR_LF ) | |
| if ComponentObj.CompLoc.upper() == 'NONE': | |
| BsfInf.writelines ("COMP_LOC" + \ | |
| " = " + \ | |
| 'N' + \ | |
| T_CHAR_LF ) | |
| elif ComponentObj.FilePos != None: | |
| BsfInf.writelines ("COMP_LOC" + \ | |
| " = " + \ | |
| ComponentObj.FilePos + \ | |
| T_CHAR_LF ) | |
| else: | |
| Index = FvList.index(ComponentObj.CompLoc.upper()) | |
| if Index == 0: | |
| BsfInf.writelines ("COMP_LOC" + \ | |
| " = " + \ | |
| 'F' + \ | |
| T_CHAR_LF ) | |
| elif Index == 1: | |
| BsfInf.writelines ("COMP_LOC" + \ | |
| " = " + \ | |
| 'S' + \ | |
| T_CHAR_LF ) | |
| BsfInf.writelines ("COMP_TYPE" + \ | |
| " = " + \ | |
| ComponentObj.CompType + \ | |
| T_CHAR_LF ) | |
| BsfInf.writelines ("COMP_VER" + \ | |
| " = " + \ | |
| ComponentObj.CompVer + \ | |
| T_CHAR_LF ) | |
| BsfInf.writelines ("COMP_CS" + \ | |
| " = " + \ | |
| ComponentObj.CompCs + \ | |
| T_CHAR_LF ) | |
| BinPath = ComponentObj.CompBin | |
| if BinPath != '-': | |
| BinPath = GenFdsGlobalVariable.MacroExtend(GenFdsGlobalVariable.ReplaceWorkspaceMacro(BinPath)) | |
| BsfInf.writelines ("COMP_BIN" + \ | |
| " = " + \ | |
| BinPath + \ | |
| T_CHAR_LF ) | |
| SymPath = ComponentObj.CompSym | |
| if SymPath != '-': | |
| SymPath = GenFdsGlobalVariable.MacroExtend(GenFdsGlobalVariable.ReplaceWorkspaceMacro(SymPath)) | |
| BsfInf.writelines ("COMP_SYM" + \ | |
| " = " + \ | |
| SymPath + \ | |
| T_CHAR_LF ) | |
| BsfInf.writelines ("COMP_SIZE" + \ | |
| " = " + \ | |
| ComponentObj.CompSize + \ | |
| T_CHAR_LF ) | |
| BsfInf.writelines (T_CHAR_LF ) | |
| BsfInf.close() | |
| ## GenFvList() method | |
| # | |
| # Get FV list referenced by VTF components | |
| # | |
| # @param self The object pointer | |
| # | |
| def GetFvList(self): | |
| FvList = [] | |
| for component in self.ComponentStatementList : | |
| if component.CompLoc.upper() != 'NONE' and not (component.CompLoc.upper() in FvList): | |
| FvList.append(component.CompLoc.upper()) | |
| return FvList | |
| ## GetBaseAddressArg() method | |
| # | |
| # Get base address arguments for GenVtf | |
| # | |
| # @param self The object pointer | |
| # | |
| def GetBaseAddressArg(self, FdAddressDict): | |
| FvList = self.GetFvList() | |
| CmdStr = tuple() | |
| for i in FvList: | |
| (BaseAddress, Size) = FdAddressDict.get(i) | |
| CmdStr += ( | |
| '-r', '0x%x' % BaseAddress, | |
| '-s', '0x%x' %Size, | |
| ) | |
| return CmdStr | |
| ## GenOutputArg() method | |
| # | |
| # Get output arguments for GenVtf | |
| # | |
| # @param self The object pointer | |
| # | |
| def GenOutputArg(self): | |
| FvVtfDict = {} | |
| OutputFileName = '' | |
| FvList = self.GetFvList() | |
| Index = 0 | |
| Arg = tuple() | |
| for FvObj in FvList: | |
| Index = Index + 1 | |
| OutputFileName = 'Vtf%d.raw' % Index | |
| OutputFileName = os.path.join(GenFdsGlobalVariable.FvDir, OutputFileName) | |
| Arg += ('-o', OutputFileName) | |
| FvVtfDict[FvObj.upper()] = OutputFileName | |
| return Arg, FvVtfDict | |