mirror of
https://github.com/acidanthera/audk.git
synced 2025-09-24 18:27:49 +02:00
[WIP] BaseTools: Support UE generation
This commit is contained in:
parent
dbebb53c11
commit
c2db36fa1c
@ -122,6 +122,7 @@ BINARY_FILE_TYPE_PIC = 'PIC'
|
||||
BINARY_FILE_TYPE_PEI_DEPEX = 'PEI_DEPEX'
|
||||
BINARY_FILE_TYPE_DXE_DEPEX = 'DXE_DEPEX'
|
||||
BINARY_FILE_TYPE_SMM_DEPEX = 'SMM_DEPEX'
|
||||
BINARY_FILE_TYPE_UE = 'UE'
|
||||
BINARY_FILE_TYPE_VER = 'VER'
|
||||
BINARY_FILE_TYPE_UI = 'UI'
|
||||
BINARY_FILE_TYPE_BIN = 'BIN'
|
||||
|
@ -79,10 +79,10 @@ class DataSection (DataSectionClassObject):
|
||||
CopyLongFilePath(MapFile, CopyMapFile)
|
||||
|
||||
#Get PE Section alignment when align is set to AUTO
|
||||
if self.Alignment == 'Auto' and self.SecType in (BINARY_FILE_TYPE_PE32):
|
||||
if self.Alignment == 'Auto' and self.SecType in (BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_UE):
|
||||
self.Alignment = "0"
|
||||
NoStrip = True
|
||||
if self.SecType in (BINARY_FILE_TYPE_PE32):
|
||||
if self.SecType in (BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_UE):
|
||||
if self.KeepReloc is not None:
|
||||
NoStrip = self.KeepReloc
|
||||
|
||||
@ -101,6 +101,16 @@ class DataSection (DataSectionClassObject):
|
||||
)
|
||||
self.SectFileName = StrippedFile
|
||||
|
||||
if self.SecType == BINARY_FILE_TYPE_UE:
|
||||
UeFile = os.path.join( OutputPath, ModuleName + 'Ue.raw')
|
||||
GenFdsGlobalVariable.GenerateFirmwareImage(
|
||||
UeFile,
|
||||
GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict),
|
||||
Format = "UE",
|
||||
IsMakefile = IsMakefile
|
||||
)
|
||||
self.SectFileName = UeFile
|
||||
|
||||
OutputFile = os.path.join (OutputPath, ModuleName + SUP_MODULE_SEC + SecNum + SectionSuffix.get(self.SecType))
|
||||
OutputFile = os.path.normpath(OutputFile)
|
||||
GenFdsGlobalVariable.GenerateSection(OutputFile, [self.SectFileName], Section.Section.SectionType.get(self.SecType), IsMakefile = IsMakefile)
|
||||
|
@ -62,7 +62,7 @@ class EfiSection (EfiSectionClassObject):
|
||||
StringData = FfsInf.__ExtendMacro__(self.StringData)
|
||||
ModuleNameStr = FfsInf.__ExtendMacro__('$(MODULE_NAME)')
|
||||
NoStrip = True
|
||||
if FfsInf.ModuleType in (SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, SUP_MODULE_MM_CORE_STANDALONE) and SectionType in (BINARY_FILE_TYPE_PE32):
|
||||
if FfsInf.ModuleType in (SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, SUP_MODULE_MM_CORE_STANDALONE) and SectionType in (BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_UE):
|
||||
if FfsInf.KeepReloc is not None:
|
||||
NoStrip = FfsInf.KeepReloc
|
||||
elif FfsInf.KeepRelocFromRule is not None:
|
||||
@ -259,7 +259,7 @@ class EfiSection (EfiSectionClassObject):
|
||||
File = GenFdsGlobalVariable.MacroExtend(File, Dict)
|
||||
|
||||
#Get PE Section alignment when align is set to AUTO
|
||||
if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32):
|
||||
if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_UE):
|
||||
Align = "0"
|
||||
if File[(len(File)-4):] == '.efi' and FfsInf.InfModule.BaseName == os.path.basename(File)[:-4]:
|
||||
MapFile = File.replace('.efi', '.map')
|
||||
@ -296,6 +296,16 @@ class EfiSection (EfiSectionClassObject):
|
||||
)
|
||||
File = StrippedFile
|
||||
|
||||
if SectionType == BINARY_FILE_TYPE_UE:
|
||||
UeFile = os.path.join( OutputPath, ModuleName + 'Ue.raw')
|
||||
GenFdsGlobalVariable.GenerateFirmwareImage(
|
||||
UeFile,
|
||||
File,
|
||||
Format = "UE",
|
||||
IsMakefile = IsMakefile
|
||||
)
|
||||
File = UeFile
|
||||
|
||||
"""Call GenSection"""
|
||||
GenFdsGlobalVariable.GenerateSection(OutputFile,
|
||||
[File],
|
||||
|
@ -2597,7 +2597,7 @@ class FdfParser:
|
||||
#
|
||||
@staticmethod
|
||||
def _SectionCouldHaveRelocFlag (SectionType):
|
||||
if SectionType in {BINARY_FILE_TYPE_PE32}:
|
||||
if SectionType in {BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_UE}:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
@ -2923,10 +2923,10 @@ class FdfParser:
|
||||
self.SetFileBufferPos(OldPos)
|
||||
return False
|
||||
|
||||
if self._Token not in {"COMPAT16", BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_PIC, "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,\
|
||||
if self._Token not in {"COMPAT16", BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_UE, "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,\
|
||||
BINARY_FILE_TYPE_UI, "VERSION", BINARY_FILE_TYPE_PEI_DEPEX, "SUBTYPE_GUID", BINARY_FILE_TYPE_SMM_DEPEX}:
|
||||
raise Warning("Unknown section type '%s'" % self._Token, self.FileName, self.CurrentLineNumber)
|
||||
if AlignValue == 'Auto'and (not self._Token == BINARY_FILE_TYPE_PE32):
|
||||
if AlignValue == 'Auto'and (not self._Token == BINARY_FILE_TYPE_PE32) and (not self._Token == BINARY_FILE_TYPE_UE):
|
||||
raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber)
|
||||
|
||||
# DataSection
|
||||
@ -3726,7 +3726,7 @@ class FdfParser:
|
||||
|
||||
if SectionName not in {
|
||||
"COMPAT16", BINARY_FILE_TYPE_PE32,
|
||||
BINARY_FILE_TYPE_PIC, "FV_IMAGE",
|
||||
BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_UE, "FV_IMAGE",
|
||||
"RAW",BINARY_FILE_TYPE_DXE_DEPEX, BINARY_FILE_TYPE_UI,
|
||||
BINARY_FILE_TYPE_PEI_DEPEX, "VERSION", "SUBTYPE_GUID",
|
||||
BINARY_FILE_TYPE_SMM_DEPEX}:
|
||||
@ -3743,7 +3743,7 @@ class FdfParser:
|
||||
if self._GetAlignment():
|
||||
if self._Token not in ALIGNMENTS:
|
||||
raise Warning("Incorrect alignment '%s'" % self._Token, self.FileName, self.CurrentLineNumber)
|
||||
if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32):
|
||||
if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32) and (not SectionName == BINARY_FILE_TYPE_UE):
|
||||
raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber)
|
||||
SectAlignment = self._Token
|
||||
|
||||
@ -3796,7 +3796,7 @@ class FdfParser:
|
||||
|
||||
if SectionName not in {
|
||||
"COMPAT16", BINARY_FILE_TYPE_PE32,
|
||||
BINARY_FILE_TYPE_PIC, "FV_IMAGE",
|
||||
BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_UE, "FV_IMAGE",
|
||||
"RAW",BINARY_FILE_TYPE_DXE_DEPEX, BINARY_FILE_TYPE_UI,
|
||||
BINARY_FILE_TYPE_PEI_DEPEX, "VERSION", "SUBTYPE_GUID",
|
||||
BINARY_FILE_TYPE_SMM_DEPEX, BINARY_FILE_TYPE_GUID}:
|
||||
@ -3843,7 +3843,7 @@ class FdfParser:
|
||||
elif self._GetNextToken():
|
||||
if self._Token not in {
|
||||
T_CHAR_BRACE_R, "COMPAT16", BINARY_FILE_TYPE_PE32,
|
||||
BINARY_FILE_TYPE_PIC,
|
||||
BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_UE,
|
||||
"FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,
|
||||
BINARY_FILE_TYPE_UI, "VERSION",
|
||||
BINARY_FILE_TYPE_PEI_DEPEX, BINARY_FILE_TYPE_GUID,
|
||||
@ -3907,7 +3907,7 @@ class FdfParser:
|
||||
if self._GetAlignment():
|
||||
if self._Token not in ALIGNMENTS:
|
||||
raise Warning("Incorrect alignment '%s'" % self._Token, self.FileName, self.CurrentLineNumber)
|
||||
if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32):
|
||||
if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32) and (not SectionName == BINARY_FILE_TYPE_UE):
|
||||
raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber)
|
||||
EfiSectionObj.Alignment = self._Token
|
||||
|
||||
@ -3928,7 +3928,7 @@ class FdfParser:
|
||||
elif self._GetNextToken():
|
||||
if self._Token not in {
|
||||
T_CHAR_BRACE_R, "COMPAT16", BINARY_FILE_TYPE_PE32,
|
||||
BINARY_FILE_TYPE_PIC,
|
||||
BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_UE,
|
||||
"FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,
|
||||
BINARY_FILE_TYPE_UI, "VERSION",
|
||||
BINARY_FILE_TYPE_PEI_DEPEX, BINARY_FILE_TYPE_GUID,
|
||||
@ -4020,6 +4020,9 @@ class FdfParser:
|
||||
elif SectionType == BINARY_FILE_TYPE_PIC:
|
||||
if FileType not in {BINARY_FILE_TYPE_PIC, "SEC_PIC"}:
|
||||
raise Warning(WarningString % FileType, self.FileName, self.CurrentLineNumber)
|
||||
elif SectionType == BINARY_FILE_TYPE_UE:
|
||||
if FileType not in {BINARY_FILE_TYPE_UE, "SEC_UE"}:
|
||||
raise Warning(WarningString % FileType, self.FileName, self.CurrentLineNumber)
|
||||
elif SectionType == "RAW":
|
||||
if FileType not in {BINARY_FILE_TYPE_BIN, "SEC_BIN", "RAW", "ASL", "ACPI"}:
|
||||
raise Warning(WarningString % FileType, self.FileName, self.CurrentLineNumber)
|
||||
|
@ -33,6 +33,7 @@ FdfFvFileTypeToFileType = {
|
||||
SectionSuffix = {
|
||||
BINARY_FILE_TYPE_PE32 : '.pe32',
|
||||
BINARY_FILE_TYPE_PIC : '.pic',
|
||||
BINARY_FILE_TYPE_UE : '.pe32',
|
||||
BINARY_FILE_TYPE_DXE_DEPEX : '.dpx',
|
||||
'VERSION' : '.ver',
|
||||
BINARY_FILE_TYPE_UI : '.ui',
|
||||
|
@ -769,7 +769,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
|
||||
File = GenFdsGlobalVariable.MacroExtend(File, Dict, self.CurrentArch)
|
||||
|
||||
#Get PE Section alignment when align is set to AUTO
|
||||
if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32):
|
||||
if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_UE):
|
||||
ImageObj = PeImageClass (File)
|
||||
if ImageObj.SectionAlignment < 0x400:
|
||||
self.Alignment = str (ImageObj.SectionAlignment)
|
||||
@ -793,6 +793,16 @@ class FfsInfStatement(FfsInfStatementClassObject):
|
||||
)
|
||||
File = StrippedFile
|
||||
|
||||
if SectionType == BINARY_FILE_TYPE_UE:
|
||||
UeFile = os.path.join( self.OutputPath, self.ModuleGuid + 'Ue.raw')
|
||||
GenFdsGlobalVariable.GenerateFirmwareImage(
|
||||
UeFile,
|
||||
File,
|
||||
Format = "UE",
|
||||
IsMakefile=IsMakefile
|
||||
)
|
||||
File = UeFile
|
||||
|
||||
GenFdsGlobalVariable.GenerateSection(OutputFile, [File], Section.Section.SectionType[SectionType], IsMakefile=IsMakefile)
|
||||
OutputFileList.append(OutputFile)
|
||||
else:
|
||||
@ -803,7 +813,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
|
||||
GenSecInputFile = GenFdsGlobalVariable.MacroExtend(GenSecInputFile, Dict, self.CurrentArch)
|
||||
|
||||
#Get PE Section alignment when align is set to AUTO
|
||||
if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32):
|
||||
if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_UE):
|
||||
ImageObj = PeImageClass (GenSecInputFile)
|
||||
if ImageObj.SectionAlignment < 0x400:
|
||||
self.Alignment = str (ImageObj.SectionAlignment)
|
||||
@ -828,6 +838,16 @@ class FfsInfStatement(FfsInfStatementClassObject):
|
||||
)
|
||||
GenSecInputFile = StrippedFile
|
||||
|
||||
if SectionType == BINARY_FILE_TYPE_UE:
|
||||
UeFile = os.path.join( self.OutputPath, self.ModuleGuid + 'Ue.raw')
|
||||
GenFdsGlobalVariable.GenerateFirmwareImage(
|
||||
UeFile,
|
||||
GenSecInputFile,
|
||||
Format = "UE",
|
||||
IsMakefile=IsMakefile
|
||||
)
|
||||
GenSecInputFile = UeFile
|
||||
|
||||
GenFdsGlobalVariable.GenerateSection(OutputFile, [GenSecInputFile], Section.Section.SectionType[SectionType], IsMakefile=IsMakefile)
|
||||
OutputFileList.append(OutputFile)
|
||||
|
||||
|
@ -733,12 +733,12 @@ class GenFds(object):
|
||||
if not os.path.exists(FfsPath[0]):
|
||||
continue
|
||||
MatchDict = {}
|
||||
ReFileEnds = compile('\S+(.ui)$|\S+(fv.sec.txt)$|\S+(.pe32.txt)$|\S+(.pic.txt)$|\S+(.raw.txt)$|\S+(.ffs.txt)$')
|
||||
ReFileEnds = compile('\S+(.ui)$|\S+(fv.sec.txt)$|\S+(.pe32.txt)$|\S+(.ue.txt)$|\S+(.pic.txt)$|\S+(.raw.txt)$|\S+(.ffs.txt)$')
|
||||
FileList = os.listdir(FfsPath[0])
|
||||
for File in FileList:
|
||||
Match = ReFileEnds.search(File)
|
||||
if Match:
|
||||
for Index in range(1, 7):
|
||||
for Index in range(1, 8):
|
||||
if Match.group(Index) and Match.group(Index) in MatchDict:
|
||||
MatchDict[Match.group(Index)].append(File)
|
||||
elif Match.group(Index):
|
||||
@ -759,6 +759,8 @@ class GenFds(object):
|
||||
FileList = MatchDict['fv.sec.txt']
|
||||
elif '.pe32.txt' in MatchDict:
|
||||
FileList = MatchDict['.pe32.txt']
|
||||
elif '.ue.txt' in MatchDict:
|
||||
FileList = MatchDict['.ue.txt']
|
||||
elif '.pic.txt' in MatchDict:
|
||||
FileList = MatchDict['.pic.txt']
|
||||
elif '.raw.txt' in MatchDict:
|
||||
|
@ -26,6 +26,7 @@ class Section (SectionClassObject):
|
||||
'FREEFORM' : 'EFI_SECTION_FREEFORM_SUBTYPE_GUID',
|
||||
BINARY_FILE_TYPE_PE32 : 'EFI_SECTION_PE32',
|
||||
BINARY_FILE_TYPE_PIC : 'EFI_SECTION_PIC',
|
||||
BINARY_FILE_TYPE_UE : 'EFI_SECTION_PE32',
|
||||
'FV_IMAGE' : 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE',
|
||||
'COMPAT16' : 'EFI_SECTION_COMPATIBILITY16',
|
||||
BINARY_FILE_TYPE_DXE_DEPEX : 'EFI_SECTION_DXE_DEPEX',
|
||||
@ -46,6 +47,7 @@ class Section (SectionClassObject):
|
||||
BINARY_FILE_TYPE_PIC : '.pic',
|
||||
BINARY_FILE_TYPE_PEI_DEPEX : '.depex',
|
||||
'SEC_PEI_DEPEX' : '.depex',
|
||||
BINARY_FILE_TYPE_UE : '.pe32',
|
||||
BINARY_FILE_TYPE_UNI_VER : '.ver',
|
||||
BINARY_FILE_TYPE_VER : '.ver',
|
||||
BINARY_FILE_TYPE_UNI_UI : '.ui',
|
||||
@ -121,7 +123,8 @@ class Section (SectionClassObject):
|
||||
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):
|
||||
and FileType == 'DXE_DPEX' and File.Type == BINARY_FILE_TYPE_SMM_DEPEX) \
|
||||
or (FileType == BINARY_FILE_TYPE_UE and File.Type == BINARY_FILE_TYPE_PE32):
|
||||
if TAB_STAR in FfsInf.TargetOverrideList or File.Target == TAB_STAR or File.Target in FfsInf.TargetOverrideList or FfsInf.TargetOverrideList == []:
|
||||
FileList.append(FfsInf.PatchEfiFile(File.Path, File.Type))
|
||||
else:
|
||||
|
@ -424,6 +424,7 @@ BINARY_FILE_TYPE_PIC = 'PIC'
|
||||
BINARY_FILE_TYPE_PEI_DEPEX = 'PEI_DEPEX'
|
||||
BINARY_FILE_TYPE_DXE_DEPEX = 'DXE_DEPEX'
|
||||
BINARY_FILE_TYPE_SMM_DEPEX = 'SMM_DEPEX'
|
||||
BINARY_FILE_TYPE_UE = 'UE'
|
||||
BINARY_FILE_TYPE_VER = 'VER'
|
||||
BINARY_FILE_TYPE_UI = 'UI'
|
||||
BINARY_FILE_TYPE_BIN = 'BIN'
|
||||
|
Loading…
x
Reference in New Issue
Block a user