* [Patch] BaseTools: Add a build option to treat DynPcd as DynExPcd
@ 2019-04-09 7:58 BobCF
2019-04-09 9:28 ` Liming Gao
0 siblings, 1 reply; 2+ messages in thread
From: BobCF @ 2019-04-09 7:58 UTC (permalink / raw)
To: devel; +Cc: Bob Feng, Liming Gao
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.feng@intel.com>
Cc: Liming Gao <liming.gao@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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Patch] BaseTools: Add a build option to treat DynPcd as DynExPcd
2019-04-09 7:58 [Patch] BaseTools: Add a build option to treat DynPcd as DynExPcd BobCF
@ 2019-04-09 9:28 ` Liming Gao
0 siblings, 0 replies; 2+ messages in thread
From: Liming Gao @ 2019-04-09 9:28 UTC (permalink / raw)
To: Feng, Bob C, devel@edk2.groups.io
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.feng@intel.com>; Gao, Liming <liming.gao@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.feng@intel.com>
> Cc: Liming Gao <liming.gao@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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-04-09 9:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-09 7:58 [Patch] BaseTools: Add a build option to treat DynPcd as DynExPcd BobCF
2019-04-09 9:28 ` Liming Gao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox