From: "Gao, Liming" <liming.gao@intel.com>
To: "Zhu, Yonghong" <yonghong.zhu@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [Patch] BaseTools: Fix the bug for CArray PCD override in command line
Date: Fri, 12 May 2017 05:24:47 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14D72D794@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <1494565914-75644-1-git-send-email-yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
>-----Original Message-----
>From: Zhu, Yonghong
>Sent: Friday, May 12, 2017 1:12 PM
>To: edk2-devel@lists.01.org
>Cc: Gao, Liming <liming.gao@intel.com>
>Subject: [Patch] BaseTools: Fix the bug for CArray PCD override in command
>line
>
>This patch updated the CArray PCD override format from B"{}" to H"{}"
>which align to build spec. Besides, it also do the clean up for the
>function BuildOptionPcdValueFormat.
>
>Cc: Liming Gao <liming.gao@intel.com>
>Contributed-under: TianoCore Contribution Agreement 1.0
>Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
>---
> BaseTools/Source/Python/AutoGen/AutoGen.py | 29 ++-------------------------
>--
> BaseTools/Source/Python/AutoGen/GenMake.py | 12 ++++++++++--
> BaseTools/Source/Python/Common/Misc.py | 26
>++++++++++++++++++++++++++
> BaseTools/Source/Python/GenFds/GenFds.py | 26 +-------------------------
> 4 files changed, 39 insertions(+), 54 deletions(-)
>
>diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py
>b/BaseTools/Source/Python/AutoGen/AutoGen.py
>index 8d8957b..736c1ae 100644
>--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
>+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
>@@ -414,20 +414,20 @@ class WorkspaceAutoGen(AutoGen):
> for key in package.Pcds:
> PcdItem = package.Pcds[key]
> if HasTokenSpace:
> if (PcdItem.TokenCName, PcdItem.TokenSpaceGuidCName)
>== (TokenCName, TokenSpaceGuidCName):
> PcdDatumType = PcdItem.DatumType
>- NewValue =
>self._BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName,
>PcdDatumType, pcdvalue)
>+ NewValue =
>BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName,
>PcdDatumType, pcdvalue)
> FoundFlag = True
> else:
> if PcdItem.TokenCName == TokenCName:
> if not PcdItem.TokenSpaceGuidCName in
>TokenSpaceGuidCNameList:
> if len (TokenSpaceGuidCNameList) < 1:
>
>TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName)
> PcdDatumType = PcdItem.DatumType
> TokenSpaceGuidCName =
>PcdItem.TokenSpaceGuidCName
>- NewValue =
>self._BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName,
>PcdDatumType, pcdvalue)
>+ NewValue =
>BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName,
>PcdDatumType, pcdvalue)
> FoundFlag = True
> else:
> EdkLogger.error(
> 'build',
> AUTOGEN_ERROR,
>@@ -695,35 +695,10 @@ class WorkspaceAutoGen(AutoGen):
> with open(os.path.join(self.BuildDir, 'AutoGen'), 'w+') as file:
> for f in AllWorkSpaceMetaFiles:
> print >> file, f
> return True
>
>- def _BuildOptionPcdValueFormat(self, TokenSpaceGuidCName,
>TokenCName, PcdDatumType, Value):
>- if PcdDatumType == 'VOID*':
>- if Value.startswith('L'):
>- if not Value[1]:
>- EdkLogger.error('build', OPTION_VALUE_INVALID, 'For Void* type
>PCD, when specify the Value in the command line, please use the following
>format: "string", L"string", B"{...}"')
>- Value = Value[0] + '"' + Value[1:] + '"'
>- elif Value.startswith('B'):
>- if not Value[1]:
>- EdkLogger.error('build', OPTION_VALUE_INVALID, 'For Void* type
>PCD, when specify the Value in the command line, please use the following
>format: "string", L"string", B"{...}"')
>- Value = Value[1:]
>- else:
>- if not Value[0]:
>- EdkLogger.error('build', OPTION_VALUE_INVALID, 'For Void* type
>PCD, when specify the Value in the command line, please use the following
>format: "string", L"string", B"{...}"')
>- Value = '"' + Value + '"'
>-
>- IsValid, Cause = CheckPcdDatum(PcdDatumType, Value)
>- if not IsValid:
>- EdkLogger.error('build', FORMAT_INVALID, Cause, ExtraData="%s.%s" %
>(TokenSpaceGuidCName, TokenCName))
>- if PcdDatumType == 'BOOLEAN':
>- Value = Value.upper()
>- if Value == 'TRUE' or Value == '1':
>- Value = '1'
>- elif Value == 'FALSE' or Value == '0':
>- Value = '0'
>- return Value
>
> def _GetMetaFiles(self, Target, Toolchain, Arch):
> AllWorkSpaceMetaFiles = set()
> #
> # add fdf
>diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py
>b/BaseTools/Source/Python/AutoGen/GenMake.py
>index ac24bd8..0f3ddd5 100644
>--- a/BaseTools/Source/Python/AutoGen/GenMake.py
>+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
>@@ -1,9 +1,9 @@
> ## @file
> # Create makefile for MS nmake and GNU make
> #
>-# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions of the BSD
>License
> # which accompanies this distribution. The full text of the license may be
>found at
> # http://opensource.org/licenses/bsd-license.php
> #
>@@ -1451,11 +1451,19 @@ class TopLevelMakefile(BuildFile):
> ExtraOption += " --ignore-sources"
>
> if GlobalData.BuildOptionPcd:
> for index, option in enumerate(GlobalData.gCommand):
> if "--pcd" == option and GlobalData.gCommand[index+1]:
>- ExtraOption += " --pcd " + GlobalData.gCommand[index+1]
>+ pcdName, pcdValue = GlobalData.gCommand[index+1].split('=')
>+ if pcdValue.startswith('H'):
>+ pcdValue = 'H' + '"' + pcdValue[1:] + '"'
>+ ExtraOption += " --pcd " + pcdName + '=' + pcdValue
>+ elif pcdValue.startswith('L'):
>+ pcdValue = 'L' + '"' + pcdValue[1:] + '"'
>+ ExtraOption += " --pcd " + pcdName + '=' + pcdValue
>+ else:
>+ ExtraOption += " --pcd " + GlobalData.gCommand[index+1]
>
> MakefileName = self._FILE_NAME_[self._FileType]
> SubBuildCommandList = []
> for A in PlatformInfo.ArchList:
> Command = self._MAKE_TEMPLATE_[self._FileType] %
>{"file":os.path.join("$(BUILD_DIR)", A, MakefileName)}
>diff --git a/BaseTools/Source/Python/Common/Misc.py
>b/BaseTools/Source/Python/Common/Misc.py
>index 390ef36..dbb711e 100644
>--- a/BaseTools/Source/Python/Common/Misc.py
>+++ b/BaseTools/Source/Python/Common/Misc.py
>@@ -2060,10 +2060,36 @@ def PackRegistryFormatGuid(Guid):
> int(Guid[4][-6:-4], 16),
> int(Guid[4][-4:-2], 16),
> int(Guid[4][-2:], 16)
> )
>
>+def BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName,
>PcdDatumType, Value):
>+ if PcdDatumType == 'VOID*':
>+ if Value.startswith('L'):
>+ if not Value[1]:
>+ EdkLogger.error("build", FORMAT_INVALID, 'For Void* type PCD,
>when specify the Value in the command line, please use the following format:
>"string", L"string", H"{...}"')
>+ Value = Value[0] + '"' + Value[1:] + '"'
>+ elif Value.startswith('H'):
>+ if not Value[1]:
>+ EdkLogger.error("build", FORMAT_INVALID, 'For Void* type PCD,
>when specify the Value in the command line, please use the following format:
>"string", L"string", H"{...}"')
>+ Value = Value[1:]
>+ else:
>+ if not Value[0]:
>+ EdkLogger.error("build", FORMAT_INVALID, 'For Void* type PCD,
>when specify the Value in the command line, please use the following format:
>"string", L"string", H"{...}"')
>+ Value = '"' + Value + '"'
>+
>+ IsValid, Cause = CheckPcdDatum(PcdDatumType, Value)
>+ if not IsValid:
>+ EdkLogger.error("build", FORMAT_INVALID, Cause, ExtraData="%s.%s" %
>(TokenSpaceGuidCName, TokenCName))
>+ if PcdDatumType == 'BOOLEAN':
>+ Value = Value.upper()
>+ if Value == 'TRUE' or Value == '1':
>+ Value = '1'
>+ elif Value == 'FALSE' or Value == '0':
>+ Value = '0'
>+ return Value
>+
> ##
> #
> # This acts like the main() function for the script, unless it is 'import'ed into
>another
> # script.
> #
>diff --git a/BaseTools/Source/Python/GenFds/GenFds.py
>b/BaseTools/Source/Python/GenFds/GenFds.py
>index aa8c041..277da35 100644
>--- a/BaseTools/Source/Python/GenFds/GenFds.py
>+++ b/BaseTools/Source/Python/GenFds/GenFds.py
>@@ -37,10 +37,11 @@ from Common.String import *
> from Common.Misc import DirCache, PathClass
> from Common.Misc import SaveFileOnChange
> from Common.Misc import ClearDuplicatedInf
> from Common.Misc import GuidStructureStringToGuidString
> from Common.Misc import CheckPcdDatum
>+from Common.Misc import BuildOptionPcdValueFormat
> from Common.BuildVersion import gBUILD_VERSION
> from Common.MultipleWorkspace import MultipleWorkspace as mws
>
> ## Version and Copyright
> versionNumber = "1.0" + ' ' + gBUILD_VERSION
>@@ -406,35 +407,10 @@ def CheckBuildOptionPcd():
> "The Pcd %s is found under multiple different
>TokenSpaceGuid: %s and %s." % (TokenCName,
>PcdItem.TokenSpaceGuidCName, TokenSpaceGuidCNameList[0])
> )
>
> GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName,
>NewValue)
>
>-def BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName,
>PcdDatumType, Value):
>- if PcdDatumType == 'VOID*':
>- if Value.startswith('L'):
>- if not Value[1]:
>- EdkLogger.error('GenFds', OPTION_VALUE_INVALID, 'For Void* type
>PCD, when specify the Value in the command line, please use the following
>format: "string", L"string", B"{...}"')
>- Value = Value[0] + '"' + Value[1:] + '"'
>- elif Value.startswith('B'):
>- if not Value[1]:
>- EdkLogger.error('GenFds', OPTION_VALUE_INVALID, 'For Void* type
>PCD, when specify the Value in the command line, please use the following
>format: "string", L"string", B"{...}"')
>- Value = Value[1:]
>- else:
>- if not Value[0]:
>- EdkLogger.error('GenFds', OPTION_VALUE_INVALID, 'For Void* type
>PCD, when specify the Value in the command line, please use the following
>format: "string", L"string", B"{...}"')
>- Value = '"' + Value + '"'
>-
>- IsValid, Cause = CheckPcdDatum(PcdDatumType, Value)
>- if not IsValid:
>- EdkLogger.error('build', FORMAT_INVALID, Cause, ExtraData="%s.%s" %
>(TokenSpaceGuidCName, TokenCName))
>- if PcdDatumType == 'BOOLEAN':
>- Value = Value.upper()
>- if Value == 'TRUE' or Value == '1':
>- Value = '1'
>- elif Value == 'FALSE' or Value == '0':
>- Value = '0'
>- return Value
>
> ## FindExtendTool()
> #
> # Find location of tools to process data
> #
>--
>2.6.1.windows.1
prev parent reply other threads:[~2017-05-12 5:24 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-12 5:11 [Patch] BaseTools: Fix the bug for CArray PCD override in command line Yonghong Zhu
2017-05-12 5:24 ` Gao, Liming [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=4A89E2EF3DFEDB4C8BFDE51014F606A14D72D794@shsmsx102.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