Home | History | Annotate | Download | only in GenFds
      1 ## @file

      2 # process FV image 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 #

     18 import Section
     19 import StringIO
     20 from Ffs import Ffs
     21 import subprocess
     22 from GenFdsGlobalVariable import GenFdsGlobalVariable
     23 import Common.LongFilePathOs as os
     24 from CommonDataClass.FdfClass import FvImageSectionClassObject
     25 from Common import EdkLogger
     26 from Common.BuildToolError import *
     27 
     28 ## generate FV image section

     29 #

     30 #

     31 class FvImageSection(FvImageSectionClassObject):
     32 
     33     ## The constructor

     34     #

     35     #   @param  self        The object pointer

     36     #

     37     def __init__(self):
     38         FvImageSectionClassObject.__init__(self)
     39 
     40     ## GenSection() method

     41     #

     42     #   Generate FV image section

     43     #

     44     #   @param  self        The object pointer

     45     #   @param  OutputPath  Where to place output file

     46     #   @param  ModuleName  Which module this section belongs to

     47     #   @param  SecNum      Index of section

     48     #   @param  KeyStringList  Filter for inputs of section generation

     49     #   @param  FfsInf      FfsInfStatement object that contains this section data

     50     #   @param  Dict        dictionary contains macro and its value

     51     #   @retval tuple       (Generated file name, section alignment)

     52     #

     53     def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = {}):
     54 
     55         OutputFileList = []
     56         if self.FvFileType != None:
     57             FileList, IsSect = Section.Section.GetFileList(FfsInf, self.FvFileType, self.FvFileExtension)
     58             if IsSect :
     59                 return FileList, self.Alignment
     60 
     61             Num = SecNum
     62 
     63             for FileName in FileList:
     64                 OutputFile = os.path.join(OutputPath, ModuleName + 'SEC' + Num + Ffs.SectionSuffix.get("FV_IMAGE"))
     65                 GenFdsGlobalVariable.GenerateSection(OutputFile, [FvFileName], 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE')
     66                 OutputFileList.append(OutputFile)
     67             return OutputFileList, self.Alignment
     68         #

     69         # Generate Fv

     70         #

     71         if self.FvName != None:
     72             Buffer = StringIO.StringIO('')
     73             Fv = GenFdsGlobalVariable.FdfParser.Profile.FvDict.get(self.FvName)
     74             if Fv != None:
     75                 self.Fv = Fv
     76                 FvFileName = Fv.AddToBuffer(Buffer, self.FvAddr, MacroDict = Dict)
     77                 if Fv.FvAlignment != None:
     78                     if self.Alignment == None:
     79                         self.Alignment = Fv.FvAlignment
     80                     else:
     81                         if GenFdsGlobalVariable.GetAlignment (Fv.FvAlignment) > GenFdsGlobalVariable.GetAlignment (self.Alignment):
     82                             self.Alignment = Fv.FvAlignment
     83             else:
     84                 if self.FvFileName != None:
     85                     FvFileName = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FvFileName)
     86                 else:
     87                     EdkLogger.error("GenFds", GENFDS_ERROR, "FvImageSection Failed! %s NOT found in FDF" % self.FvName)
     88 
     89             #

     90             # Prepare the parameter of GenSection

     91             #

     92             OutputFile = os.path.join(OutputPath, ModuleName + 'SEC' + SecNum + Ffs.SectionSuffix.get("FV_IMAGE"))
     93             GenFdsGlobalVariable.GenerateSection(OutputFile, [FvFileName], 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE')
     94             OutputFileList.append(OutputFile)
     95 
     96             return OutputFileList, self.Alignment
     97