BaseTools/Source/Python/Common/DataType.py | 1 + BaseTools/Source/Python/GenFds/EfiSection.py | 10 ++++++++-- BaseTools/Source/Python/GenFds/FdfParser.py | 14 ++++++++++++-- BaseTools/Source/Python/GenFds/Section.py | 7 ++++++- 4 files changed, 27 insertions(+), 5 deletions(-)
BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1765
RAW FFS File has no section for its data. For RAW FFS File,
directly call GenFfs tool to generate FFS file.
Ffs Rule:
[Rule.Common.USER_DEFINED.MicroCode]
FILE RAW = $(NAMED_GUID) {
SectionType FileType $(INF_OUTPUT)/$(MODULE_NAME).bin
}
As shown in the rule above,if SectionType and FileType not defined,
FFS files are generated directly, and no other type of file is
generated.
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
---
BaseTools/Source/Python/Common/DataType.py | 1 +
BaseTools/Source/Python/GenFds/EfiSection.py | 10 ++++++++--
BaseTools/Source/Python/GenFds/FdfParser.py | 14 ++++++++++++--
BaseTools/Source/Python/GenFds/Section.py | 7 ++++++-
4 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py
index 780711bf8e..1879aea665 100644
--- a/BaseTools/Source/Python/Common/DataType.py
+++ b/BaseTools/Source/Python/Common/DataType.py
@@ -121,6 +121,7 @@ BINARY_FILE_TYPE_VER = 'VER'
BINARY_FILE_TYPE_UI = 'UI'
BINARY_FILE_TYPE_BIN = 'BIN'
BINARY_FILE_TYPE_FV = 'FV'
+BINARY_FILE_TYPE_FFS = 'FFS'
PLATFORM_COMPONENT_TYPE_LIBRARY_CLASS = 'LIBRARY_CLASS'
PLATFORM_COMPONENT_TYPE_MODULE = 'MODULE'
diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py b/BaseTools/Source/Python/GenFds/EfiSection.py
index 302f244faf..5346a0569f 100644
--- a/BaseTools/Source/Python/GenFds/EfiSection.py
+++ b/BaseTools/Source/Python/GenFds/EfiSection.py
@@ -93,7 +93,7 @@ class EfiSection (EfiSectionClassObject):
if '.depex' in SuffixMap:
FileList.append(Filename)
else:
- FileList, IsSect = Section.Section.GetFileList(FfsInf, self.FileType, self.FileExtension, Dict, IsMakefile=IsMakefile)
+ FileList, IsSect = Section.Section.GetFileList(FfsInf, self.FileType, self.FileExtension, Dict, IsMakefile=IsMakefile, SectionType=SectionType)
if IsSect :
return FileList, self.Alignment
@@ -227,14 +227,20 @@ class EfiSection (EfiSectionClassObject):
else:
EdkLogger.error("GenFds", GENFDS_ERROR, "Output file for %s section could not be found for %s" % (SectionType, InfFileName))
+ elif len(FileList) > 1 and SectionType == BINARY_FILE_TYPE_FFS:
+ EdkLogger.error("GenFds", GENFDS_ERROR,"Files suffixed with %s are not allowed to have more than one file in %s[Binaries] section" % (self.FileExtension, InfFileName))
+
else:
"""Convert the File to Section file one by one """
for File in FileList:
""" Copy Map file to FFS output path """
Index = Index + 1
Num = '%s.%d' %(SecNum, Index)
- OutputFile = os.path.join( OutputPath, ModuleName + SUP_MODULE_SEC + Num + SectionSuffix.get(SectionType))
File = GenFdsGlobalVariable.MacroExtend(File, Dict)
+ if SectionType == BINARY_FILE_TYPE_FFS:
+ OutputFileList.append(File)
+ return OutputFileList, Align
+ OutputFile = os.path.join( OutputPath, ModuleName + SUP_MODULE_SEC + Num + SectionSuffix.get(SectionType))
#Get PE Section alignment when align is set to AUTO
if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_TE):
diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py
index ea1c3eeb30..8446e3be4c 100644
--- a/BaseTools/Source/Python/GenFds/FdfParser.py
+++ b/BaseTools/Source/Python/GenFds/FdfParser.py
@@ -3749,8 +3749,19 @@ class FdfParser:
#
def _GetEfiSection(self, Obj):
OldPos = self.GetFileBufferPos()
+ EfiSectionObj = EfiSection()
if not self._GetNextWord():
- return False
+ CurrentLine = self._CurrentLine()[self.CurrentOffsetWithinLine:].split()[0].strip()
+ if self._Token == '{' and TAB_SPLIT in CurrentLine:
+ if self._IsToken(TAB_VALUE_SPLIT):
+ EfiSectionObj.FileExtension = self._GetFileExtension()
+ elif self._GetNextToken():
+ EfiSectionObj.FileName = self._Token
+ EfiSectionObj.SectionType = BINARY_FILE_TYPE_FFS
+ Obj.SectionList.append(EfiSectionObj)
+ return True
+ else:
+ return False
SectionName = self._Token
if SectionName not in {
@@ -3816,7 +3827,6 @@ class FdfParser:
Obj.SectionList.append(FvImageSectionObj)
return True
- EfiSectionObj = EfiSection()
EfiSectionObj.SectionType = SectionName
if not self._GetNextToken():
diff --git a/BaseTools/Source/Python/GenFds/Section.py b/BaseTools/Source/Python/GenFds/Section.py
index c49a1ac84b..ae03828fef 100644
--- a/BaseTools/Source/Python/GenFds/Section.py
+++ b/BaseTools/Source/Python/GenFds/Section.py
@@ -106,7 +106,7 @@ class Section (SectionClassObject):
# @param Dict dictionary contains macro and its value
# @retval tuple (File list, boolean)
#
- def GetFileList(FfsInf, FileType, FileExtension, Dict = {}, IsMakefile=False):
+ def GetFileList(FfsInf, FileType, FileExtension, Dict = {}, IsMakefile=False, SectionType=None):
IsSect = FileType in Section.SectFileType
if FileExtension is not None:
@@ -134,6 +134,11 @@ class Section (SectionClassObject):
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))
+ elif FileType is None and SectionType == BINARY_FILE_TYPE_FFS:
+ for File in FfsInf.BinFileList:
+ if File.Ext == Suffix:
+ FileList.append(File.Path)
+
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
--
2.14.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#41263): https://edk2.groups.io/g/devel/message/41263
Mute This Topic: https://groups.io/mt/31727737/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Zhiju: This usage is only valid when FILE type RAW. Please add this check. Thanks Liming >-----Original Message----- >From: Fan, ZhijuX >Sent: Thursday, May 23, 2019 11:30 AM >To: devel@edk2.groups.io >Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C <bob.c.feng@intel.com> >Subject: [PATCH] BaseTools:Make BaseTools support the correct RAW FFS FILE >generation > >BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1765 > >RAW FFS File has no section for its data. For RAW FFS File, >directly call GenFfs tool to generate FFS file. > >Ffs Rule: >[Rule.Common.USER_DEFINED.MicroCode] > FILE RAW = $(NAMED_GUID) { > SectionType FileType $(INF_OUTPUT)/$(MODULE_NAME).bin > } >As shown in the rule above,if SectionType and FileType not defined, >FFS files are generated directly, and no other type of file is >generated. > >Cc: Bob Feng <bob.c.feng@intel.com> >Cc: Liming Gao <liming.gao@intel.com> >Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com> >--- > BaseTools/Source/Python/Common/DataType.py | 1 + > BaseTools/Source/Python/GenFds/EfiSection.py | 10 ++++++++-- > BaseTools/Source/Python/GenFds/FdfParser.py | 14 ++++++++++++-- > BaseTools/Source/Python/GenFds/Section.py | 7 ++++++- > 4 files changed, 27 insertions(+), 5 deletions(-) > >diff --git a/BaseTools/Source/Python/Common/DataType.py >b/BaseTools/Source/Python/Common/DataType.py >index 780711bf8e..1879aea665 100644 >--- a/BaseTools/Source/Python/Common/DataType.py >+++ b/BaseTools/Source/Python/Common/DataType.py >@@ -121,6 +121,7 @@ BINARY_FILE_TYPE_VER = 'VER' > BINARY_FILE_TYPE_UI = 'UI' > BINARY_FILE_TYPE_BIN = 'BIN' > BINARY_FILE_TYPE_FV = 'FV' >+BINARY_FILE_TYPE_FFS = 'FFS' > > PLATFORM_COMPONENT_TYPE_LIBRARY_CLASS = 'LIBRARY_CLASS' > PLATFORM_COMPONENT_TYPE_MODULE = 'MODULE' >diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py >b/BaseTools/Source/Python/GenFds/EfiSection.py >index 302f244faf..5346a0569f 100644 >--- a/BaseTools/Source/Python/GenFds/EfiSection.py >+++ b/BaseTools/Source/Python/GenFds/EfiSection.py >@@ -93,7 +93,7 @@ class EfiSection (EfiSectionClassObject): > if '.depex' in SuffixMap: > FileList.append(Filename) > else: >- FileList, IsSect = Section.Section.GetFileList(FfsInf, self.FileType, >self.FileExtension, Dict, IsMakefile=IsMakefile) >+ FileList, IsSect = Section.Section.GetFileList(FfsInf, self.FileType, >self.FileExtension, Dict, IsMakefile=IsMakefile, SectionType=SectionType) > if IsSect : > return FileList, self.Alignment > >@@ -227,14 +227,20 @@ class EfiSection (EfiSectionClassObject): > else: > EdkLogger.error("GenFds", GENFDS_ERROR, "Output file for %s >section could not be found for %s" % (SectionType, InfFileName)) > >+ elif len(FileList) > 1 and SectionType == BINARY_FILE_TYPE_FFS: >+ EdkLogger.error("GenFds", GENFDS_ERROR,"Files suffixed with %s >are not allowed to have more than one file in %s[Binaries] section" % >(self.FileExtension, InfFileName)) >+ > else: > """Convert the File to Section file one by one """ > for File in FileList: > """ Copy Map file to FFS output path """ > Index = Index + 1 > Num = '%s.%d' %(SecNum, Index) >- OutputFile = os.path.join( OutputPath, ModuleName + >SUP_MODULE_SEC + Num + SectionSuffix.get(SectionType)) > File = GenFdsGlobalVariable.MacroExtend(File, Dict) >+ if SectionType == BINARY_FILE_TYPE_FFS: >+ OutputFileList.append(File) >+ return OutputFileList, Align >+ OutputFile = os.path.join( OutputPath, ModuleName + >SUP_MODULE_SEC + Num + SectionSuffix.get(SectionType)) > > #Get PE Section alignment when align is set to AUTO > if self.Alignment == 'Auto' and (SectionType == >BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_TE): >diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py >b/BaseTools/Source/Python/GenFds/FdfParser.py >index ea1c3eeb30..8446e3be4c 100644 >--- a/BaseTools/Source/Python/GenFds/FdfParser.py >+++ b/BaseTools/Source/Python/GenFds/FdfParser.py >@@ -3749,8 +3749,19 @@ class FdfParser: > # > def _GetEfiSection(self, Obj): > OldPos = self.GetFileBufferPos() >+ EfiSectionObj = EfiSection() > if not self._GetNextWord(): >- return False >+ CurrentLine = >self._CurrentLine()[self.CurrentOffsetWithinLine:].split()[0].strip() >+ if self._Token == '{' and TAB_SPLIT in CurrentLine: >+ if self._IsToken(TAB_VALUE_SPLIT): >+ EfiSectionObj.FileExtension = self._GetFileExtension() >+ elif self._GetNextToken(): >+ EfiSectionObj.FileName = self._Token >+ EfiSectionObj.SectionType = BINARY_FILE_TYPE_FFS >+ Obj.SectionList.append(EfiSectionObj) >+ return True >+ else: >+ return False > SectionName = self._Token > > if SectionName not in { >@@ -3816,7 +3827,6 @@ class FdfParser: > Obj.SectionList.append(FvImageSectionObj) > return True > >- EfiSectionObj = EfiSection() > EfiSectionObj.SectionType = SectionName > > if not self._GetNextToken(): >diff --git a/BaseTools/Source/Python/GenFds/Section.py >b/BaseTools/Source/Python/GenFds/Section.py >index c49a1ac84b..ae03828fef 100644 >--- a/BaseTools/Source/Python/GenFds/Section.py >+++ b/BaseTools/Source/Python/GenFds/Section.py >@@ -106,7 +106,7 @@ class Section (SectionClassObject): > # @param Dict dictionary contains macro and its value > # @retval tuple (File list, boolean) > # >- def GetFileList(FfsInf, FileType, FileExtension, Dict = {}, IsMakefile=False): >+ def GetFileList(FfsInf, FileType, FileExtension, Dict = {}, IsMakefile=False, >SectionType=None): > IsSect = FileType in Section.SectFileType > > if FileExtension is not None: >@@ -134,6 +134,11 @@ class Section (SectionClassObject): > 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)) > >+ elif FileType is None and SectionType == BINARY_FILE_TYPE_FFS: >+ for File in FfsInf.BinFileList: >+ if File.Ext == Suffix: >+ FileList.append(File.Path) >+ > 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 >-- >2.14.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#41267): https://edk2.groups.io/g/devel/message/41267 Mute This Topic: https://groups.io/mt/31727737/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.