From: "Liming Gao" <liming.gao@intel.com>
To: "Fan, ZhijuX" <zhijux.fan@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Feng, Bob C" <bob.c.feng@intel.com>
Subject: Re: [PATCH V6] BaseTools:Add the spare space FV image size checker
Date: Wed, 15 Apr 2020 13:20:50 +0000 [thread overview]
Message-ID: <BN6PR11MB39723BDB1CE8E5A9CCFCFB9D80DB0@BN6PR11MB3972.namprd11.prod.outlook.com> (raw)
In-Reply-To: <CY4PR11MB1479E57F3BE8D3918CAED79194DB0@CY4PR11MB1479.namprd11.prod.outlook.com>
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.fan@intel.com>
> Sent: Wednesday, April 15, 2020 7:49 PM
> To: devel@edk2.groups.io
> Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C <bob.c.feng@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.gao@intel.com>
> Cc: Bob Feng <bob.c.feng@intel.com>
> Signed-off-by: Zhiju.Fan <zhijux.fan@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
next prev parent reply other threads:[~2020-04-15 13:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-15 11:49 [PATCH V6] BaseTools:Add the spare space FV image size checker Fan, ZhijuX
2020-04-15 13:20 ` Liming Gao [this message]
2020-04-20 1:17 ` Fan, ZhijuX
2020-04-20 1:18 ` Liming Gao
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=BN6PR11MB39723BDB1CE8E5A9CCFCFB9D80DB0@BN6PR11MB3972.namprd11.prod.outlook.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