mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-27 01:03:45 +01:00 
			
		
		
		
	BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1858 for Dict={},There are pitfalls in the way this default parameter is set and Dict is not used in functions, other functions have these two cases, I will change some incorrect parameter defaults This patch is going to fix this issue Cc: Liming Gao <liming.gao@intel.com> Cc: Bob Feng <bob.c.feng@intel.com> Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
		
			
				
	
	
		
			122 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # process APRIORI file data and generate PEI/DXE APRIORI file
 | |
| #
 | |
| #  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| #  SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| 
 | |
| ##
 | |
| # Import Modules
 | |
| #
 | |
| from __future__ import absolute_import
 | |
| from struct import pack
 | |
| import Common.LongFilePathOs as os
 | |
| from io import BytesIO
 | |
| from .FfsFileStatement import FileStatement
 | |
| from .GenFdsGlobalVariable import GenFdsGlobalVariable
 | |
| from Common.StringUtils import NormPath
 | |
| from Common.Misc import SaveFileOnChange, PathClass
 | |
| from Common.EdkLogger import error as EdkLoggerError
 | |
| from Common.BuildToolError import RESOURCE_NOT_AVAILABLE
 | |
| from Common.DataType import TAB_COMMON
 | |
| 
 | |
| DXE_APRIORI_GUID = "FC510EE7-FFDC-11D4-BD41-0080C73C8881"
 | |
| PEI_APRIORI_GUID = "1B45CC0A-156A-428A-AF62-49864DA0E6E6"
 | |
| 
 | |
| ## process APRIORI file data and generate PEI/DXE APRIORI file
 | |
| #
 | |
| #
 | |
| class AprioriSection (object):
 | |
|     ## The constructor
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #
 | |
|     def __init__(self):
 | |
|         self.DefineVarDict = {}
 | |
|         self.FfsList = []
 | |
|         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 = None, IsMakefile = False):
 | |
|         if Dict is None:
 | |
|             Dict = {}
 | |
|         Buffer = BytesIO()
 | |
|         if self.AprioriType == "PEI":
 | |
|             AprioriFileGuid = PEI_APRIORI_GUID
 | |
|         else:
 | |
|             AprioriFileGuid = DXE_APRIORI_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, FileStatement):
 | |
|                 Guid = FfsObj.NameGuid
 | |
|             else:
 | |
|                 InfFileName = NormPath(FfsObj.InfFileName)
 | |
|                 Arch = FfsObj.GetCurrentArch()
 | |
| 
 | |
|                 if Arch:
 | |
|                     Dict['$(ARCH)'] = Arch
 | |
|                 InfFileName = GenFdsGlobalVariable.MacroExtend(InfFileName, Dict, Arch)
 | |
| 
 | |
|                 if Arch:
 | |
|                     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
 | |
| 
 | |
|                     if not Inf.Module.Binaries:
 | |
|                         EdkLoggerError("GenFds", RESOURCE_NOT_AVAILABLE,
 | |
|                                         "INF %s not found in build ARCH %s!" \
 | |
|                                         % (InfFileName, GenFdsGlobalVariable.ArchList))
 | |
| 
 | |
|             GuidPart = Guid.split('-')
 | |
|             Buffer.write(pack('I', int(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
 |