]>
git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/GenFds/AprioriSection.py
be2d9f6de58222752f8e4b6b1b961987158be7f2
2 # process APRIORI file data and generate PEI/DXE APRIORI file
4 # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
6 # SPDX-License-Identifier: BSD-2-Clause-Patent
12 from __future__
import absolute_import
13 from struct
import pack
14 import Common
.LongFilePathOs
as os
15 from io
import BytesIO
16 from .FfsFileStatement
import FileStatement
17 from .GenFdsGlobalVariable
import GenFdsGlobalVariable
18 from Common
.StringUtils
import NormPath
19 from Common
.Misc
import SaveFileOnChange
, PathClass
20 from Common
.EdkLogger
import error
as EdkLoggerError
21 from Common
.BuildToolError
import RESOURCE_NOT_AVAILABLE
22 from Common
.DataType
import TAB_COMMON
24 DXE_APRIORI_GUID
= "FC510EE7-FFDC-11D4-BD41-0080C73C8881"
25 PEI_APRIORI_GUID
= "1B45CC0A-156A-428A-AF62-49864DA0E6E6"
27 ## process APRIORI file data and generate PEI/DXE APRIORI file
30 class AprioriSection (object):
33 # @param self The object pointer
36 self
.DefineVarDict
= {}
42 # Generate FFS for APRIORI file
44 # @param self The object pointer
45 # @param FvName for whom apriori file generated
46 # @param Dict dictionary contains macro and its value
47 # @retval string Generated file name
49 def GenFfs (self
, FvName
, Dict
= {}, IsMakefile
= False):
51 if self
.AprioriType
== "PEI":
52 AprioriFileGuid
= PEI_APRIORI_GUID
54 AprioriFileGuid
= DXE_APRIORI_GUID
56 OutputAprFilePath
= os
.path
.join (GenFdsGlobalVariable
.WorkSpaceDir
, \
57 GenFdsGlobalVariable
.FfsDir
,\
58 AprioriFileGuid
+ FvName
)
59 if not os
.path
.exists(OutputAprFilePath
):
60 os
.makedirs(OutputAprFilePath
)
62 OutputAprFileName
= os
.path
.join( OutputAprFilePath
, \
63 AprioriFileGuid
+ FvName
+ '.Apri' )
64 AprFfsFileName
= os
.path
.join (OutputAprFilePath
,\
65 AprioriFileGuid
+ FvName
+ '.Ffs')
67 Dict
.update(self
.DefineVarDict
)
69 for FfsObj
in self
.FfsList
:
71 if isinstance(FfsObj
, FileStatement
):
72 Guid
= FfsObj
.NameGuid
74 InfFileName
= NormPath(FfsObj
.InfFileName
)
75 Arch
= FfsObj
.GetCurrentArch()
78 Dict
['$(ARCH)'] = Arch
79 InfFileName
= GenFdsGlobalVariable
.MacroExtend(InfFileName
, Dict
, Arch
)
82 Inf
= GenFdsGlobalVariable
.WorkSpace
.BuildObject
[PathClass(InfFileName
, GenFdsGlobalVariable
.WorkSpaceDir
), Arch
, GenFdsGlobalVariable
.TargetName
, GenFdsGlobalVariable
.ToolChainTag
]
85 Inf
= GenFdsGlobalVariable
.WorkSpace
.BuildObject
[PathClass(InfFileName
, GenFdsGlobalVariable
.WorkSpaceDir
), TAB_COMMON
, GenFdsGlobalVariable
.TargetName
, GenFdsGlobalVariable
.ToolChainTag
]
88 if not Inf
.Module
.Binaries
:
89 EdkLoggerError("GenFds", RESOURCE_NOT_AVAILABLE
,
90 "INF %s not found in build ARCH %s!" \
91 % (InfFileName
, GenFdsGlobalVariable
.ArchList
))
93 GuidPart
= Guid
.split('-')
94 Buffer
.write(pack('I', int(GuidPart
[0], 16)))
95 Buffer
.write(pack('H', int(GuidPart
[1], 16)))
96 Buffer
.write(pack('H', int(GuidPart
[2], 16)))
99 Char
= GuidPart
[3][Num
*2:Num
*2+2]
100 Buffer
.write(pack('B', int(Char
, 16)))
103 Char
= GuidPart
[4][Num
*2:Num
*2+2]
104 Buffer
.write(pack('B', int(Char
, 16)))
106 SaveFileOnChange(OutputAprFileName
, Buffer
.getvalue())
108 RawSectionFileName
= os
.path
.join( OutputAprFilePath
, \
109 AprioriFileGuid
+ FvName
+ '.raw' )
114 MakefilePath
= InfFileName
, Arch
115 GenFdsGlobalVariable
.GenerateSection(RawSectionFileName
, [OutputAprFileName
], 'EFI_SECTION_RAW', IsMakefile
=IsMakefile
)
116 GenFdsGlobalVariable
.GenerateFfs(AprFfsFileName
, [RawSectionFileName
],
117 'EFI_FV_FILETYPE_FREEFORM', AprioriFileGuid
, MakefilePath
=MakefilePath
)
119 return AprFfsFileName