From: "Fan, ZhijuX" <zhijux.fan@intel.com>
To: "Feng, Bob C" <bob.c.feng@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Gao, Liming" <liming.gao@intel.com>
Subject: Re: [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE
Date: Wed, 29 May 2019 08:24:51 +0000 [thread overview]
Message-ID: <FAD0D7E0AE0FA54D987F6E72435CAFD50AF63298@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <08650203BA1BD64D8AD9B6D5D74A85D160117721@SHSMSX101.ccr.corp.intel.com>
The Dict parameter is not used in this function, I will enter an BZ:
https://bugzilla.tianocore.org/show_bug.cgi?id=1858 to clean up the unused parameters
Any question, please let me know. Thanks.
Best Regards
Fan Zhiju
> -----Original Message-----
> From: Feng, Bob C
> Sent: Wednesday, May 29, 2019 3:16 PM
> To: Fan, ZhijuX <zhijux.fan@intel.com>; devel@edk2.groups.io
> Cc: Gao, Liming <liming.gao@intel.com>
> Subject: RE: [PATCH V5] BaseTools:Make BaseTools support new rules to
> generate RAW FFS FILE
>
> Hi Zhiju,
>
> For the changes,
>
> - def __InfParse__(self, Dict = {}):
> + def __InfParse__(self, Dict = None, IsGenFfs=False):
>
> and
>
> - def GetFileList(FfsInf, FileType, FileExtension, Dict = {}, IsMakefile=False):
> + def GetFileList(FfsInf, FileType, FileExtension, Dict = None,
> IsMakefile=False, SectionType=None):
>
> I think you need to add
> If Dict is None:
> Dict = {}
>
> In the function body.
>
>
> Thanks,
> Bob
>
> -----Original Message-----
> From: Fan, ZhijuX
> Sent: Wednesday, May 29, 2019 1:30 PM
> To: devel@edk2.groups.io
> Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C <bob.c.feng@intel.com>
> Subject: [PATCH V5] BaseTools:Make BaseTools support new rules to
> generate RAW FFS FILE
>
> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1765
>
> If RAW FFS File Rule 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) {
> $(INF_OUTPUT)/$(MODULE_NAME).bin
> }
> [Rule.Common.USER_DEFINED.LOGO]
> FILE RAW = $(NAMED_GUID) {
> |.bmp
> }
>
> 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.
>
> The patch is to make the BaseTools support these two rules
>
> 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 | 22
> +++++++++++++++++++++-
> BaseTools/Source/Python/GenFds/FdfParser.py | 14 ++++++++++++--
> BaseTools/Source/Python/GenFds/FfsInfStatement.py | 9 ++++++---
> BaseTools/Source/Python/GenFds/Section.py | 7 ++++++-
> 5 files changed, 46 insertions(+), 7 deletions(-)
>
> diff --git a/BaseTools/Source/Python/Common/DataType.py
> b/BaseTools/Source/Python/Common/DataType.py
> index 7cd67bc01a..83ec36c235 100644
> --- a/BaseTools/Source/Python/Common/DataType.py
> +++ b/BaseTools/Source/Python/Common/DataType.py
> @@ -122,6 +122,7 @@ BINARY_FILE_TYPE_VER = 'VER'
> BINARY_FILE_TYPE_UI = 'UI'
> BINARY_FILE_TYPE_BIN = 'BIN'
> BINARY_FILE_TYPE_FV = 'FV'
> +BINARY_FILE_TYPE_RAW = 'RAW_BINARY'
>
> 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..74f176cfef 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
>
> @@ -217,6 +217,26 @@ class EfiSection (EfiSectionClassObject):
> Ui=StringData, IsMakefile=IsMakefile)
> OutputFileList.append(OutputFile)
>
> + #
> + # If Section Type is BINARY_FILE_TYPE_RAW
> + #
> + elif SectionType == BINARY_FILE_TYPE_RAW:
> + """If File List is empty"""
> + if FileList == []:
> + if self.Optional == True:
> + GenFdsGlobalVariable.VerboseLogger("Optional Section don't
> exist!")
> + return [], None
> + else:
> + EdkLogger.error("GenFds", GENFDS_ERROR, "Output
> + file for %s section could not be found for %s" % (SectionType,
> + InfFileName))
> +
> + elif len(FileList) > 1:
> + 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:
> + for File in FileList:
> + File = GenFdsGlobalVariable.MacroExtend(File, Dict)
> + OutputFileList.append(File)
>
> else:
> """If File List is empty"""
> diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py
> b/BaseTools/Source/Python/GenFds/FdfParser.py
> index ea1c3eeb30..fb5fd85e0a 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 Obj.FvFileType == "RAW" 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_RAW
> + 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/FfsInfStatement.py
> b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
> index 78dd7cd51a..cd3b0f6477 100644
> --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py
> +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py
> @@ -147,7 +147,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
> # @param self The object pointer
> # @param Dict dictionary contains macro and value pair
> #
> - def __InfParse__(self, Dict = {}):
> + def __InfParse__(self, Dict = None, IsGenFfs=False):
>
> GenFdsGlobalVariable.VerboseLogger( " Begine parsing INf
> file : %s" %self.InfFileName)
>
> @@ -348,7 +348,10 @@ class FfsInfStatement(FfsInfStatementClassObject):
> #
> # Set OutputPath = ${WorkSpace}\Build\Fv\Ffs\${ModuleGuid}+
> ${ModuleName}\
> #
> -
> + if IsGenFfs:
> + Rule = self.__GetRule__()
> + if GlobalData.gGuidPatternEnd.match(Rule.NameGuid):
> + self.ModuleGuid = Rule.NameGuid
> self.OutputPath = os.path.join(GenFdsGlobalVariable.FfsDir, \
> self.ModuleGuid + self.BaseName)
> if not os.path.exists(self.OutputPath) :
> @@ -438,7 +441,7 @@ class FfsInfStatement(FfsInfStatementClassObject):
> # Parse Inf file get Module related information
> #
>
> - self.__InfParse__(Dict)
> + self.__InfParse__(Dict, IsGenFfs=True)
> Arch = self.GetCurrentArch()
> SrcFile = mws.join( GenFdsGlobalVariable.WorkSpaceDir,
> self.InfFileName);
> DestFile = os.path.join( self.OutputPath, self.ModuleGuid + '.ffs') diff --
> git a/BaseTools/Source/Python/GenFds/Section.py
> b/BaseTools/Source/Python/GenFds/Section.py
> index c49a1ac84b..b238956634 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 = None,
> 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_RAW:
> + 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
next prev parent reply other threads:[~2019-05-29 8:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-29 5:29 [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE Fan, ZhijuX
2019-05-29 7:05 ` Liming Gao
2019-05-29 7:16 ` Bob Feng
2019-05-29 8:24 ` Fan, ZhijuX [this message]
2019-05-30 2:16 ` Bob Feng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=FAD0D7E0AE0FA54D987F6E72435CAFD50AF63298@SHSMSX101.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox