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] -=-=-=-=-=-=-=-=-=-=-=-