From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: liming.gao@intel.com) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by groups.io with SMTP; Tue, 09 Apr 2019 02:28:04 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Apr 2019 02:28:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,328,1549958400"; d="scan'208";a="138739297" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga008.fm.intel.com with ESMTP; 09 Apr 2019 02:28:03 -0700 Received: from fmsmsx111.amr.corp.intel.com (10.18.116.5) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 9 Apr 2019 02:28:03 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx111.amr.corp.intel.com (10.18.116.5) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 9 Apr 2019 02:28:02 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.92]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.164]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 17:28:00 +0800 From: "Liming Gao" To: "Feng, Bob C" , "devel@edk2.groups.io" Subject: Re: [Patch] BaseTools: Add a build option to treat DynPcd as DynExPcd Thread-Topic: [Patch] BaseTools: Add a build option to treat DynPcd as DynExPcd Thread-Index: AQHU7qoWrOpmUOZrMEmcVHTaPe/TKKYzi6bg Date: Tue, 9 Apr 2019 09:28:00 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E421208@SHSMSX104.ccr.corp.intel.com> References: <20190409075822.25408-1-bob.c.feng@intel.com> In-Reply-To: <20190409075822.25408-1-bob.c.feng@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNmZlMDJlZjQtN2MxZi00MWMyLTgxZTUtOWQ0YjI2ZTc2MTQ5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoibmN4MTJDWjdEVytSNW1wSkl6ZkZRelV1U2VRVjFnaUhCRmdLVmlVcG9Pemt1VUlyZElWRGwzVjNNK1hGUmpVWCJ9 dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: liming.gao@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable 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 upd= ate 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 ; Gao, Liming > Subject: [Patch] BaseTools: Add a build option to treat DynPcd as DynExPc= d >=20 > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1688 > In order to support binary build, build tool add a > flag to convert type of Dynamic Pcd to DynamicEx Pcd >=20 > User can append -D PCD_DYNAMIC_AS_DYNAMICEX to build command > to enable this function. >=20 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Bob Feng > Cc: Liming Gao > --- > .../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(-) >=20 > diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py b/Base= Tools/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 =3D re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$') > ArrayIndex =3D 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 =3D {item for item in self.ValueChain} > return new_pcd >=20 > LibraryClassObject =3D namedtuple('LibraryClassObject', ['LibraryClass',= 'SupModList']) >=20 > +class BuildData(object): > + # dict used to convert PCD type in database to string used by build = tool > + > + _PCD_TYPE_STRING_ =3D { > + 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() =3D=3D "TRUE": > + self._PCD_TYPE_STRING_ =3D { > + MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BU= ILD, > + MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_I= N_MODULE, > + MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLA= G, > + 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 =3D=3D 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 =3D namedtuple('LibraryClassObje= ct', ['LibraryClass','SupModLis > # { [(PcdCName, PcdGuidCName)] : PcdClassOb= ject} > # @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 =3D 0 > self.MetaFile =3D '' > self.BaseName =3D '' > self.ModuleType =3D '' > @@ -432,38 +495,10 @@ class ModuleBuildClassObject(object): > self.Packages =3D [] > self.Pcds =3D {} > self.BuildOptions =3D {} > self.Depex =3D {} >=20 > - ## 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 =3D=3D 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 s= tructure as > # { [LibraryClassName] : LibraryClassInfFile } > # @var Pcds: To store value for Pcds, it is a set structure a= s > # { [(PcdCName, PcdGuidCName)] : PcdClassObject} > # > -class PackageBuildClassObject(object): > +class PackageBuildClassObject(BuildData): > def __init__(self): > self.MetaFile =3D '' > self.PackageName =3D '' > self.Guid =3D '' > self.Version =3D '' > @@ -497,38 +532,10 @@ class PackageBuildClassObject(object): > self.Guids =3D {} > self.Includes =3D [] > self.LibraryClasses =3D {} > self.Pcds =3D {} >=20 > - ## 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 =3D=3D 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 s= tructure as > # { [BuildOptionKey] : BuildOptionValue } > # > -class PlatformBuildClassObject(object): > +class PlatformBuildClassObject(BuildData): > def __init__(self): > self.MetaFile =3D '' > self.PlatformName =3D '' > self.Guid =3D '' > self.Version =3D '' > @@ -572,33 +579,5 @@ class PlatformBuildClassObject(object): > self.LibraryInstances =3D [] > self.LibraryClasses =3D {} > self.Libraries =3D {} > self.Pcds =3D {} > self.BuildOptions =3D {} > - > - ## 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 =3D=3D 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/BaseTool= s/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 con= vert 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_ =3D { > - 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, > - } >=20 > # dict used to convert part of [Defines] to members of DecBuildData = directly > _PROPERTY_ =3D { > # > # 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", > } >=20 > - > ## Constructor of DecBuildData > # > # Initialize object of DecBuildData > # > # @param FilePath The path of package description file > @@ -72,10 +57,11 @@ class DecBuildData(PackageBuildClassObject): > self._Bdb =3D BuildDataBase > self._Arch =3D Arch > self._Target =3D Target > self._Toolchain =3D Toolchain > self._Clear() > + self.UpdatePcdTypeDict() >=20 > ## XXX[key] =3D value > def __setitem__(self, key, value): > self.__dict__[self._PROPERTY_[key]] =3D value >=20 > diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTool= s/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 =3D list(DependencySet) # remove duplicate ones >=20 > return DependencyList >=20 > class DscBuildData(PlatformBuildClassObject): > - # dict used to convert PCD type in database to string used by build = tool > - _PCD_TYPE_STRING_ =3D { > - 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, > - } >=20 > # dict used to convert part of [Defines] to members of DscBuildData = directly > _PROPERTY_ =3D { > # > # Required Fields > @@ -249,11 +235,11 @@ class DscBuildData(PlatformBuildClassObject): > self._ToolChainFamily =3D None > self._Clear() > self.WorkspaceDir =3D os.getenv("WORKSPACE") if os.getenv("WORKS= PACE") else "" > self.DefaultStores =3D None > self.SkuIdMgr =3D SkuClass(self.SkuName, self.SkuIds) > - > + self.UpdatePcdTypeDict() > @property > def OutputPath(self): > if os.getenv("WORKSPACE"): > return os.path.join(os.getenv("WORKSPACE"), self.OutputDirec= tory, self._Target + "_" + self._Toolchain, PcdValueInitName) > else: > diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py b/BaseTool= s/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 =3D None): > # > # This class is used to retrieve information stored in database and con= vert 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_ =3D { > - 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, > - } >=20 > # dict used to convert part of [Defines] to members of InfBuildData = directly > _PROPERTY_ =3D { > # > # Required Fields > @@ -158,10 +144,11 @@ class InfBuildData(ModuleBuildClassObject): > self._GuidsUsedByPcd =3D OrderedDict() > self._GuidComments =3D None > self._PcdComments =3D None > self._BuildOptions =3D None > self._DependencyFileList =3D None > + self.UpdatePcdTypeDict() >=20 > ## XXX[key] =3D value > def __setitem__(self, key, value): > self.__dict__[self._PROPERTY_[key]] =3D value >=20 > -- > 2.20.1.windows.1