]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/GenFds/Section.py
4 # Copyright (c) 2007-2017, Intel Corporation. All rights reserved.<BR>
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
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.
18 from CommonDataClass
. FdfClass
import SectionClassObject
19 from GenFdsGlobalVariable
import GenFdsGlobalVariable
20 import Common
. LongFilePathOs
as os
, glob
21 from Common
import EdkLogger
22 from Common
. BuildToolError
import *
27 class Section ( SectionClassObject
):
29 'RAW' : 'EFI_SECTION_RAW' ,
30 'FREEFORM' : 'EFI_SECTION_FREEFORM_SUBTYPE_GUID' ,
31 'PE32' : 'EFI_SECTION_PE32' ,
32 'PIC' : 'EFI_SECTION_PIC' ,
33 'TE' : 'EFI_SECTION_TE' ,
34 'FV_IMAGE' : 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE' ,
35 'DXE_DEPEX' : 'EFI_SECTION_DXE_DEPEX' ,
36 'PEI_DEPEX' : 'EFI_SECTION_PEI_DEPEX' ,
37 'GUIDED' : 'EFI_SECTION_GUID_DEFINED' ,
38 'COMPRESS' : 'EFI_SECTION_COMPRESSION' ,
39 'UI' : 'EFI_SECTION_USER_INTERFACE' ,
40 'SMM_DEPEX' : 'EFI_SECTION_SMM_DEPEX'
51 'PEI_DEPEX' : '.depex' ,
52 'SEC_PEI_DEPEX' : '.depex' ,
60 'COMPAT16' : '.comp16' ,
71 'SEC_COMPAT16' : '.sec' ,
76 '0xa31280ad-0x481e-0x41b6-0x95e8-0x127f-0x4c984779' : 'TianoCompress' ,
77 '0xee4e5898-0x3914-0x4259-0x9d6e-0xdc7b-0xd79403cf' : 'LzmaCompress'
82 # @param self The object pointer
85 SectionClassObject
.__ init
__ ( self
)
87 ## GenSection() method
91 # @param self The object pointer
92 # @param OutputPath Where to place output file
93 # @param ModuleName Which module this section belongs to
94 # @param SecNum Index of section
95 # @param KeyStringList Filter for inputs of section generation
96 # @param FfsInf FfsInfStatement object that contains this section data
97 # @param Dict dictionary contains macro and its value
99 def GenSection ( self
, OutputPath
, GuidName
, SecNum
, keyStringList
, FfsInf
= None , Dict
= {}):
102 ## GetFileList() method
104 # Generate compressed section
106 # @param self The object pointer
107 # @param FfsInf FfsInfStatement object that contains file list
108 # @param FileType File type to get
109 # @param FileExtension File extension to get
110 # @param Dict dictionary contains macro and its value
111 # @retval tuple (File list, boolean)
113 def GetFileList ( FfsInf
, FileType
, FileExtension
, Dict
= {}, IsMakefile
= False ):
114 IsSect
= FileType
in Section
. SectFileType
116 if FileExtension
is not None :
117 Suffix
= FileExtension
119 Suffix
= Section
. SectionType
. get ( FileType
)
121 Suffix
= Section
. BinFileType
. get ( FileType
)
123 EdkLogger
. error ( "GenFds" , GENFDS_ERROR
, 'Inf File does not exist!' )
126 if FileType
is not None :
127 for File
in FfsInf
. BinFileList
:
128 if File
. Arch
== "COMMON" or FfsInf
. CurrentArch
== File
. Arch
:
129 if File
. Type
== FileType
or ( int ( FfsInf
. PiSpecVersion
, 16 ) >= 0x0001000A \
130 and FileType
== 'DXE_DPEX' and File
. Type
== 'SMM_DEPEX' ) \
131 or ( FileType
== 'TE' and File
. Type
== 'PE32' ):
132 if '*' in FfsInf
. TargetOverrideList
or File
. Target
== '*' or File
. Target
in FfsInf
. TargetOverrideList
or FfsInf
. TargetOverrideList
== []:
133 FileList
. append ( FfsInf
. PatchEfiFile ( File
. Path
, File
. Type
))
135 GenFdsGlobalVariable
. InfLogger ( " \n Build 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
))
137 GenFdsGlobalVariable
. VerboseLogger ( " \n File 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
))
139 GenFdsGlobalVariable
. InfLogger ( " \n Current 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
))
141 if ( not IsMakefile
and Suffix
is not None and os
. path
. exists ( FfsInf
. EfiOutputPath
)) or ( IsMakefile
and Suffix
is not None ):
143 # Get Makefile path and time stamp
145 MakefileDir
= FfsInf
. EfiOutputPath
[:- len ( 'OUTPUT' )]
146 Makefile
= os
. path
. join ( MakefileDir
, 'Makefile' )
147 if not os
. path
. exists ( Makefile
):
148 Makefile
= os
. path
. join ( MakefileDir
, 'GNUmakefile' )
149 if os
. path
. exists ( Makefile
):
150 # Update to search files with suffix in all sub-dirs.
151 Tuple
= os
. walk ( FfsInf
. EfiOutputPath
)
152 for Dirpath
, Dirnames
, Filenames
in Tuple
:
154 if os
. path
. splitext ( F
)[ 1 ] == Suffix
:
155 FullName
= os
. path
. join ( Dirpath
, F
)
156 if os
. path
. getmtime ( FullName
) > os
. path
. getmtime ( Makefile
):
157 FileList
. append ( FullName
)
159 SuffixMap
= FfsInf
. GetFinalTargetSuffixMap ()
160 if Suffix
in SuffixMap
:
161 FileList
. extend ( SuffixMap
[ Suffix
])
163 #Process the file lists is alphabetical for a same section type
164 if len ( FileList
) > 1 :
167 return FileList
, IsSect
168 GetFileList
= staticmethod ( GetFileList
)