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