public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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



      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