public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Bob Feng" <bob.c.feng@intel.com>
To: "Fan, ZhijuX" <zhijux.fan@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: Thu, 30 May 2019 02:16:11 +0000	[thread overview]
Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D160126091@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <FAD0D7E0AE0FA54D987F6E72435CAFD50AF63298@SHSMSX101.ccr.corp.intel.com>

OK. For this patch, Reviewed-by: Bob Feng <bob.c.feng@intel.com>


-----Original Message-----
From: Fan, ZhijuX 
Sent: Wednesday, May 29, 2019 4:25 PM
To: Feng, Bob C <bob.c.feng@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

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


      reply	other threads:[~2019-05-30  2:16 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
2019-05-30  2:16     ` Bob Feng [this message]

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=08650203BA1BD64D8AD9B6D5D74A85D160126091@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