mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 01:35:30 +00:00 
			
		
		
		
	 bfa65b61dd
			
		
	
	
		bfa65b61dd
		
	
	
	
	
		
			
			Based on "futurize -f libfuturize.fixes.fix_absolute_import" Since circular import is not allowed after adopting absolute import, the following changes are applied to break the circles. * BaseTools/Source/Python/GenFds/Capsule.py - Delay "from .GenFds import GenFds" until GenCapsule() - Delay "from .GenFds import FindExtendTool" until GenFmpCapsule() To break the circle: AutoGen.AutoGen => GenFds.FdfParser => GenFds.Capsule => GenFds.GenFds => GenFds.FdfParser * BaseTools/Source/Python/GenFds/Fd.py - Delay "from .GenFds import GenFds" until GenFd() To break the circle: AutoGen.AutoGen => GenFds.FdfParser => GenFds.Fd => GenFds.GenFds => GenFds.FdfParser * BaseTools/Source/Python/GenFds/Fv.py - Delay "from .GenFds import GenFds" until AddToBuffer() To break the circle: AutoGen.AutoGen => GenFds.FdfParser => GenFds.Fd => GenFds.Fv => GenFds.GenFds => GenFds.FdfParser * BaseTools/Source/Python/GenFds/GuidSection.py - Delay "from .GenFds import FindExtendTool" until GuidSection() To break the circle: AutoGen.AutoGen => GenFds.FdfParser => GenFds.Fd => GenFds.Fv => GenFds.AprioriSection => GenFds.FfsFileStatement => GenFds.GuidSection => GenFds.GenFds => GenFds.FdfParser * BaseTools/Source/Python/GenFds/OptRomInfStatement.py - Delay "from . import OptionRom" until __GetOptRomParams() To break the circle: AutoGen.AutoGen => GenFds.FdfParser => GenFds.OptionRom => GenFds.OptRomInfStatement => GenFds.OptionRom * BaseTools/Source/Python/GenFds/OptionRom.py - Remove the unused "from GenFds import GenFds" To break the circle: AutoGen.AutoGen => GenFds.FdfParser => GenFds.OptionRom => GenFds.GenFds => GenFds.FdfParser Contributed-under: TianoCore Contribution Agreement 1.1 Cc: Yonghong Zhu <yonghong.zhu@intel.com> Cc: Liming Gao <liming.gao@intel.com> Signed-off-by: Gary Lin <glin@suse.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
		
			
				
	
	
		
			127 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # process APRIORI file data and generate PEI/DXE APRIORI file
 | |
| #
 | |
| #  Copyright (c) 2007 - 2018, 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 __future__ import absolute_import
 | |
| from struct import *
 | |
| import Common.LongFilePathOs as os
 | |
| from io import BytesIO
 | |
| from . import FfsFileStatement
 | |
| from .GenFdsGlobalVariable import GenFdsGlobalVariable
 | |
| from CommonDataClass.FdfClass import AprioriSectionClassObject
 | |
| from Common.StringUtils import *
 | |
| from Common.Misc import SaveFileOnChange, PathClass
 | |
| from Common import EdkLogger
 | |
| from Common.BuildToolError import *
 | |
| from Common.DataType import TAB_COMMON
 | |
| 
 | |
| ## process APRIORI file data and generate PEI/DXE APRIORI file
 | |
| #
 | |
| #
 | |
| class AprioriSection (AprioriSectionClassObject):
 | |
|     ## The constructor
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #
 | |
|     def __init__(self):
 | |
|         AprioriSectionClassObject.__init__(self)
 | |
|         self.AprioriType = ""
 | |
| 
 | |
|     ## GenFfs() method
 | |
|     #
 | |
|     #   Generate FFS for APRIORI file
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #   @param  FvName      for whom apriori file generated
 | |
|     #   @param  Dict        dictionary contains macro and its value
 | |
|     #   @retval string      Generated file name
 | |
|     #
 | |
|     def GenFfs (self, FvName, Dict = {}, IsMakefile = False):
 | |
|         DXE_GUID = "FC510EE7-FFDC-11D4-BD41-0080C73C8881"
 | |
|         PEI_GUID = "1B45CC0A-156A-428A-AF62-49864DA0E6E6"
 | |
|         Buffer = BytesIO('')
 | |
|         AprioriFileGuid = DXE_GUID
 | |
|         if self.AprioriType == "PEI":
 | |
|             AprioriFileGuid = PEI_GUID
 | |
|         OutputAprFilePath = os.path.join (GenFdsGlobalVariable.WorkSpaceDir, \
 | |
|                                    GenFdsGlobalVariable.FfsDir,\
 | |
|                                    AprioriFileGuid + FvName)
 | |
|         if not os.path.exists(OutputAprFilePath) :
 | |
|             os.makedirs(OutputAprFilePath)
 | |
| 
 | |
|         OutputAprFileName = os.path.join( OutputAprFilePath, \
 | |
|                                        AprioriFileGuid + FvName + '.Apri' )
 | |
|         AprFfsFileName = os.path.join (OutputAprFilePath,\
 | |
|                                     AprioriFileGuid + FvName + '.Ffs')
 | |
| 
 | |
|         Dict.update(self.DefineVarDict)
 | |
|         InfFileName = None
 | |
|         for FfsObj in self.FfsList :
 | |
|             Guid = ""
 | |
|             if isinstance(FfsObj, FfsFileStatement.FileStatement):
 | |
|                 Guid = FfsObj.NameGuid
 | |
|             else:
 | |
|                 InfFileName = NormPath(FfsObj.InfFileName)
 | |
|                 Arch = FfsObj.GetCurrentArch()
 | |
| 
 | |
|                 if Arch is not None:
 | |
|                     Dict['$(ARCH)'] = Arch
 | |
|                 InfFileName = GenFdsGlobalVariable.MacroExtend(InfFileName, Dict, Arch)
 | |
| 
 | |
|                 if Arch is not None:
 | |
|                     Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]
 | |
|                     Guid = Inf.Guid
 | |
| 
 | |
|                 else:
 | |
|                     Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), TAB_COMMON, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]
 | |
|                     Guid = Inf.Guid
 | |
| 
 | |
|                     self.BinFileList = Inf.Module.Binaries
 | |
|                     if self.BinFileList == []:
 | |
|                         EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE,
 | |
|                                         "INF %s not found in build ARCH %s!" \
 | |
|                                         % (InfFileName, GenFdsGlobalVariable.ArchList))
 | |
| 
 | |
| 
 | |
|             GuidPart = Guid.split('-')
 | |
|             Buffer.write(pack('I', long(GuidPart[0], 16)))
 | |
|             Buffer.write(pack('H', int(GuidPart[1], 16)))
 | |
|             Buffer.write(pack('H', int(GuidPart[2], 16)))
 | |
| 
 | |
|             for Num in range(2):
 | |
|                 Char = GuidPart[3][Num*2:Num*2+2]
 | |
|                 Buffer.write(pack('B', int(Char, 16)))
 | |
| 
 | |
|             for Num in range(6):
 | |
|                 Char = GuidPart[4][Num*2:Num*2+2]
 | |
|                 Buffer.write(pack('B', int(Char, 16)))
 | |
| 
 | |
|         SaveFileOnChange(OutputAprFileName, Buffer.getvalue())
 | |
| 
 | |
|         RawSectionFileName = os.path.join( OutputAprFilePath, \
 | |
|                                        AprioriFileGuid + FvName + '.raw' )
 | |
|         MakefilePath = None
 | |
|         if IsMakefile:
 | |
|             if not InfFileName:
 | |
|                 return None
 | |
|             MakefilePath = InfFileName, Arch
 | |
|         GenFdsGlobalVariable.GenerateSection(RawSectionFileName, [OutputAprFileName], 'EFI_SECTION_RAW', IsMakefile=IsMakefile)
 | |
|         GenFdsGlobalVariable.GenerateFfs(AprFfsFileName, [RawSectionFileName],
 | |
|                                         'EFI_FV_FILETYPE_FREEFORM', AprioriFileGuid, MakefilePath=MakefilePath)
 | |
| 
 | |
|         return AprFfsFileName
 | |
| 
 |