public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE
@ 2019-05-29  5:29 Fan, ZhijuX
  2019-05-29  7:05 ` Liming Gao
  2019-05-29  7:16 ` Bob Feng
  0 siblings, 2 replies; 5+ messages in thread
From: Fan, ZhijuX @ 2019-05-29  5:29 UTC (permalink / raw)
  To: devel@edk2.groups.io; +Cc: Gao, Liming, Feng, Bob C

[-- Attachment #1: Type: text/plain, Size: 8288 bytes --]

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


[-- Attachment #2: winmail.dat --]
[-- Type: application/ms-tnef, Size: 6443 bytes --]

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE
  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
  1 sibling, 0 replies; 5+ messages in thread
From: Liming Gao @ 2019-05-29  7:05 UTC (permalink / raw)
  To: Fan, ZhijuX, devel@edk2.groups.io; +Cc: Feng, Bob C

Tested-by: Liming Gao <liming.gao@intel.com>

>-----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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE
  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
  1 sibling, 1 reply; 5+ messages in thread
From: Bob Feng @ 2019-05-29  7:16 UTC (permalink / raw)
  To: Fan, ZhijuX, devel@edk2.groups.io; +Cc: Gao, Liming

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


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE
  2019-05-29  7:16 ` Bob Feng
@ 2019-05-29  8:24   ` Fan, ZhijuX
  2019-05-30  2:16     ` Bob Feng
  0 siblings, 1 reply; 5+ messages in thread
From: Fan, ZhijuX @ 2019-05-29  8:24 UTC (permalink / raw)
  To: Feng, Bob C, devel@edk2.groups.io; +Cc: Gao, Liming

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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE
  2019-05-29  8:24   ` Fan, ZhijuX
@ 2019-05-30  2:16     ` Bob Feng
  0 siblings, 0 replies; 5+ messages in thread
From: Bob Feng @ 2019-05-30  2:16 UTC (permalink / raw)
  To: Fan, ZhijuX, devel@edk2.groups.io; +Cc: Gao, Liming

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


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-05-30  2:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox