public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* Re: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx
       [not found] <16867BA05B2FF24C.10003@groups.io>
@ 2021-06-15  0:52 ` Bob Feng
  2021-07-01  3:50 ` Bob Feng
  1 sibling, 0 replies; 4+ messages in thread
From: Bob Feng @ 2021-06-15  0:52 UTC (permalink / raw)
  To: devel@edk2.groups.io, Feng, Bob C
  Cc: Liming Gao, Chen, Christine, Kinney, Michael D,
	Desimone, Nathaniel L, Mike Turner

Add Mike Turner for review.

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Bob Feng
Sent: Tuesday, June 8, 2021 10:50 AM
To: devel@edk2.groups.io
Cc: Liming Gao <gaoliming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
Subject: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1688

In order to support binary build, build tool add a flag to convert type of Dynamic Pcd to DynamicEx Pcd

User can append -D PCD_DYNAMIC_AS_DYNAMICEX to build command to enable this function.
Also, user can add "PCD_DYNAMIC_AS_DYNAMICEX = TRUE/FALSE"
to the defines section of Dsc file to enable this function.

PCD_DYNAMIC_AS_DYNAMICEX is a new reserved key word for this function.

Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Yuwei Chen <yuwei.chen@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> ---Correct Liming's email address.
 BaseTools/Source/Python/Common/DataType.py    |   1 +
 .../Python/Workspace/BuildClassObject.py      | 153 ++++++++----------
 .../Source/Python/Workspace/DecBuildData.py   |  15 +-
 .../Source/Python/Workspace/DscBuildData.py   |  19 +--
 .../Source/Python/Workspace/InfBuildData.py   |  15 +-
 5 files changed, 73 insertions(+), 130 deletions(-)

diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py
index fb88f20cc4..4e9c9e34af 100644
--- a/BaseTools/Source/Python/Common/DataType.py
+++ b/BaseTools/Source/Python/Common/DataType.py
@@ -402,10 +402,11 @@ TAB_DSC_DEFINES_DSC_SPECIFICATION = 'DSC_SPECIFICATION'
 TAB_DSC_DEFINES_OUTPUT_DIRECTORY = 'OUTPUT_DIRECTORY' TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES = 'SUPPORTED_ARCHITECTURES' TAB_DSC_DEFINES_BUILD_TARGETS = 'BUILD_TARGETS' TAB_DSC_DEFINES_SKUID_IDENTIFIER = 'SKUID_IDENTIFIER' TAB_DSC_DEFINES_PCD_INFO_GENERATION = 'PCD_INFO_GENERATION'+TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX = 'PCD_DYNAMIC_AS_DYNAMICEX' TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION = 'PCD_VAR_CHECK_GENERATION' TAB_DSC_DEFINES_FLASH_DEFINITION = 'FLASH_DEFINITION' TAB_DSC_DEFINES_BUILD_NUMBER = 'BUILD_NUMBER' TAB_DSC_DEFINES_MAKEFILE_NAME = 'MAKEFILE_NAME' TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress'diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index ebb65fc2fe..88a1d1582c 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -10,11 +10,13 @@ from Common.DataType import *  import collections import re from collections import OrderedDict from Common.Misc import CopyDict,ArrayIndex import copy+from CommonDataClass.DataClass import * import Common.EdkLogger as EdkLogger+import Common.GlobalData as GlobalData from Common.BuildToolError import OPTION_VALUE_INVALID from Common.caching import cached_property StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')  ## PcdClassObject@@ -396,10 +398,71 @@ class StructurePcd(PcdClassObject):
         new_pcd.ValueChain = {item for item in self.ValueChain}         return new_pcd  LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList']) +class BuildData(object):+    # dict used to convert PCD type in database to string used by build tool++    _PCD_TYPE_STRING_ = {+        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,+        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,+        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,+        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,+        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,+        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,+        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,+    }++    def UpdatePcdTypeDict(self):+        if GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX,"FALSE").upper() == "TRUE":+            self._PCD_TYPE_STRING_ = {+                MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,+                MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,+                MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+                MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_EX_HII,+                MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_EX_VPD,+                MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+                MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,+            }++    ## Convert the class to a string+    #+    #  Convert member MetaFile of the class to a string+    #+    #  @retval string Formatted String+    #+    def __str__(self):+        return str(self.MetaFile)++    ## Override __eq__ function+    #+    # Check whether ModuleBuildClassObjects are the same+    #+    # @retval False The two ModuleBuildClassObjects are different+    # @retval True  The two ModuleBuildClassObjects are the same+    #+    def __eq__(self, Other):+        return self.MetaFile == Other++    ## Override __hash__ function+    #+    # Use MetaFile as key in hash table+    #+    # @retval string Key for hash table+    #+    def __hash__(self):+        return hash(self.MetaFile)+ ## ModuleBuildClassObject # # This Class defines ModuleBuildClass # # @param object:               Inherited from object class@@ -440,11 +503,11 @@ LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModLis
 #                              { [(PcdCName, PcdGuidCName)] : PcdClassObject} # @var BuildOptions:           To store value for BuildOptions, it is a set structure as #                              { [BuildOptionKey] : BuildOptionValue} # @var Depex:                  To store value for Depex #-class ModuleBuildClassObject(object):+class ModuleBuildClassObject(BuildData):     def __init__(self):         self.AutoGenVersion          = 0         self.MetaFile                = ''         self.BaseName                = ''         self.ModuleType              = ''@@ -474,38 +537,10 @@ class ModuleBuildClassObject(object):
         self.BuildOptions            = {}         self.Depex                   = {}         self.StrPcdSet               = []         self.StrPcdOverallValue      = {} -    ## Convert the class to a string-    #-    #  Convert member MetaFile of the class to a string-    #-    #  @retval string Formatted String-    #-    def __str__(self):-        return str(self.MetaFile)--    ## Override __eq__ function-    #-    # Check whether ModuleBuildClassObjects are the same-    #-    # @retval False The two ModuleBuildClassObjects are different-    # @retval True  The two ModuleBuildClassObjects are the same-    #-    def __eq__(self, Other):-        return self.MetaFile == Other--    ## Override __hash__ function-    #-    # Use MetaFile as key in hash table-    #-    # @retval string Key for hash table-    #-    def __hash__(self):-        return hash(self.MetaFile)- ## PackageBuildClassObject # # This Class defines PackageBuildClass # # @param object:        Inherited from object class@@ -525,11 +560,11 @@ class ModuleBuildClassObject(object):
 # @var LibraryClasses:  To store value for LibraryClasses, it is a set structure as #                       { [LibraryClassName] : LibraryClassInfFile } # @var Pcds:            To store value for Pcds, it is a set structure as #                       { [(PcdCName, PcdGuidCName)] : PcdClassObject} #-class PackageBuildClassObject(object):+class PackageBuildClassObject(BuildData):     def __init__(self):         self.MetaFile                = ''         self.PackageName             = ''         self.Guid                    = ''         self.Version                 = ''@@ -539,38 +574,10 @@ class PackageBuildClassObject(object):
         self.Guids                   = {}         self.Includes                = []         self.LibraryClasses          = {}         self.Pcds                    = {} -    ## Convert the class to a string-    #-    #  Convert member MetaFile of the class to a string-    #-    #  @retval string Formatted String-    #-    def __str__(self):-        return str(self.MetaFile)--    ## Override __eq__ function-    #-    # Check whether PackageBuildClassObjects are the same-    #-    # @retval False The two PackageBuildClassObjects are different-    # @retval True  The two PackageBuildClassObjects are the same-    #-    def __eq__(self, Other):-        return self.MetaFile == Other--    ## Override __hash__ function-    #-    # Use MetaFile as key in hash table-    #-    # @retval string Key for hash table-    #-    def __hash__(self):-        return hash(self.MetaFile)- ## PlatformBuildClassObject # # This Class defines PlatformBuildClass # # @param object:          Inherited from object class@@ -595,11 +602,11 @@ class PackageBuildClassObject(object):
 # @var Pcds:              To store value for Pcds, it is a set structure as #                         { [(PcdCName, PcdGuidCName)] : PcdClassObject } # @var BuildOptions:      To store value for BuildOptions, it is a set structure as #                         { [BuildOptionKey] : BuildOptionValue } #-class PlatformBuildClassObject(object):+class PlatformBuildClassObject(BuildData):     def __init__(self):         self.MetaFile                = ''         self.PlatformName            = ''         self.Guid                    = ''         self.Version                 = ''@@ -614,33 +621,5 @@ class PlatformBuildClassObject(object):
         self.LibraryInstances        = []         self.LibraryClasses          = {}         self.Libraries               = {}         self.Pcds                    = {}         self.BuildOptions            = {}--    ## Convert the class to a string-    #-    #  Convert member MetaFile of the class to a string-    #-    #  @retval string Formatted String-    #-    def __str__(self):-        return str(self.MetaFile)--    ## Override __eq__ function-    #-    # Check whether PlatformBuildClassObjects are the same-    #-    # @retval False The two PlatformBuildClassObjects are different-    # @retval True  The two PlatformBuildClassObjects are the same-    #-    def __eq__(self, Other):-        return self.MetaFile == Other--    ## Override __hash__ function-    #-    # Use MetaFile as key in hash table-    #-    # @retval string Key for hash table-    #-    def __hash__(self):-        return hash(self.MetaFile)diff --git a/BaseTools/Source/Python/Workspace/DecBuildData.py b/BaseTools/Source/Python/Workspace/DecBuildData.py
index 30826a3cea..da7a52c5d0 100644
--- a/BaseTools/Source/Python/Workspace/DecBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DecBuildData.py
@@ -19,24 +19,10 @@ from re import compile
 # #  This class is used to retrieve information stored in database and convert them # into PackageBuildClassObject form for easier use for AutoGen. # class DecBuildData(PackageBuildClassObject):-    # dict used to convert PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of [Defines] to members of DecBuildData directly     _PROPERTY_ = {         #         # Required Fields@@ -66,10 +52,11 @@ class DecBuildData(PackageBuildClassObject):
         self._Bdb = BuildDataBase         self._Arch = Arch         self._Target = Target         self._Toolchain = Toolchain         self._Clear()+        self.UpdatePcdTypeDict()      ## XXX[key] = value     def __setitem__(self, key, value):         self.__dict__[self._PROPERTY_[key]] = value diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py
index 5f07d3e75c..4d5b1ad4d9 100644
--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
@@ -177,24 +177,10 @@ def GetDependencyList(FileStack, SearchPathList):
     DependencyList = list(DependencySet)  # remove duplicate ones      return DependencyList  class DscBuildData(PlatformBuildClassObject):-    # dict used to convert PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of [Defines] to members of DscBuildData directly     _PROPERTY_ = {         #         # Required Fields@@ -240,11 +226,11 @@ class DscBuildData(PlatformBuildClassObject):
         self._ToolChainFamily = None         self._Clear()         self.WorkspaceDir = os.getenv("WORKSPACE") if os.getenv("WORKSPACE") else ""         self.DefaultStores = None         self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)-+        self.UpdatePcdTypeDict()     @property     def OutputPath(self):         if os.getenv("WORKSPACE"):             return os.path.join(os.getenv("WORKSPACE"), self.OutputDirectory, self._Target + "_" + self._Toolchain, PcdValueInitName)         else:@@ -409,10 +395,13 @@ class DscBuildData(PlatformBuildClassObject):
                 try:                     uuid.UUID(Record[2])                 except:                     EdkLogger.error("build", FORMAT_INVALID, "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile)                 self._VpdToolGuid = Record[2]+            elif Name == TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX:+                if TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX not in gCommandLineDefines:+                    gCommandLineDefines[TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX] = Record[2].strip()             elif Name in self:                 self[Name] = Record[2]         # set _Header to non-None in order to avoid database re-querying         self._Header = 'DUMMY' diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py b/BaseTools/Source/Python/Workspace/InfBuildData.py
index 7675b0ea00..45b8ef4716 100644
--- a/BaseTools/Source/Python/Workspace/InfBuildData.py
+++ b/BaseTools/Source/Python/Workspace/InfBuildData.py
@@ -57,24 +57,10 @@ def _PpiValue(CName, PackageList, Inffile = None):
 # #  This class is used to retrieve information stored in database and convert them # into ModuleBuildClassObject form for easier use for AutoGen. # class InfBuildData(ModuleBuildClassObject):-    # dict used to convert PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of [Defines] to members of InfBuildData directly     _PROPERTY_ = {         #         # Required Fields@@ -152,10 +138,11 @@ class InfBuildData(ModuleBuildClassObject):
         self._GuidsUsedByPcd = OrderedDict()         self._GuidComments = None         self._PcdComments = None         self._BuildOptions = None         self._DependencyFileList = None+        self.UpdatePcdTypeDict()         self.LibInstances = []         self.ReferenceModules = set()      def SetReferenceModule(self,Module):         self.ReferenceModules.add(Module)-- 
2.29.1.windows.1



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76176): https://edk2.groups.io/g/devel/message/76176
Mute This Topic: https://groups.io/mt/83388055/1768742
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [bob.c.feng@intel.com] -=-=-=-=-=-=



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx
       [not found] <16867BA05B2FF24C.10003@groups.io>
  2021-06-15  0:52 ` [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx Bob Feng
@ 2021-07-01  3:50 ` Bob Feng
  2021-07-01  5:22   ` 回复: " gaoliming
  1 sibling, 1 reply; 4+ messages in thread
From: Bob Feng @ 2021-07-01  3:50 UTC (permalink / raw)
  To: devel@edk2.groups.io, Feng, Bob C, Liming Gao, Chen, Christine
  Cc: Kinney, Michael D, Desimone, Nathaniel L

Hi Liming and Christine,

Do you have any comments on this patch?

Thanks,
Bob 

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Bob Feng
Sent: Tuesday, June 8, 2021 10:50 AM
To: devel@edk2.groups.io
Cc: Liming Gao <gaoliming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
Subject: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1688

In order to support binary build, build tool add a flag to convert type of Dynamic Pcd to DynamicEx Pcd

User can append -D PCD_DYNAMIC_AS_DYNAMICEX to build command to enable this function.
Also, user can add "PCD_DYNAMIC_AS_DYNAMICEX = TRUE/FALSE"
to the defines section of Dsc file to enable this function.

PCD_DYNAMIC_AS_DYNAMICEX is a new reserved key word for this function.

Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Yuwei Chen <yuwei.chen@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> ---Correct Liming's email address.
 BaseTools/Source/Python/Common/DataType.py    |   1 +
 .../Python/Workspace/BuildClassObject.py      | 153 ++++++++----------
 .../Source/Python/Workspace/DecBuildData.py   |  15 +-
 .../Source/Python/Workspace/DscBuildData.py   |  19 +--
 .../Source/Python/Workspace/InfBuildData.py   |  15 +-
 5 files changed, 73 insertions(+), 130 deletions(-)

diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py
index fb88f20cc4..4e9c9e34af 100644
--- a/BaseTools/Source/Python/Common/DataType.py
+++ b/BaseTools/Source/Python/Common/DataType.py
@@ -402,10 +402,11 @@ TAB_DSC_DEFINES_DSC_SPECIFICATION = 'DSC_SPECIFICATION'
 TAB_DSC_DEFINES_OUTPUT_DIRECTORY = 'OUTPUT_DIRECTORY' TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES = 'SUPPORTED_ARCHITECTURES' TAB_DSC_DEFINES_BUILD_TARGETS = 'BUILD_TARGETS' TAB_DSC_DEFINES_SKUID_IDENTIFIER = 'SKUID_IDENTIFIER' TAB_DSC_DEFINES_PCD_INFO_GENERATION = 'PCD_INFO_GENERATION'+TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX = 'PCD_DYNAMIC_AS_DYNAMICEX' TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION = 'PCD_VAR_CHECK_GENERATION' TAB_DSC_DEFINES_FLASH_DEFINITION = 'FLASH_DEFINITION' TAB_DSC_DEFINES_BUILD_NUMBER = 'BUILD_NUMBER' TAB_DSC_DEFINES_MAKEFILE_NAME = 'MAKEFILE_NAME' TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress'diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index ebb65fc2fe..88a1d1582c 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -10,11 +10,13 @@ from Common.DataType import *  import collections import re from collections import OrderedDict from Common.Misc import CopyDict,ArrayIndex import copy+from CommonDataClass.DataClass import * import Common.EdkLogger as EdkLogger+import Common.GlobalData as GlobalData from Common.BuildToolError import OPTION_VALUE_INVALID from Common.caching import cached_property StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')  ## PcdClassObject@@ -396,10 +398,71 @@ class StructurePcd(PcdClassObject):
         new_pcd.ValueChain = {item for item in self.ValueChain}         return new_pcd  LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList']) +class BuildData(object):+    # dict used to convert PCD type in database to string used by build tool++    _PCD_TYPE_STRING_ = {+        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,+        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,+        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,+        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,+        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,+        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,+        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,+    }++    def UpdatePcdTypeDict(self):+        if GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX,"FALSE").upper() == "TRUE":+            self._PCD_TYPE_STRING_ = {+                MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,+                MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,+                MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+                MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_EX_HII,+                MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_EX_VPD,+                MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+                MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+                MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,+            }++    ## Convert the class to a string+    #+    #  Convert member MetaFile of the class to a string+    #+    #  @retval string Formatted String+    #+    def __str__(self):+        return str(self.MetaFile)++    ## Override __eq__ function+    #+    # Check whether ModuleBuildClassObjects are the same+    #+    # @retval False The two ModuleBuildClassObjects are different+    # @retval True  The two ModuleBuildClassObjects are the same+    #+    def __eq__(self, Other):+        return self.MetaFile == Other++    ## Override __hash__ function+    #+    # Use MetaFile as key in hash table+    #+    # @retval string Key for hash table+    #+    def __hash__(self):+        return hash(self.MetaFile)+ ## ModuleBuildClassObject # # This Class defines ModuleBuildClass # # @param object:               Inherited from object class@@ -440,11 +503,11 @@ LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModLis
 #                              { [(PcdCName, PcdGuidCName)] : PcdClassObject} # @var BuildOptions:           To store value for BuildOptions, it is a set structure as #                              { [BuildOptionKey] : BuildOptionValue} # @var Depex:                  To store value for Depex #-class ModuleBuildClassObject(object):+class ModuleBuildClassObject(BuildData):     def __init__(self):         self.AutoGenVersion          = 0         self.MetaFile                = ''         self.BaseName                = ''         self.ModuleType              = ''@@ -474,38 +537,10 @@ class ModuleBuildClassObject(object):
         self.BuildOptions            = {}         self.Depex                   = {}         self.StrPcdSet               = []         self.StrPcdOverallValue      = {} -    ## Convert the class to a string-    #-    #  Convert member MetaFile of the class to a string-    #-    #  @retval string Formatted String-    #-    def __str__(self):-        return str(self.MetaFile)--    ## Override __eq__ function-    #-    # Check whether ModuleBuildClassObjects are the same-    #-    # @retval False The two ModuleBuildClassObjects are different-    # @retval True  The two ModuleBuildClassObjects are the same-    #-    def __eq__(self, Other):-        return self.MetaFile == Other--    ## Override __hash__ function-    #-    # Use MetaFile as key in hash table-    #-    # @retval string Key for hash table-    #-    def __hash__(self):-        return hash(self.MetaFile)- ## PackageBuildClassObject # # This Class defines PackageBuildClass # # @param object:        Inherited from object class@@ -525,11 +560,11 @@ class ModuleBuildClassObject(object):
 # @var LibraryClasses:  To store value for LibraryClasses, it is a set structure as #                       { [LibraryClassName] : LibraryClassInfFile } # @var Pcds:            To store value for Pcds, it is a set structure as #                       { [(PcdCName, PcdGuidCName)] : PcdClassObject} #-class PackageBuildClassObject(object):+class PackageBuildClassObject(BuildData):     def __init__(self):         self.MetaFile                = ''         self.PackageName             = ''         self.Guid                    = ''         self.Version                 = ''@@ -539,38 +574,10 @@ class PackageBuildClassObject(object):
         self.Guids                   = {}         self.Includes                = []         self.LibraryClasses          = {}         self.Pcds                    = {} -    ## Convert the class to a string-    #-    #  Convert member MetaFile of the class to a string-    #-    #  @retval string Formatted String-    #-    def __str__(self):-        return str(self.MetaFile)--    ## Override __eq__ function-    #-    # Check whether PackageBuildClassObjects are the same-    #-    # @retval False The two PackageBuildClassObjects are different-    # @retval True  The two PackageBuildClassObjects are the same-    #-    def __eq__(self, Other):-        return self.MetaFile == Other--    ## Override __hash__ function-    #-    # Use MetaFile as key in hash table-    #-    # @retval string Key for hash table-    #-    def __hash__(self):-        return hash(self.MetaFile)- ## PlatformBuildClassObject # # This Class defines PlatformBuildClass # # @param object:          Inherited from object class@@ -595,11 +602,11 @@ class PackageBuildClassObject(object):
 # @var Pcds:              To store value for Pcds, it is a set structure as #                         { [(PcdCName, PcdGuidCName)] : PcdClassObject } # @var BuildOptions:      To store value for BuildOptions, it is a set structure as #                         { [BuildOptionKey] : BuildOptionValue } #-class PlatformBuildClassObject(object):+class PlatformBuildClassObject(BuildData):     def __init__(self):         self.MetaFile                = ''         self.PlatformName            = ''         self.Guid                    = ''         self.Version                 = ''@@ -614,33 +621,5 @@ class PlatformBuildClassObject(object):
         self.LibraryInstances        = []         self.LibraryClasses          = {}         self.Libraries               = {}         self.Pcds                    = {}         self.BuildOptions            = {}--    ## Convert the class to a string-    #-    #  Convert member MetaFile of the class to a string-    #-    #  @retval string Formatted String-    #-    def __str__(self):-        return str(self.MetaFile)--    ## Override __eq__ function-    #-    # Check whether PlatformBuildClassObjects are the same-    #-    # @retval False The two PlatformBuildClassObjects are different-    # @retval True  The two PlatformBuildClassObjects are the same-    #-    def __eq__(self, Other):-        return self.MetaFile == Other--    ## Override __hash__ function-    #-    # Use MetaFile as key in hash table-    #-    # @retval string Key for hash table-    #-    def __hash__(self):-        return hash(self.MetaFile)diff --git a/BaseTools/Source/Python/Workspace/DecBuildData.py b/BaseTools/Source/Python/Workspace/DecBuildData.py
index 30826a3cea..da7a52c5d0 100644
--- a/BaseTools/Source/Python/Workspace/DecBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DecBuildData.py
@@ -19,24 +19,10 @@ from re import compile
 # #  This class is used to retrieve information stored in database and convert them # into PackageBuildClassObject form for easier use for AutoGen. # class DecBuildData(PackageBuildClassObject):-    # dict used to convert PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of [Defines] to members of DecBuildData directly     _PROPERTY_ = {         #         # Required Fields@@ -66,10 +52,11 @@ class DecBuildData(PackageBuildClassObject):
         self._Bdb = BuildDataBase         self._Arch = Arch         self._Target = Target         self._Toolchain = Toolchain         self._Clear()+        self.UpdatePcdTypeDict()      ## XXX[key] = value     def __setitem__(self, key, value):         self.__dict__[self._PROPERTY_[key]] = value diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py
index 5f07d3e75c..4d5b1ad4d9 100644
--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
@@ -177,24 +177,10 @@ def GetDependencyList(FileStack, SearchPathList):
     DependencyList = list(DependencySet)  # remove duplicate ones      return DependencyList  class DscBuildData(PlatformBuildClassObject):-    # dict used to convert PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of [Defines] to members of DscBuildData directly     _PROPERTY_ = {         #         # Required Fields@@ -240,11 +226,11 @@ class DscBuildData(PlatformBuildClassObject):
         self._ToolChainFamily = None         self._Clear()         self.WorkspaceDir = os.getenv("WORKSPACE") if os.getenv("WORKSPACE") else ""         self.DefaultStores = None         self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)-+        self.UpdatePcdTypeDict()     @property     def OutputPath(self):         if os.getenv("WORKSPACE"):             return os.path.join(os.getenv("WORKSPACE"), self.OutputDirectory, self._Target + "_" + self._Toolchain, PcdValueInitName)         else:@@ -409,10 +395,13 @@ class DscBuildData(PlatformBuildClassObject):
                 try:                     uuid.UUID(Record[2])                 except:                     EdkLogger.error("build", FORMAT_INVALID, "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile)                 self._VpdToolGuid = Record[2]+            elif Name == TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX:+                if TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX not in gCommandLineDefines:+                    gCommandLineDefines[TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX] = Record[2].strip()             elif Name in self:                 self[Name] = Record[2]         # set _Header to non-None in order to avoid database re-querying         self._Header = 'DUMMY' diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py b/BaseTools/Source/Python/Workspace/InfBuildData.py
index 7675b0ea00..45b8ef4716 100644
--- a/BaseTools/Source/Python/Workspace/InfBuildData.py
+++ b/BaseTools/Source/Python/Workspace/InfBuildData.py
@@ -57,24 +57,10 @@ def _PpiValue(CName, PackageList, Inffile = None):
 # #  This class is used to retrieve information stored in database and convert them # into ModuleBuildClassObject form for easier use for AutoGen. # class InfBuildData(ModuleBuildClassObject):-    # dict used to convert PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,-        MODEL_PCD_PATCHABLE_IN_MODULE   :   TAB_PCDS_PATCHABLE_IN_MODULE,-        MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-        MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-        MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-        MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-        MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-        MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-        MODEL_PCD_DYNAMIC_EX_VPD        :   TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of [Defines] to members of InfBuildData directly     _PROPERTY_ = {         #         # Required Fields@@ -152,10 +138,11 @@ class InfBuildData(ModuleBuildClassObject):
         self._GuidsUsedByPcd = OrderedDict()         self._GuidComments = None         self._PcdComments = None         self._BuildOptions = None         self._DependencyFileList = None+        self.UpdatePcdTypeDict()         self.LibInstances = []         self.ReferenceModules = set()      def SetReferenceModule(self,Module):         self.ReferenceModules.add(Module)-- 
2.29.1.windows.1



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76176): https://edk2.groups.io/g/devel/message/76176
Mute This Topic: https://groups.io/mt/83388055/1768742
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [bob.c.feng@intel.com] -=-=-=-=-=-=



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* 回复: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx
  2021-07-01  3:50 ` Bob Feng
@ 2021-07-01  5:22   ` gaoliming
  2021-07-12  2:43     ` Bob Feng
  0 siblings, 1 reply; 4+ messages in thread
From: gaoliming @ 2021-07-01  5:22 UTC (permalink / raw)
  To: 'Feng, Bob C', devel, 'Chen, Christine'
  Cc: 'Kinney, Michael D', 'Desimone, Nathaniel L'

Bob:
  This patch is good to me. Reviewed-by: Liming Gao
<gaoliming@byosoft.com.cn>

  Have you sent the patch to update DSC spec?

Thanks
Liming
> -----邮件原件-----
> 发件人: Feng, Bob C <bob.c.feng@intel.com>
> 发送时间: 2021年7月1日 11:50
> 收件人: devel@edk2.groups.io; Feng, Bob C <bob.c.feng@intel.com>; Liming
> Gao <gaoliming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>
> 抄送: Kinney, Michael D <michael.d.kinney@intel.com>; Desimone, Nathaniel
> L <nathaniel.l.desimone@intel.com>
> 主题: RE: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat
dynamic
> pcd as dynamicEx
> 
> Hi Liming and Christine,
> 
> Do you have any comments on this patch?
> 
> Thanks,
> Bob
> 
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Bob Feng
> Sent: Tuesday, June 8, 2021 10:50 AM
> To: devel@edk2.groups.io
> Cc: Liming Gao <gaoliming@byosoft.com.cn>; Chen, Christine
> <yuwei.chen@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>;
> Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
> Subject: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat
dynamic
> pcd as dynamicEx
> 
> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1688
> 
> In order to support binary build, build tool add a flag to convert type of
> Dynamic Pcd to DynamicEx Pcd
> 
> User can append -D PCD_DYNAMIC_AS_DYNAMICEX to build command to
> enable this function.
> Also, user can add "PCD_DYNAMIC_AS_DYNAMICEX = TRUE/FALSE"
> to the defines section of Dsc file to enable this function.
> 
> PCD_DYNAMIC_AS_DYNAMICEX is a new reserved key word for this function.
> 
> Signed-off-by: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Yuwei Chen <yuwei.chen@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> ---Correct Liming's
> email address.
>  BaseTools/Source/Python/Common/DataType.py    |   1 +
>  .../Python/Workspace/BuildClassObject.py      | 153 ++++++++----------
>  .../Source/Python/Workspace/DecBuildData.py   |  15 +-
>  .../Source/Python/Workspace/DscBuildData.py   |  19 +--
>  .../Source/Python/Workspace/InfBuildData.py   |  15 +-
>  5 files changed, 73 insertions(+), 130 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/Common/DataType.py
> b/BaseTools/Source/Python/Common/DataType.py
> index fb88f20cc4..4e9c9e34af 100644
> --- a/BaseTools/Source/Python/Common/DataType.py
> +++ b/BaseTools/Source/Python/Common/DataType.py
> @@ -402,10 +402,11 @@ TAB_DSC_DEFINES_DSC_SPECIFICATION =
> 'DSC_SPECIFICATION'
>  TAB_DSC_DEFINES_OUTPUT_DIRECTORY = 'OUTPUT_DIRECTORY'
> TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES =
> 'SUPPORTED_ARCHITECTURES' TAB_DSC_DEFINES_BUILD_TARGETS =
> 'BUILD_TARGETS' TAB_DSC_DEFINES_SKUID_IDENTIFIER =
> 'SKUID_IDENTIFIER' TAB_DSC_DEFINES_PCD_INFO_GENERATION =
> 'PCD_INFO_GENERATION'+TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMI
> CEX = 'PCD_DYNAMIC_AS_DYNAMICEX'
> TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION =
> 'PCD_VAR_CHECK_GENERATION' TAB_DSC_DEFINES_FLASH_DEFINITION =
> 'FLASH_DEFINITION' TAB_DSC_DEFINES_BUILD_NUMBER =
> 'BUILD_NUMBER' TAB_DSC_DEFINES_MAKEFILE_NAME = 'MAKEFILE_NAME'
> TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress'diff --git
> a/BaseTools/Source/Python/Workspace/BuildClassObject.py
> b/BaseTools/Source/Python/Workspace/BuildClassObject.py
> index ebb65fc2fe..88a1d1582c 100644
> --- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
> +++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
> @@ -10,11 +10,13 @@ from Common.DataType import *  import
> collections import re from collections import OrderedDict from Common.Misc
> import CopyDict,ArrayIndex import copy+from CommonDataClass.DataClass
> import * import Common.EdkLogger as EdkLogger+import
> Common.GlobalData as GlobalData from Common.BuildToolError import
> OPTION_VALUE_INVALID from Common.caching import cached_property
> StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')  ##
> PcdClassObject@@ -396,10 +398,71 @@ class
> StructurePcd(PcdClassObject):
>          new_pcd.ValueChain = {item for item in self.ValueChain}
> return new_pcd  LibraryClassObject = namedtuple('LibraryClassObject',
> ['LibraryClass','SupModList']) +class BuildData(object):+    # dict used
to
> convert PCD type in database to string used by build tool++
> _PCD_TYPE_STRING_ = {+        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,+
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,+
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,+
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,+
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,+
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,+
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,+    }++    def UpdatePcdTypeDict(self):+
> if
> GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_PCD_DYNAMIC_A
> S_DYNAMICEX,"FALSE").upper() == "TRUE":+
> self._PCD_TYPE_STRING_ = {+
> MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,+
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,+
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_EX_HII,+
> MODEL_PCD_DYNAMIC_VPD           :
> TAB_PCDS_DYNAMIC_EX_VPD,+
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,+            }++    ## Convert the class
> to a string+    #+    #  Convert member MetaFile of the class to a string+
> #+    #  @retval string Formatted String+    #+    def __str__(self):+
> return str(self.MetaFile)++    ## Override __eq__ function+    #+    #
> Check whether ModuleBuildClassObjects are the same+    #+    #
> @retval False The two ModuleBuildClassObjects are different+    # @retval
> True  The two ModuleBuildClassObjects are the same+    #+    def
> __eq__(self, Other):+        return self.MetaFile == Other++    ##
> Override __hash__ function+    #+    # Use MetaFile as key in hash
> table+    #+    # @retval string Key for hash table+    #+    def
> __hash__(self):+        return hash(self.MetaFile)+ ##
> ModuleBuildClassObject # # This Class defines ModuleBuildClass # # @param
> object:               Inherited from object class@@ -440,11 +503,11
> @@ LibraryClassObject = namedtuple('LibraryClassObject',
> ['LibraryClass','SupModLis
>  #                              { [(PcdCName, PcdGuidCName)] :
> PcdClassObject} # @var BuildOptions:           To store value for
> BuildOptions, it is a set structure as #
> { [BuildOptionKey] : BuildOptionValue} # @var Depex:
> To store value for Depex #-class ModuleBuildClassObject(object):+class
> ModuleBuildClassObject(BuildData):     def __init__(self):
> self.AutoGenVersion          = 0         self.MetaFile
> = ''         self.BaseName                = ''
> self.ModuleType              = ''@@ -474,38 +537,10 @@ class
> ModuleBuildClassObject(object):
>          self.BuildOptions            = {}         self.Depex
> = {}         self.StrPcdSet               = []
> self.StrPcdOverallValue      = {} -    ## Convert the class to a string-
> #-    #  Convert member MetaFile of the class to a string-    #-    #
> @retval string Formatted String-    #-    def __str__(self):-
> return str(self.MetaFile)--    ## Override __eq__ function-    #-    #
> Check whether ModuleBuildClassObjects are the same-    #-    # @retval
> False The two ModuleBuildClassObjects are different-    # @retval True
> The two ModuleBuildClassObjects are the same-    #-    def __eq__(self,
> Other):-        return self.MetaFile == Other--    ## Override __hash__
> function-    #-    # Use MetaFile as key in hash table-    #-    #
> @retval string Key for hash table-    #-    def __hash__(self):-
> return hash(self.MetaFile)- ## PackageBuildClassObject # # This Class
defines
> PackageBuildClass # # @param object:        Inherited from object
> class@@ -525,11 +560,11 @@ class ModuleBuildClassObject(object):
>  # @var LibraryClasses:  To store value for LibraryClasses, it is a set
> structure as #                       { [LibraryClassName] :
> LibraryClassInfFile } # @var Pcds:            To store value for Pcds, it
is a
> set structure as #                       { [(PcdCName,
> PcdGuidCName)] : PcdClassObject} #-class
> PackageBuildClassObject(object):+class PackageBuildClassObject(BuildData):
> def __init__(self):         self.MetaFile                = ''
> self.PackageName             = ''         self.Guid
> = ''         self.Version                 = ''@@ -539,38 +574,10 @@
> class PackageBuildClassObject(object):
>          self.Guids                   = {}         self.Includes
> = []         self.LibraryClasses          = {}         self.Pcds
> = {} -    ## Convert the class to a string-    #-    #  Convert member
> MetaFile of the class to a string-    #-    #  @retval string Formatted
> String-    #-    def __str__(self):-        return str(self.MetaFile)--
> ## Override __eq__ function-    #-    # Check whether
> PackageBuildClassObjects are the same-    #-    # @retval False The two
> PackageBuildClassObjects are different-    # @retval True  The two
> PackageBuildClassObjects are the same-    #-    def __eq__(self, Other):-
> return self.MetaFile == Other--    ## Override __hash__ function-    #-
> # Use MetaFile as key in hash table-    #-    # @retval string Key for
hash
> table-    #-    def __hash__(self):-        return hash(self.MetaFile)- ##
> PlatformBuildClassObject # # This Class defines PlatformBuildClass # #
> @param object:          Inherited from object class@@ -595,11 +602,11
> @@ class PackageBuildClassObject(object):
>  # @var Pcds:              To store value for Pcds, it is a set structure
as
> #                         { [(PcdCName, PcdGuidCName)] :
> PcdClassObject } # @var BuildOptions:      To store value for
BuildOptions,
> it is a set structure as #                         { [BuildOptionKey] :
> BuildOptionValue } #-class PlatformBuildClassObject(object):+class
> PlatformBuildClassObject(BuildData):     def __init__(self):
> self.MetaFile                = ''         self.PlatformName
> = ''         self.Guid                    = ''         self.Version
> = ''@@ -614,33 +621,5 @@ class PlatformBuildClassObject(object):
>          self.LibraryInstances        = []         self.LibraryClasses
> = {}         self.Libraries               = {}         self.Pcds
> = {}         self.BuildOptions            = {}--    ## Convert the class
> to a string-    #-    #  Convert member MetaFile of the class to a string-
> #-    #  @retval string Formatted String-    #-    def __str__(self):-
> return str(self.MetaFile)--    ## Override __eq__ function-    #-    #
> Check whether PlatformBuildClassObjects are the same-    #-    #
> @retval False The two PlatformBuildClassObjects are different-    #
> @retval True  The two PlatformBuildClassObjects are the same-    #-
> def __eq__(self, Other):-        return self.MetaFile == Other--    ##
> Override __hash__ function-    #-    # Use MetaFile as key in hash table-
> #-    # @retval string Key for hash table-    #-    def __hash__(self):-
> return hash(self.MetaFile)diff --git
> a/BaseTools/Source/Python/Workspace/DecBuildData.py
> b/BaseTools/Source/Python/Workspace/DecBuildData.py
> index 30826a3cea..da7a52c5d0 100644
> --- a/BaseTools/Source/Python/Workspace/DecBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DecBuildData.py
> @@ -19,24 +19,10 @@ from re import compile
>  # #  This class is used to retrieve information stored in database and
> convert them # into PackageBuildClassObject form for easier use for
AutoGen.
> # class DecBuildData(PackageBuildClassObject):-    # dict used to convert
> PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ =
> {-        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,-
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,-
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of
> [Defines] to members of DecBuildData directly     _PROPERTY_ =
> {         #         # Required Fields@@ -66,10 +52,11 @@ class
> DecBuildData(PackageBuildClassObject):
>          self._Bdb = BuildDataBase         self._Arch = Arch
> self._Target = Target         self._Toolchain = Toolchain
> self._Clear()+        self.UpdatePcdTypeDict()      ## XXX[key] = value
> def __setitem__(self, key, value):
> self.__dict__[self._PROPERTY_[key]] = value diff --git
> a/BaseTools/Source/Python/Workspace/DscBuildData.py
> b/BaseTools/Source/Python/Workspace/DscBuildData.py
> index 5f07d3e75c..4d5b1ad4d9 100644
> --- a/BaseTools/Source/Python/Workspace/DscBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
> @@ -177,24 +177,10 @@ def GetDependencyList(FileStack, SearchPathList):
>      DependencyList = list(DependencySet)  # remove duplicate ones
> return DependencyList  class DscBuildData(PlatformBuildClassObject):-
> # dict used to convert PCD type in database to string used by build tool-
> _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,-
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,-
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of
> [Defines] to members of DscBuildData directly     _PROPERTY_ =
> {         #         # Required Fields@@ -240,11 +226,11 @@ class
> DscBuildData(PlatformBuildClassObject):
>          self._ToolChainFamily = None         self._Clear()
> self.WorkspaceDir = os.getenv("WORKSPACE") if os.getenv("WORKSPACE")
> else ""         self.DefaultStores = None         self.SkuIdMgr =
> SkuClass(self.SkuName, self.SkuIds)-+        self.UpdatePcdTypeDict()
> @property     def OutputPath(self):         if os.getenv("WORKSPACE"):
> return os.path.join(os.getenv("WORKSPACE"), self.OutputDirectory,
> self._Target + "_" + self._Toolchain, PcdValueInitName)         else:@@
> -409,10 +395,13 @@ class DscBuildData(PlatformBuildClassObject):
>                  try:                     uuid.UUID(Record[2])
> except:                     EdkLogger.error("build", FORMAT_INVALID,
> "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile)
> self._VpdToolGuid = Record[2]+            elif Name ==
> TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX:+                if
> TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX not in
> gCommandLineDefines:+
> gCommandLineDefines[TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX]
> = Record[2].strip()             elif Name in self:
> self[Name] = Record[2]         # set _Header to non-None in order to
> avoid database re-querying         self._Header = 'DUMMY' diff --git
> a/BaseTools/Source/Python/Workspace/InfBuildData.py
> b/BaseTools/Source/Python/Workspace/InfBuildData.py
> index 7675b0ea00..45b8ef4716 100644
> --- a/BaseTools/Source/Python/Workspace/InfBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/InfBuildData.py
> @@ -57,24 +57,10 @@ def _PpiValue(CName, PackageList, Inffile = None):
>  # #  This class is used to retrieve information stored in database and
> convert them # into ModuleBuildClassObject form for easier use for
AutoGen.
> # class InfBuildData(ModuleBuildClassObject):-    # dict used to convert
> PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ =
> {-        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,-
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,-
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of
> [Defines] to members of InfBuildData directly     _PROPERTY_ =
> {         #         # Required Fields@@ -152,10 +138,11 @@ class
> InfBuildData(ModuleBuildClassObject):
>          self._GuidsUsedByPcd = OrderedDict()
> self._GuidComments = None         self._PcdComments = None
> self._BuildOptions = None         self._DependencyFileList = None+
> self.UpdatePcdTypeDict()         self.LibInstances = []
> self.ReferenceModules = set()      def SetReferenceModule(self,Module):
> self.ReferenceModules.add(Module)--
> 2.29.1.windows.1
> 
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#76176): https://edk2.groups.io/g/devel/message/76176
> Mute This Topic: https://groups.io/mt/83388055/1768742
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [bob.c.feng@intel.com]
> -=-=-=-=-=-=
> 




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx
  2021-07-01  5:22   ` 回复: " gaoliming
@ 2021-07-12  2:43     ` Bob Feng
  0 siblings, 0 replies; 4+ messages in thread
From: Bob Feng @ 2021-07-12  2:43 UTC (permalink / raw)
  To: devel@edk2.groups.io, gaoliming@byosoft.com.cn, Chen, Christine
  Cc: Kinney, Michael D, Desimone, Nathaniel L

Not yet. I'll send the spec patch later.

Thanks,
Bob

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of gaoliming
Sent: Thursday, July 1, 2021 1:22 PM
To: Feng, Bob C <bob.c.feng@intel.com>; devel@edk2.groups.io; Chen, Christine <yuwei.chen@intel.com>
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
Subject: 回复: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx

Bob:
  This patch is good to me. Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>

  Have you sent the patch to update DSC spec?

Thanks
Liming
> -----邮件原件-----
> 发件人: Feng, Bob C <bob.c.feng@intel.com>
> 发送时间: 2021年7月1日 11:50
> 收件人: devel@edk2.groups.io; Feng, Bob C <bob.c.feng@intel.com>; Liming 
> Gao <gaoliming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>
> 抄送: Kinney, Michael D <michael.d.kinney@intel.com>; Desimone, 
> Nathaniel L <nathaniel.l.desimone@intel.com>
> 主题: RE: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat
dynamic
> pcd as dynamicEx
> 
> Hi Liming and Christine,
> 
> Do you have any comments on this patch?
> 
> Thanks,
> Bob
> 
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Bob 
> Feng
> Sent: Tuesday, June 8, 2021 10:50 AM
> To: devel@edk2.groups.io
> Cc: Liming Gao <gaoliming@byosoft.com.cn>; Chen, Christine 
> <yuwei.chen@intel.com>; Kinney, Michael D 
> <michael.d.kinney@intel.com>; Desimone, Nathaniel L 
> <nathaniel.l.desimone@intel.com>
> Subject: [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat
dynamic
> pcd as dynamicEx
> 
> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1688
> 
> In order to support binary build, build tool add a flag to convert 
> type of Dynamic Pcd to DynamicEx Pcd
> 
> User can append -D PCD_DYNAMIC_AS_DYNAMICEX to build command to enable 
> this function.
> Also, user can add "PCD_DYNAMIC_AS_DYNAMICEX = TRUE/FALSE"
> to the defines section of Dsc file to enable this function.
> 
> PCD_DYNAMIC_AS_DYNAMICEX is a new reserved key word for this function.
> 
> Signed-off-by: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Yuwei Chen <yuwei.chen@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> ---Correct Liming's 
> email address.
>  BaseTools/Source/Python/Common/DataType.py    |   1 +
>  .../Python/Workspace/BuildClassObject.py      | 153 ++++++++----------
>  .../Source/Python/Workspace/DecBuildData.py   |  15 +-
>  .../Source/Python/Workspace/DscBuildData.py   |  19 +--
>  .../Source/Python/Workspace/InfBuildData.py   |  15 +-
>  5 files changed, 73 insertions(+), 130 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/Common/DataType.py
> b/BaseTools/Source/Python/Common/DataType.py
> index fb88f20cc4..4e9c9e34af 100644
> --- a/BaseTools/Source/Python/Common/DataType.py
> +++ b/BaseTools/Source/Python/Common/DataType.py
> @@ -402,10 +402,11 @@ TAB_DSC_DEFINES_DSC_SPECIFICATION = 
> 'DSC_SPECIFICATION'
>  TAB_DSC_DEFINES_OUTPUT_DIRECTORY = 'OUTPUT_DIRECTORY'
> TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES = 'SUPPORTED_ARCHITECTURES' 
> TAB_DSC_DEFINES_BUILD_TARGETS = 'BUILD_TARGETS' 
> TAB_DSC_DEFINES_SKUID_IDENTIFIER = 'SKUID_IDENTIFIER' 
> TAB_DSC_DEFINES_PCD_INFO_GENERATION = 
> 'PCD_INFO_GENERATION'+TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMI
> CEX = 'PCD_DYNAMIC_AS_DYNAMICEX'
> TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION = 'PCD_VAR_CHECK_GENERATION' 
> TAB_DSC_DEFINES_FLASH_DEFINITION = 'FLASH_DEFINITION' 
> TAB_DSC_DEFINES_BUILD_NUMBER = 'BUILD_NUMBER' 
> TAB_DSC_DEFINES_MAKEFILE_NAME = 'MAKEFILE_NAME'
> TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress'diff --git 
> a/BaseTools/Source/Python/Workspace/BuildClassObject.py
> b/BaseTools/Source/Python/Workspace/BuildClassObject.py
> index ebb65fc2fe..88a1d1582c 100644
> --- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
> +++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
> @@ -10,11 +10,13 @@ from Common.DataType import *  import collections 
> import re from collections import OrderedDict from Common.Misc import 
> CopyDict,ArrayIndex import copy+from CommonDataClass.DataClass import 
> * import Common.EdkLogger as EdkLogger+import Common.GlobalData as 
> GlobalData from Common.BuildToolError import OPTION_VALUE_INVALID from 
> Common.caching import cached_property StructPattern = 
> re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')  ## PcdClassObject@@ 
> -396,10 +398,71 @@ class
> StructurePcd(PcdClassObject):
>          new_pcd.ValueChain = {item for item in self.ValueChain} 
> return new_pcd  LibraryClassObject = namedtuple('LibraryClassObject',
> ['LibraryClass','SupModList']) +class BuildData(object):+    # dict used
to
> convert PCD type in database to string used by build tool++
> _PCD_TYPE_STRING_ = {+        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,+
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,+
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,+
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,+
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,+
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,+
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,+    }++    def UpdatePcdTypeDict(self):+
> if
> GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_PCD_DYNAMIC_A
> S_DYNAMICEX,"FALSE").upper() == "TRUE":+ self._PCD_TYPE_STRING_ = {+
> MODEL_PCD_FIXED_AT_BUILD        :   TAB_PCDS_FIXED_AT_BUILD,+
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,+
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,+
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_EX_HII,+
> MODEL_PCD_DYNAMIC_VPD           :
> TAB_PCDS_DYNAMIC_EX_VPD,+
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,+
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,+
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,+            }++    ## Convert the class
> to a string+    #+    #  Convert member MetaFile of the class to a string+
> #+    #  @retval string Formatted String+    #+    def __str__(self):+
> return str(self.MetaFile)++    ## Override __eq__ function+    #+    #
> Check whether ModuleBuildClassObjects are the same+    #+    #
> @retval False The two ModuleBuildClassObjects are different+    # @retval
> True  The two ModuleBuildClassObjects are the same+    #+    def
> __eq__(self, Other):+        return self.MetaFile == Other++    ##
> Override __hash__ function+    #+    # Use MetaFile as key in hash
> table+    #+    # @retval string Key for hash table+    #+    def
> __hash__(self):+        return hash(self.MetaFile)+ ##
> ModuleBuildClassObject # # This Class defines ModuleBuildClass # # @param
> object:               Inherited from object class@@ -440,11 +503,11
> @@ LibraryClassObject = namedtuple('LibraryClassObject', 
> ['LibraryClass','SupModLis
>  #                              { [(PcdCName, PcdGuidCName)] :
> PcdClassObject} # @var BuildOptions:           To store value for
> BuildOptions, it is a set structure as # { [BuildOptionKey] : 
> BuildOptionValue} # @var Depex:
> To store value for Depex #-class ModuleBuildClassObject(object):+class
> ModuleBuildClassObject(BuildData):     def __init__(self):
> self.AutoGenVersion          = 0         self.MetaFile
> = ''         self.BaseName                = ''
> self.ModuleType              = ''@@ -474,38 +537,10 @@ class
> ModuleBuildClassObject(object):
>          self.BuildOptions            = {}         self.Depex
> = {}         self.StrPcdSet               = []
> self.StrPcdOverallValue      = {} -    ## Convert the class to a string-
> #-    #  Convert member MetaFile of the class to a string-    #-    #
> @retval string Formatted String-    #-    def __str__(self):-
> return str(self.MetaFile)--    ## Override __eq__ function-    #-    #
> Check whether ModuleBuildClassObjects are the same-    #-    # @retval
> False The two ModuleBuildClassObjects are different-    # @retval True
> The two ModuleBuildClassObjects are the same-    #-    def __eq__(self,
> Other):-        return self.MetaFile == Other--    ## Override __hash__
> function-    #-    # Use MetaFile as key in hash table-    #-    #
> @retval string Key for hash table-    #-    def __hash__(self):-
> return hash(self.MetaFile)- ## PackageBuildClassObject # # This Class
defines
> PackageBuildClass # # @param object:        Inherited from object
> class@@ -525,11 +560,11 @@ class ModuleBuildClassObject(object):
>  # @var LibraryClasses:  To store value for LibraryClasses, it is a set
> structure as #                       { [LibraryClassName] :
> LibraryClassInfFile } # @var Pcds:            To store value for Pcds, it
is a
> set structure as #                       { [(PcdCName,
> PcdGuidCName)] : PcdClassObject} #-class 
> PackageBuildClassObject(object):+class PackageBuildClassObject(BuildData):
> def __init__(self):         self.MetaFile                = ''
> self.PackageName             = ''         self.Guid
> = ''         self.Version                 = ''@@ -539,38 +574,10 @@
> class PackageBuildClassObject(object):
>          self.Guids                   = {}         self.Includes
> = []         self.LibraryClasses          = {}         self.Pcds
> = {} -    ## Convert the class to a string-    #-    #  Convert member
> MetaFile of the class to a string-    #-    #  @retval string Formatted
> String-    #-    def __str__(self):-        return str(self.MetaFile)--
> ## Override __eq__ function-    #-    # Check whether
> PackageBuildClassObjects are the same-    #-    # @retval False The two
> PackageBuildClassObjects are different-    # @retval True  The two
> PackageBuildClassObjects are the same-    #-    def __eq__(self, Other):-
> return self.MetaFile == Other--    ## Override __hash__ function-    #-
> # Use MetaFile as key in hash table-    #-    # @retval string Key for
hash
> table-    #-    def __hash__(self):-        return hash(self.MetaFile)- ##
> PlatformBuildClassObject # # This Class defines PlatformBuildClass # #
> @param object:          Inherited from object class@@ -595,11 +602,11
> @@ class PackageBuildClassObject(object):
>  # @var Pcds:              To store value for Pcds, it is a set structure
as
> #                         { [(PcdCName, PcdGuidCName)] :
> PcdClassObject } # @var BuildOptions:      To store value for
BuildOptions,
> it is a set structure as #                         { [BuildOptionKey] :
> BuildOptionValue } #-class PlatformBuildClassObject(object):+class
> PlatformBuildClassObject(BuildData):     def __init__(self):
> self.MetaFile                = ''         self.PlatformName
> = ''         self.Guid                    = ''         self.Version
> = ''@@ -614,33 +621,5 @@ class PlatformBuildClassObject(object):
>          self.LibraryInstances        = []         self.LibraryClasses
> = {}         self.Libraries               = {}         self.Pcds
> = {}         self.BuildOptions            = {}--    ## Convert the class
> to a string-    #-    #  Convert member MetaFile of the class to a string-
> #-    #  @retval string Formatted String-    #-    def __str__(self):-
> return str(self.MetaFile)--    ## Override __eq__ function-    #-    #
> Check whether PlatformBuildClassObjects are the same-    #-    #
> @retval False The two PlatformBuildClassObjects are different-    #
> @retval True  The two PlatformBuildClassObjects are the same-    #-
> def __eq__(self, Other):-        return self.MetaFile == Other--    ##
> Override __hash__ function-    #-    # Use MetaFile as key in hash table-
> #-    # @retval string Key for hash table-    #-    def __hash__(self):-
> return hash(self.MetaFile)diff --git
> a/BaseTools/Source/Python/Workspace/DecBuildData.py
> b/BaseTools/Source/Python/Workspace/DecBuildData.py
> index 30826a3cea..da7a52c5d0 100644
> --- a/BaseTools/Source/Python/Workspace/DecBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DecBuildData.py
> @@ -19,24 +19,10 @@ from re import compile  # #  This class is used to 
> retrieve information stored in database and convert them # into 
> PackageBuildClassObject form for easier use for
AutoGen.
> # class DecBuildData(PackageBuildClassObject):-    # dict used to convert
> PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ =
> {-        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,-
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,-
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of
> [Defines] to members of DecBuildData directly     _PROPERTY_ =
> {         #         # Required Fields@@ -66,10 +52,11 @@ class
> DecBuildData(PackageBuildClassObject):
>          self._Bdb = BuildDataBase         self._Arch = Arch
> self._Target = Target         self._Toolchain = Toolchain
> self._Clear()+        self.UpdatePcdTypeDict()      ## XXX[key] = value
> def __setitem__(self, key, value):
> self.__dict__[self._PROPERTY_[key]] = value diff --git 
> a/BaseTools/Source/Python/Workspace/DscBuildData.py
> b/BaseTools/Source/Python/Workspace/DscBuildData.py
> index 5f07d3e75c..4d5b1ad4d9 100644
> --- a/BaseTools/Source/Python/Workspace/DscBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
> @@ -177,24 +177,10 @@ def GetDependencyList(FileStack, SearchPathList):
>      DependencyList = list(DependencySet)  # remove duplicate ones 
> return DependencyList  class DscBuildData(PlatformBuildClassObject):-
> # dict used to convert PCD type in database to string used by build tool-
> _PCD_TYPE_STRING_ = {-        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,-
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,-
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of
> [Defines] to members of DscBuildData directly     _PROPERTY_ =
> {         #         # Required Fields@@ -240,11 +226,11 @@ class
> DscBuildData(PlatformBuildClassObject):
>          self._ToolChainFamily = None         self._Clear()
> self.WorkspaceDir = os.getenv("WORKSPACE") if os.getenv("WORKSPACE")
> else ""         self.DefaultStores = None         self.SkuIdMgr =
> SkuClass(self.SkuName, self.SkuIds)-+        self.UpdatePcdTypeDict()
> @property     def OutputPath(self):         if os.getenv("WORKSPACE"):
> return os.path.join(os.getenv("WORKSPACE"), self.OutputDirectory,
> self._Target + "_" + self._Toolchain, PcdValueInitName)         else:@@
> -409,10 +395,13 @@ class DscBuildData(PlatformBuildClassObject):
>                  try:                     uuid.UUID(Record[2])
> except:                     EdkLogger.error("build", FORMAT_INVALID,
> "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile)
> self._VpdToolGuid = Record[2]+            elif Name ==
> TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX:+                if
> TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX not in gCommandLineDefines:+ 
> gCommandLineDefines[TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX]
> = Record[2].strip()             elif Name in self:
> self[Name] = Record[2]         # set _Header to non-None in order to
> avoid database re-querying         self._Header = 'DUMMY' diff --git
> a/BaseTools/Source/Python/Workspace/InfBuildData.py
> b/BaseTools/Source/Python/Workspace/InfBuildData.py
> index 7675b0ea00..45b8ef4716 100644
> --- a/BaseTools/Source/Python/Workspace/InfBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/InfBuildData.py
> @@ -57,24 +57,10 @@ def _PpiValue(CName, PackageList, Inffile = None):
>  # #  This class is used to retrieve information stored in database 
> and convert them # into ModuleBuildClassObject form for easier use for
AutoGen.
> # class InfBuildData(ModuleBuildClassObject):-    # dict used to convert
> PCD type in database to string used by build tool-    _PCD_TYPE_STRING_ =
> {-        MODEL_PCD_FIXED_AT_BUILD        :
> TAB_PCDS_FIXED_AT_BUILD,-
> MODEL_PCD_PATCHABLE_IN_MODULE   :
> TAB_PCDS_PATCHABLE_IN_MODULE,-
> MODEL_PCD_FEATURE_FLAG          :   TAB_PCDS_FEATURE_FLAG,-
> MODEL_PCD_DYNAMIC               :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_DEFAULT       :   TAB_PCDS_DYNAMIC,-
> MODEL_PCD_DYNAMIC_HII           :   TAB_PCDS_DYNAMIC_HII,-
> MODEL_PCD_DYNAMIC_VPD           :   TAB_PCDS_DYNAMIC_VPD,-
> MODEL_PCD_DYNAMIC_EX            :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_DEFAULT    :   TAB_PCDS_DYNAMIC_EX,-
> MODEL_PCD_DYNAMIC_EX_HII        :   TAB_PCDS_DYNAMIC_EX_HII,-
> MODEL_PCD_DYNAMIC_EX_VPD        :
> TAB_PCDS_DYNAMIC_EX_VPD,-    }      # dict used to convert part of
> [Defines] to members of InfBuildData directly     _PROPERTY_ =
> {         #         # Required Fields@@ -152,10 +138,11 @@ class
> InfBuildData(ModuleBuildClassObject):
>          self._GuidsUsedByPcd = OrderedDict()
> self._GuidComments = None         self._PcdComments = None
> self._BuildOptions = None         self._DependencyFileList = None+
> self.UpdatePcdTypeDict()         self.LibInstances = []
> self.ReferenceModules = set()      def SetReferenceModule(self,Module):
> self.ReferenceModules.add(Module)--
> 2.29.1.windows.1
> 
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#76176): 
> https://edk2.groups.io/g/devel/message/76176
> Mute This Topic: https://groups.io/mt/83388055/1768742
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub 
> [bob.c.feng@intel.com] -=-=-=-=-=-=
> 









^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-12  2:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <16867BA05B2FF24C.10003@groups.io>
2021-06-15  0:52 ` [edk2-devel] [Patch V2] BaseTools: Enable the flag to treat dynamic pcd as dynamicEx Bob Feng
2021-07-01  3:50 ` Bob Feng
2021-07-01  5:22   ` 回复: " gaoliming
2021-07-12  2:43     ` Bob Feng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox