public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Gao, Liming" <liming.gao@intel.com>
To: "Zhao, ZhiqiangX" <zhiqiangx.zhao@intel.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [PATCH V2] BaseTools: Latter full value should overwrite the former field value.
Date: Tue, 25 Sep 2018 01:07:36 +0000	[thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3177E5@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20180912091926.21356-1-zhiqiangx.zhao@intel.com>

Reviewed-by: Liming Gao <liming.gao@intel.com>

>-----Original Message-----
>From: Zhao, ZhiqiangX
>Sent: Wednesday, September 12, 2018 5:19 PM
>To: edk2-devel@lists.01.org
>Cc: Zhao, ZhiqiangX <zhiqiangx.zhao@intel.com>; Gao, Liming
><liming.gao@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>; Feng,
>Bob C <bob.c.feng@intel.com>
>Subject: [PATCH V2] BaseTools: Latter full value should overwrite the former
>field value.
>
>For structure Pcd, the latter full assign value in commandLine should
>override the former field assign value. For example in commandLine,
>build --pcd Token.pcd.field="haha" --pcd Token.pcd=H"{0x01,0x02}",
>the former field value "haha" will be ignored and overwrite by the latter
>full value "{0x01,0x02}".
>
>Contributed-under: TianoCore Contribution Agreement 1.1
>Signed-off-by: ZhiqiangX Zhao <zhiqiangx.zhao@intel.com>
>Cc: Liming Gao <liming.gao@intel.com>
>Cc: Yonghong Zhu <yonghong.zhu@intel.com>
>Cc: Bob Feng <bob.c.feng@intel.com>
>---
> BaseTools/Source/Python/Workspace/DscBuildData.py | 17
>+++++++++++++++++
> BaseTools/Source/Python/build/BuildReport.py      | 20 ++++++++++++++++-
>---
> 2 files changed, 33 insertions(+), 4 deletions(-)
>
>diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py
>b/BaseTools/Source/Python/Workspace/DscBuildData.py
>index 88ba415c5a..4e505c1e99 100644
>--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
>+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
>@@ -1032,6 +1032,23 @@ class DscBuildData(PlatformBuildClassObject):
>                         PcdItem = BuildData.Pcds[key]
>                         if (TokenSpaceGuidCName, TokenCName) ==
>(PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName
>=="":
>                             PcdItem.DefaultValue = pcdvalue
>+        #In command line, the latter full assign value in commandLine should
>override the former field assign value.
>+        #For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}"
>+        delete_assign = []
>+        field_assign = {}
>+        if GlobalData.BuildOptionPcd:
>+            for pcdTuple in GlobalData.BuildOptionPcd:
>+                TokenSpaceGuid, Token, Field = pcdTuple[0], pcdTuple[1],
>pcdTuple[2]
>+                if Field:
>+                    if (TokenSpaceGuid, Token) not in field_assign:
>+                        field_assign[TokenSpaceGuid, Token] = []
>+                    field_assign[TokenSpaceGuid, Token].append(pcdTuple)
>+                else:
>+                    if (TokenSpaceGuid, Token) in field_assign:
>+                        delete_assign.extend(field_assign[TokenSpaceGuid, Token])
>+                        field_assign[TokenSpaceGuid, Token] = []
>+            for item in delete_assign:
>+                GlobalData.BuildOptionPcd.remove(item)
>
>     @staticmethod
>     def HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, PcdValue,
>PcdDatumType, GuidDict, FieldName=''):
>diff --git a/BaseTools/Source/Python/build/BuildReport.py
>b/BaseTools/Source/Python/build/BuildReport.py
>index a598d64244..3886a7a55e 100644
>--- a/BaseTools/Source/Python/build/BuildReport.py
>+++ b/BaseTools/Source/Python/build/BuildReport.py
>@@ -982,12 +982,16 @@ class PcdReport(object):
>                 PcdValue = DecDefaultValue
>                 if DscDefaultValue:
>                     PcdValue = DscDefaultValue
>-                Pcd.DefaultValue = PcdValue
>+                #The DefaultValue of StructurePcd already be the latest, no need to
>update.
>+                if not self.IsStructurePcd(Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName):
>+                    Pcd.DefaultValue = PcdValue
>                 if ModulePcdSet is not None:
>                     if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in
>ModulePcdSet:
>                         continue
>                     InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName, Type]
>-                    Pcd.DefaultValue = PcdValue
>+                    #The DefaultValue of StructurePcd already be the latest, no need
>to update.
>+                    if not self.IsStructurePcd(Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName):
>+                        Pcd.DefaultValue = PcdValue
>                     if InfDefaultValue:
>                         try:
>                             InfDefaultValue = ValueExpressionEx(InfDefaultValue,
>Pcd.DatumType, self._GuidDict)(True)
>@@ -1003,7 +1007,9 @@ class PcdReport(object):
>                             if pcd[2]:
>                                 continue
>                             PcdValue = pcd[3]
>-                            Pcd.DefaultValue = PcdValue
>+                            #The DefaultValue of StructurePcd already be the latest, no
>need to update.
>+                            if not self.IsStructurePcd(Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName):
>+                                Pcd.DefaultValue = PcdValue
>                             BuildOptionMatch = True
>                             break
>
>@@ -1050,7 +1056,7 @@ class PcdReport(object):
>                         DscMatch = (DscDefaultValue.strip() == PcdValue.strip())
>
>                 IsStructure = False
>-                if GlobalData.gStructurePcd and (self.Arch in
>GlobalData.gStructurePcd) and ((Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):
>+                if self.IsStructurePcd(Pcd.TokenCName,
>Pcd.TokenSpaceGuidCName):
>                     IsStructure = True
>                     if TypeName in ('DYNVPD', 'DEXVPD'):
>                         SkuInfoList = Pcd.SkuInfoList
>@@ -1413,6 +1419,12 @@ class PcdReport(object):
>             else:
>                 return value
>
>+    def IsStructurePcd(self, PcdToken, PcdTokenSpaceGuid):
>+        if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd)
>and ((PcdToken, PcdTokenSpaceGuid) in GlobalData.gStructurePcd[self.Arch]):
>+            return True
>+        else:
>+            return False
>+
> ##
> # Reports platform and module Prediction information
> #
>--
>2.14.1.windows.1



      reply	other threads:[~2018-09-25  1:08 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-12  9:19 [PATCH V2] BaseTools: Latter full value should overwrite the former field value Zhaozh1x
2018-09-25  1:07 ` 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=4A89E2EF3DFEDB4C8BFDE51014F606A14E3177E5@SHSMSX104.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