Zhiju:
  With this improvement, Reviewed-by: Liming Gao <liming....@intel.com>

> -----Original Message-----
> From: Fan, ZhijuX <zhijux....@intel.com>
> Sent: Monday, April 20, 2020 9:17 AM
> To: Gao, Liming <liming....@intel.com>; devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.f...@intel.com>
> Subject: RE: [PATCH V6] BaseTools:Add the spare space FV image size checker
> 
> Hi LiMing,
> 
> I agree with this change and will improve it
> 
> 
> 
> Any question, please let me know. Thanks.
> 
> Best Regards
> Fan Zhiju
> 
> 
> 
> > -----Original Message-----
> > From: Gao, Liming <liming....@intel.com>
> > Sent: Wednesday, April 15, 2020 9:21 PM
> > To: Fan, ZhijuX <zhijux....@intel.com>; devel@edk2.groups.io
> > Cc: Feng, Bob C <bob.c.f...@intel.com>
> > Subject: RE: [PATCH V6] BaseTools:Add the spare space FV image size checker
> >
> > Zhiju:
> >   Thanks for your update. The change is good to me. For the report error
> > message, I suggest as below
> >
> > xx FV free space xxxx is not enough to meet with the required spare space 
> > xxxx
> > set by -D FV_SPARE_SPACE_THRESHOLD option.
> >
> > Thanks
> > Liming
> > > -----Original Message-----
> > > From: Fan, ZhijuX <zhijux....@intel.com>
> > > Sent: Wednesday, April 15, 2020 7:49 PM
> > > To: devel@edk2.groups.io
> > > Cc: Gao, Liming <liming....@intel.com>; Feng, Bob C
> > > <bob.c.f...@intel.com>
> > > Subject: [PATCH V6] BaseTools:Add the spare space FV image size
> > > checker
> > >
> > > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2654
> > >
> > > If FV is placed in FD region, its FV image size is fixed.
> > > When FV image size exceeds it, it will trig the build break.
> > > To alert the developer to adjust FV image size earlier, I request to
> > > add new checker for the the spare FV space.
> > > When the spare FV space is less than the specified threshold, build
> > > tool will report the error.
> > >
> > > This checker is the optional.
> > > It can be enabled by -D FV_SPARE_SPACE_THRESHOLD=10000.
> > > Macro is the value of the spare space threshold size.
> > > It can be decimal or hex format. If it is enabled, BaseTools will
> > > check every FV with the fixed size.
> > > If FV doesn't meet with the size requirement, Build tool will report
> > > error message to say there is no enough spare space.
> > >
> > > Cc: Liming Gao <liming....@intel.com>
> > > Cc: Bob Feng <bob.c.f...@intel.com>
> > > Signed-off-by: Zhiju.Fan <zhijux....@intel.com>
> > > ---
> > > changed the error message
> > >
> > >  BaseTools/Source/Python/Common/BuildToolError.py |  2 +
> > >  BaseTools/Source/Python/build/build.py           | 47 ++++++++++
> > >  2 files changed, 49 insertions(+)
> > >
> > > diff --git a/BaseTools/Source/Python/Common/BuildToolError.py
> > > b/BaseTools/Source/Python/Common/BuildToolError.py
> > > index ecc83d0f48bd..21549683cd19 100644
> > > --- a/BaseTools/Source/Python/Common/BuildToolError.py
> > > +++ b/BaseTools/Source/Python/Common/BuildToolError.py
> > > @@ -64,6 +64,8 @@ COMMAND_FAILURE = 0x7000
> > >
> > >  PERMISSION_FAILURE = 0x8000
> > >
> > > +FV_FREESIZE_ERROR = 0x9000
> > > +
> > >  CODE_ERROR = 0xC0DE
> > >
> > >  AUTOGEN_ERROR = 0xF000
> > > diff --git a/BaseTools/Source/Python/build/build.py
> > > b/BaseTools/Source/Python/build/build.py
> > > index bec848a7b2e3..68f5b8cabea3 100755
> > > --- a/BaseTools/Source/Python/build/build.py
> > > +++ b/BaseTools/Source/Python/build/build.py
> > > @@ -25,6 +25,7 @@ import traceback
> > >  import multiprocessing
> > >  from threading import Thread,Event,BoundedSemaphore  import threading
> > > +from linecache import getlines
> > >  from subprocess import Popen,PIPE, STDOUT  from collections import
> > > OrderedDict, defaultdict
> > >
> > > @@ -1413,6 +1414,9 @@ class Build():
> > >          if Target == 'fds':
> > >              if GenFdsApi(AutoGenObject.GenFdsCommandDict, self.Db):
> > >                  EdkLogger.error("build", COMMAND_FAILURE)
> > > +            Threshold = self.GetFreeSizeThreshold()
> > > +            if Threshold:
> > > +                self.CheckFreeSizeThreshold(Threshold,
> > > + AutoGenObject.FvDir)
> > >              return True
> > >
> > >          # run
> > > @@ -2311,6 +2315,9 @@ class Build():
> > >                          GenFdsStart = time.time()
> > >                          if GenFdsApi(Wa.GenFdsCommandDict, self.Db):
> > >                              EdkLogger.error("build", COMMAND_FAILURE)
> > > +                        Threshold = self.GetFreeSizeThreshold()
> > > +                        if Threshold:
> > > +                            self.CheckFreeSizeThreshold(Threshold,
> > > + Wa.FvDir)
> > >
> > >                          #
> > >                          # Create MAP file for all platform FVs after 
> > > GenFds.
> > > @@ -2322,6 +2329,46 @@ class Build():
> > >                      #
> > >                      self._SaveMapFile(MapBuffer, Wa)
> > >                  self.CreateGuidedSectionToolsFile(Wa)
> > > +
> > > +    ## GetFreeSizeThreshold()
> > > +    #
> > > +    #   @retval int             Threshold value
> > > +    #
> > > +    def GetFreeSizeThreshold(self):
> > > +        Threshold = None
> > > +        Threshold_Str =
> > GlobalData.gCommandLineDefines.get('FV_SPARE_SPACE_THRESHOLD')
> > > +        if Threshold_Str:
> > > +            try:
> > > +                if Threshold_Str.lower().startswith('0x'):
> > > +                    Threshold = int(Threshold_Str, 16)
> > > +                else:
> > > +                    Threshold = int(Threshold_Str)
> > > +            except:
> > > +                EdkLogger.warn("build", 'incorrect value for
> > > + FV_SPARE_SPACE_THRESHOLD %s.Only decimal or hex format is allowed.'
> > > + %
> > > Threshold_Str)
> > > +        return Threshold
> > > +
> > > +    def CheckFreeSizeThreshold(self, Threshold=None, FvDir=None):
> > > +        if not isinstance(Threshold, int):
> > > +            return
> > > +        if not isinstance(FvDir, str) or not FvDir:
> > > +            return
> > > +        FdfParserObject = GlobalData.gFdfParser
> > > +        FvRegionNameList = [FvName for FvName in
> > > + FdfParserObject.Profile.FvDict if
> > > FdfParserObject.Profile.FvDict[FvName].FvRegionInFD]
> > > +        for FvName in FdfParserObject.Profile.FvDict:
> > > +            if FvName in FvRegionNameList:
> > > +                FvSpaceInfoFileName = os.path.join(FvDir, FvName.upper() 
> > > +
> > '.Fv.map')
> > > +                if os.path.exists(FvSpaceInfoFileName):
> > > +                    FileLinesList = getlines(FvSpaceInfoFileName)
> > > +                    for Line in FileLinesList:
> > > +                        NameValue = Line.split('=')
> > > +                        if len(NameValue) == 2 and NameValue[0].strip() 
> > > ==
> > 'EFI_FV_SPACE_SIZE':
> > > +                            FreeSizeValue = int(NameValue[1].strip(), 0)
> > > +                            if FreeSizeValue < Threshold:
> > > +                                EdkLogger.error("build", 
> > > FV_FREESIZE_ERROR,
> > > +                                                'the required spare
> > > + space in fv image size %d of %s FV exceeds the set spare space in fv
> > > + image size %d' %
> > > (
> > > +                                                    FreeSizeValue, 
> > > FvName, Threshold))
> > > +                            break
> > > +
> > >      ## Generate GuidedSectionTools.txt in the FV directories.
> > >      #
> > >      def CreateGuidedSectionToolsFile(self,Wa):
> > > --
> > > 2.14.1.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#57584): https://edk2.groups.io/g/devel/message/57584
Mute This Topic: https://groups.io/mt/73030314/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to