Bob:
  New key is the reserved key. It can also be specified in [Defines] of DSC 
file. Please also support this model. Besides, please submit one BZ to update 
build spec.

Thanks
Liming
> -----Original Message-----
> From: Feng, Bob C
> Sent: Tuesday, April 9, 2019 3:58 PM
> To: devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.f...@intel.com>; Gao, Liming <liming....@intel.com>
> Subject: [Patch] BaseTools: Add a build option to treat DynPcd as DynExPcd
> 
> BZ: 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.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Bob Feng <bob.c.f...@intel.com>
> Cc: Liming Gao <liming....@intel.com>
> ---
>  .../Python/Workspace/BuildClassObject.py      | 153 ++++++++----------
>  .../Source/Python/Workspace/DecBuildData.py   |  16 +-
>  .../Source/Python/Workspace/DscBuildData.py   |  16 +-
>  .../Source/Python/Workspace/InfBuildData.py   |  15 +-
>  4 files changed, 69 insertions(+), 131 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py 
> b/BaseTools/Source/Python/Workspace/BuildClassObject.py
> index 3213855e70..36201284e7 100644
> --- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
> +++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
> @@ -16,10 +16,12 @@ from Common.DataType import *
>  import collections
>  import re
>  from collections import OrderedDict
>  from Common.Misc import CopyDict
>  import copy
> +from CommonDataClass.DataClass import *
> +import Common.GlobalData as GlobalData
>  StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')
>  ArrayIndex = re.compile("\[\s*[0-9a-fA-FxX]*\s*\]")
>  ## PcdClassObject
>  #
>  # This Class is used for PcdObject
> @@ -356,10 +358,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("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
> @@ -400,11 +463,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              = ''
> @@ -432,38 +495,10 @@ class ModuleBuildClassObject(object):
>          self.Packages                = []
>          self.Pcds                    = {}
>          self.BuildOptions            = {}
>          self.Depex                   = {}
> 
> -    ## 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
> @@ -483,11 +518,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                 = ''
> @@ -497,38 +532,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
> @@ -553,11 +560,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                 = ''
> @@ -572,33 +579,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 149c057b70..53d656335e 100644
> --- a/BaseTools/Source/Python/Workspace/DecBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DecBuildData.py
> @@ -25,24 +25,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
> @@ -51,11 +37,10 @@ class DecBuildData(PackageBuildClassObject):
>          TAB_DEC_DEFINES_PACKAGE_GUID                : "_Guid",
>          TAB_DEC_DEFINES_PACKAGE_VERSION             : "_Version",
>          TAB_DEC_DEFINES_PKG_UNI_FILE                : "_PkgUniFile",
>      }
> 
> -
>      ## Constructor of DecBuildData
>      #
>      #  Initialize object of DecBuildData
>      #
>      #   @param      FilePath        The path of package description file
> @@ -72,10 +57,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 129c0c950b..ce1a62e63e 100644
> --- a/BaseTools/Source/Python/Workspace/DscBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
> @@ -186,24 +186,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
> @@ -249,11 +235,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:
> diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py 
> b/BaseTools/Source/Python/Workspace/InfBuildData.py
> index 9fed1198fd..cc547ce9d4 100644
> --- a/BaseTools/Source/Python/Workspace/InfBuildData.py
> +++ b/BaseTools/Source/Python/Workspace/InfBuildData.py
> @@ -63,24 +63,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
> @@ -158,10 +144,11 @@ class InfBuildData(ModuleBuildClassObject):
>          self._GuidsUsedByPcd = OrderedDict()
>          self._GuidComments = None
>          self._PcdComments = None
>          self._BuildOptions = None
>          self._DependencyFileList = None
> +        self.UpdatePcdTypeDict()
> 
>      ## XXX[key] = value
>      def __setitem__(self, key, value):
>          self.__dict__[self._PROPERTY_[key]] = value
> 
> --
> 2.20.1.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#38697): https://edk2.groups.io/g/devel/message/38697
Mute This Topic: https://groups.io/mt/30996876/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to