mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 11:13:53 +01:00 
			
		
		
		
	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>
		
			
				
	
	
		
			171 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # section base class
 | |
| #
 | |
| #  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 CommonDataClass.FdfClass import SectionClassObject
 | |
| from .GenFdsGlobalVariable import GenFdsGlobalVariable
 | |
| import Common.LongFilePathOs as os, glob
 | |
| from Common import EdkLogger
 | |
| from Common.BuildToolError import *
 | |
| from Common.DataType import *
 | |
| 
 | |
| ## section base class
 | |
| #
 | |
| #
 | |
| class Section (SectionClassObject):
 | |
|     SectionType = {
 | |
|         'RAW'       : 'EFI_SECTION_RAW',
 | |
|         'FREEFORM'  : 'EFI_SECTION_FREEFORM_SUBTYPE_GUID',
 | |
|         BINARY_FILE_TYPE_PE32      : 'EFI_SECTION_PE32',
 | |
|         BINARY_FILE_TYPE_PIC       : 'EFI_SECTION_PIC',
 | |
|         BINARY_FILE_TYPE_TE        : 'EFI_SECTION_TE',
 | |
|         'FV_IMAGE'  : 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE',
 | |
|         BINARY_FILE_TYPE_DXE_DEPEX : 'EFI_SECTION_DXE_DEPEX',
 | |
|         BINARY_FILE_TYPE_PEI_DEPEX : 'EFI_SECTION_PEI_DEPEX',
 | |
|         'GUIDED'    : 'EFI_SECTION_GUID_DEFINED',
 | |
|         'COMPRESS'  : 'EFI_SECTION_COMPRESSION',
 | |
|         BINARY_FILE_TYPE_UI        : 'EFI_SECTION_USER_INTERFACE',
 | |
|         BINARY_FILE_TYPE_SMM_DEPEX : 'EFI_SECTION_SMM_DEPEX'
 | |
|     }
 | |
| 
 | |
|     BinFileType = {
 | |
|         BINARY_FILE_TYPE_GUID          : '.guid',
 | |
|         'ACPI'          : '.acpi',
 | |
|         'ASL'           : '.asl' ,
 | |
|         BINARY_FILE_TYPE_UEFI_APP      : '.app',
 | |
|         BINARY_FILE_TYPE_LIB           : '.lib',
 | |
|         BINARY_FILE_TYPE_PE32          : '.pe32',
 | |
|         BINARY_FILE_TYPE_PIC           : '.pic',
 | |
|         BINARY_FILE_TYPE_PEI_DEPEX     : '.depex',
 | |
|         'SEC_PEI_DEPEX' : '.depex',
 | |
|         BINARY_FILE_TYPE_TE            : '.te',
 | |
|         BINARY_FILE_TYPE_UNI_VER       : '.ver',
 | |
|         BINARY_FILE_TYPE_VER           : '.ver',
 | |
|         BINARY_FILE_TYPE_UNI_UI        : '.ui',
 | |
|         BINARY_FILE_TYPE_UI            : '.ui',
 | |
|         BINARY_FILE_TYPE_BIN           : '.bin',
 | |
|         'RAW'           : '.raw',
 | |
|         'COMPAT16'      : '.comp16',
 | |
|         BINARY_FILE_TYPE_FV            : '.fv'
 | |
|     }
 | |
| 
 | |
|     SectFileType = {
 | |
|         'SEC_GUID'      : '.sec' ,
 | |
|         'SEC_PE32'      : '.sec' ,
 | |
|         'SEC_PIC'       : '.sec',
 | |
|         'SEC_TE'        : '.sec',
 | |
|         'SEC_VER'       : '.sec',
 | |
|         'SEC_UI'        : '.sec',
 | |
|         'SEC_COMPAT16'  : '.sec',
 | |
|         'SEC_BIN'       : '.sec'
 | |
|     }
 | |
| 
 | |
|     ToolGuid = {
 | |
|         '0xa31280ad-0x481e-0x41b6-0x95e8-0x127f-0x4c984779' : 'TianoCompress',
 | |
|         '0xee4e5898-0x3914-0x4259-0x9d6e-0xdc7b-0xd79403cf' : 'LzmaCompress'
 | |
|     }
 | |
| 
 | |
|     ## The constructor
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #
 | |
|     def __init__(self):
 | |
|         SectionClassObject.__init__(self)
 | |
| 
 | |
|     ## GenSection() method
 | |
|     #
 | |
|     #   virtual function
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #   @param  OutputPath  Where to place output file
 | |
|     #   @param  ModuleName  Which module this section belongs to
 | |
|     #   @param  SecNum      Index of section
 | |
|     #   @param  KeyStringList  Filter for inputs of section generation
 | |
|     #   @param  FfsInf      FfsInfStatement object that contains this section data
 | |
|     #   @param  Dict        dictionary contains macro and its value
 | |
|     #
 | |
|     def GenSection(self, OutputPath, GuidName, SecNum, keyStringList, FfsInf = None, Dict = {}):
 | |
|         pass
 | |
| 
 | |
|     ## GetFileList() method
 | |
|     #
 | |
|     #   Generate compressed section
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #   @param  FfsInf      FfsInfStatement object that contains file list
 | |
|     #   @param  FileType    File type to get
 | |
|     #   @param  FileExtension  File extension to get
 | |
|     #   @param  Dict        dictionary contains macro and its value
 | |
|     #   @retval tuple       (File list, boolean)
 | |
|     #
 | |
|     def GetFileList(FfsInf, FileType, FileExtension, Dict = {}, IsMakefile=False):
 | |
|         IsSect = FileType in Section.SectFileType
 | |
| 
 | |
|         if FileExtension is not None:
 | |
|             Suffix = FileExtension
 | |
|         elif IsSect :
 | |
|             Suffix = Section.SectionType.get(FileType)
 | |
|         else:
 | |
|             Suffix = Section.BinFileType.get(FileType)
 | |
|         if FfsInf is None:
 | |
|             EdkLogger.error("GenFds", GENFDS_ERROR, 'Inf File does not exist!')
 | |
| 
 | |
|         FileList = []
 | |
|         if FileType is not None:
 | |
|             for File in FfsInf.BinFileList:
 | |
|                 if File.Arch == TAB_ARCH_COMMON or FfsInf.CurrentArch == File.Arch:
 | |
|                     if File.Type == FileType or (int(FfsInf.PiSpecVersion, 16) >= 0x0001000A \
 | |
|                                                  and FileType == 'DXE_DPEX' and File.Type == BINARY_FILE_TYPE_SMM_DEPEX) \
 | |
|                                                  or (FileType == BINARY_FILE_TYPE_TE and File.Type == BINARY_FILE_TYPE_PE32):
 | |
|                         if '*' in FfsInf.TargetOverrideList or File.Target == '*' or File.Target in FfsInf.TargetOverrideList or FfsInf.TargetOverrideList == []:
 | |
|                             FileList.append(FfsInf.PatchEfiFile(File.Path, File.Type))
 | |
|                         else:
 | |
|                             GenFdsGlobalVariable.InfLogger ("\nBuild Target \'%s\' of File %s is not in the Scope of %s specified by INF %s in FDF" %(File.Target, File.File, FfsInf.TargetOverrideList, FfsInf.InfFileName))
 | |
|                     else:
 | |
|                         GenFdsGlobalVariable.VerboseLogger ("\nFile Type \'%s\' of File %s in %s is not same with file type \'%s\' from Rule in FDF" %(File.Type, File.File, FfsInf.InfFileName, FileType))
 | |
|                 else:
 | |
|                     GenFdsGlobalVariable.InfLogger ("\nCurrent ARCH \'%s\' of File %s is not in the Support Arch Scope of %s specified by INF %s in FDF" %(FfsInf.CurrentArch, File.File, File.Arch, FfsInf.InfFileName))
 | |
| 
 | |
|         if (not IsMakefile and Suffix is not None and os.path.exists(FfsInf.EfiOutputPath)) or (IsMakefile and Suffix is not None):
 | |
|             #
 | |
|             # Get Makefile path and time stamp
 | |
|             #
 | |
|             MakefileDir = FfsInf.EfiOutputPath[:-len('OUTPUT')]
 | |
|             Makefile = os.path.join(MakefileDir, 'Makefile')
 | |
|             if not os.path.exists(Makefile):
 | |
|                 Makefile = os.path.join(MakefileDir, 'GNUmakefile')
 | |
|             if os.path.exists(Makefile):
 | |
|                 # Update to search files with suffix in all sub-dirs.
 | |
|                 Tuple = os.walk(FfsInf.EfiOutputPath)
 | |
|                 for Dirpath, Dirnames, Filenames in Tuple:
 | |
|                     for F in Filenames:
 | |
|                         if os.path.splitext(F)[1] == Suffix:
 | |
|                             FullName = os.path.join(Dirpath, F)
 | |
|                             if os.path.getmtime(FullName) > os.path.getmtime(Makefile):
 | |
|                                 FileList.append(FullName)
 | |
|             if not FileList:
 | |
|                 SuffixMap = FfsInf.GetFinalTargetSuffixMap()
 | |
|                 if Suffix in SuffixMap:
 | |
|                     FileList.extend(SuffixMap[Suffix])
 | |
| 
 | |
|         #Process the file lists is alphabetical for a same section type
 | |
|         if len (FileList) > 1:
 | |
|             FileList.sort()
 | |
| 
 | |
|         return FileList, IsSect
 | |
|     GetFileList = staticmethod(GetFileList)
 |