from collections import OrderedDict\r
from Common.Misc import CopyDict,ArrayIndex\r
import copy\r
+from CommonDataClass.DataClass import *\r
import Common.EdkLogger as EdkLogger\r
+import Common.GlobalData as GlobalData\r
from Common.BuildToolError import OPTION_VALUE_INVALID\r
from Common.caching import cached_property\r
StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')\r
\r
LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList'])\r
\r
+class BuildData(object):\r
+ # dict used to convert PCD type in database to string used by build tool\r
+\r
+ _PCD_TYPE_STRING_ = {\r
+ MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BUILD,\r
+ MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_IN_MODULE,\r
+ MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLAG,\r
+ MODEL_PCD_DYNAMIC : TAB_PCDS_DYNAMIC,\r
+ MODEL_PCD_DYNAMIC_DEFAULT : TAB_PCDS_DYNAMIC,\r
+ MODEL_PCD_DYNAMIC_HII : TAB_PCDS_DYNAMIC_HII,\r
+ MODEL_PCD_DYNAMIC_VPD : TAB_PCDS_DYNAMIC_VPD,\r
+ MODEL_PCD_DYNAMIC_EX : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_EX_DEFAULT : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_EX_HII : TAB_PCDS_DYNAMIC_EX_HII,\r
+ MODEL_PCD_DYNAMIC_EX_VPD : TAB_PCDS_DYNAMIC_EX_VPD,\r
+ }\r
+\r
+ def UpdatePcdTypeDict(self):\r
+ if GlobalData.gCommandLineDefines.get(TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX,"FALSE").upper() == "TRUE":\r
+ self._PCD_TYPE_STRING_ = {\r
+ MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BUILD,\r
+ MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_IN_MODULE,\r
+ MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLAG,\r
+ MODEL_PCD_DYNAMIC : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_DEFAULT : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_HII : TAB_PCDS_DYNAMIC_EX_HII,\r
+ MODEL_PCD_DYNAMIC_VPD : TAB_PCDS_DYNAMIC_EX_VPD,\r
+ MODEL_PCD_DYNAMIC_EX : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_EX_DEFAULT : TAB_PCDS_DYNAMIC_EX,\r
+ MODEL_PCD_DYNAMIC_EX_HII : TAB_PCDS_DYNAMIC_EX_HII,\r
+ MODEL_PCD_DYNAMIC_EX_VPD : TAB_PCDS_DYNAMIC_EX_VPD,\r
+ }\r
+\r
+ ## Convert the class to a string\r
+ #\r
+ # Convert member MetaFile of the class to a string\r
+ #\r
+ # @retval string Formatted String\r
+ #\r
+ def __str__(self):\r
+ return str(self.MetaFile)\r
+\r
+ ## Override __eq__ function\r
+ #\r
+ # Check whether ModuleBuildClassObjects are the same\r
+ #\r
+ # @retval False The two ModuleBuildClassObjects are different\r
+ # @retval True The two ModuleBuildClassObjects are the same\r
+ #\r
+ def __eq__(self, Other):\r
+ return self.MetaFile == Other\r
+\r
+ ## Override __hash__ function\r
+ #\r
+ # Use MetaFile as key in hash table\r
+ #\r
+ # @retval string Key for hash table\r
+ #\r
+ def __hash__(self):\r
+ return hash(self.MetaFile)\r
+\r
## ModuleBuildClassObject\r
#\r
# This Class defines ModuleBuildClass\r
# { [BuildOptionKey] : BuildOptionValue}\r
# @var Depex: To store value for Depex\r
#\r
-class ModuleBuildClassObject(object):\r
+class ModuleBuildClassObject(BuildData):\r
def __init__(self):\r
self.AutoGenVersion = 0\r
self.MetaFile = ''\r
self.StrPcdSet = []\r
self.StrPcdOverallValue = {}\r
\r
- ## Convert the class to a string\r
- #\r
- # Convert member MetaFile of the class to a string\r
- #\r
- # @retval string Formatted String\r
- #\r
- def __str__(self):\r
- return str(self.MetaFile)\r
-\r
- ## Override __eq__ function\r
- #\r
- # Check whether ModuleBuildClassObjects are the same\r
- #\r
- # @retval False The two ModuleBuildClassObjects are different\r
- # @retval True The two ModuleBuildClassObjects are the same\r
- #\r
- def __eq__(self, Other):\r
- return self.MetaFile == Other\r
-\r
- ## Override __hash__ function\r
- #\r
- # Use MetaFile as key in hash table\r
- #\r
- # @retval string Key for hash table\r
- #\r
- def __hash__(self):\r
- return hash(self.MetaFile)\r
-\r
## PackageBuildClassObject\r
#\r
# This Class defines PackageBuildClass\r
# @var Pcds: To store value for Pcds, it is a set structure as\r
# { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
#\r
-class PackageBuildClassObject(object):\r
+class PackageBuildClassObject(BuildData):\r
def __init__(self):\r
self.MetaFile = ''\r
self.PackageName = ''\r
self.LibraryClasses = {}\r
self.Pcds = {}\r
\r
- ## Convert the class to a string\r
- #\r
- # Convert member MetaFile of the class to a string\r
- #\r
- # @retval string Formatted String\r
- #\r
- def __str__(self):\r
- return str(self.MetaFile)\r
-\r
- ## Override __eq__ function\r
- #\r
- # Check whether PackageBuildClassObjects are the same\r
- #\r
- # @retval False The two PackageBuildClassObjects are different\r
- # @retval True The two PackageBuildClassObjects are the same\r
- #\r
- def __eq__(self, Other):\r
- return self.MetaFile == Other\r
-\r
- ## Override __hash__ function\r
- #\r
- # Use MetaFile as key in hash table\r
- #\r
- # @retval string Key for hash table\r
- #\r
- def __hash__(self):\r
- return hash(self.MetaFile)\r
-\r
## PlatformBuildClassObject\r
#\r
# This Class defines PlatformBuildClass\r
# @var BuildOptions: To store value for BuildOptions, it is a set structure as\r
# { [BuildOptionKey] : BuildOptionValue }\r
#\r
-class PlatformBuildClassObject(object):\r
+class PlatformBuildClassObject(BuildData):\r
def __init__(self):\r
self.MetaFile = ''\r
self.PlatformName = ''\r
self.Libraries = {}\r
self.Pcds = {}\r
self.BuildOptions = {}\r
-\r
- ## Convert the class to a string\r
- #\r
- # Convert member MetaFile of the class to a string\r
- #\r
- # @retval string Formatted String\r
- #\r
- def __str__(self):\r
- return str(self.MetaFile)\r
-\r
- ## Override __eq__ function\r
- #\r
- # Check whether PlatformBuildClassObjects are the same\r
- #\r
- # @retval False The two PlatformBuildClassObjects are different\r
- # @retval True The two PlatformBuildClassObjects are the same\r
- #\r
- def __eq__(self, Other):\r
- return self.MetaFile == Other\r
-\r
- ## Override __hash__ function\r
- #\r
- # Use MetaFile as key in hash table\r
- #\r
- # @retval string Key for hash table\r
- #\r
- def __hash__(self):\r
- return hash(self.MetaFile)\r
# into PackageBuildClassObject form for easier use for AutoGen.\r
#\r
class DecBuildData(PackageBuildClassObject):\r
- # dict used to convert PCD type in database to string used by build tool\r
- _PCD_TYPE_STRING_ = {\r
- MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BUILD,\r
- MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_IN_MODULE,\r
- MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLAG,\r
- MODEL_PCD_DYNAMIC : TAB_PCDS_DYNAMIC,\r
- MODEL_PCD_DYNAMIC_DEFAULT : TAB_PCDS_DYNAMIC,\r
- MODEL_PCD_DYNAMIC_HII : TAB_PCDS_DYNAMIC_HII,\r
- MODEL_PCD_DYNAMIC_VPD : TAB_PCDS_DYNAMIC_VPD,\r
- MODEL_PCD_DYNAMIC_EX : TAB_PCDS_DYNAMIC_EX,\r
- MODEL_PCD_DYNAMIC_EX_DEFAULT : TAB_PCDS_DYNAMIC_EX,\r
- MODEL_PCD_DYNAMIC_EX_HII : TAB_PCDS_DYNAMIC_EX_HII,\r
- MODEL_PCD_DYNAMIC_EX_VPD : TAB_PCDS_DYNAMIC_EX_VPD,\r
- }\r
\r
# dict used to convert part of [Defines] to members of DecBuildData directly\r
_PROPERTY_ = {\r
TAB_DEC_DEFINES_PKG_UNI_FILE : "_PkgUniFile",\r
}\r
\r
-\r
## Constructor of DecBuildData\r
#\r
# Initialize object of DecBuildData\r
self._Target = Target\r
self._Toolchain = Toolchain\r
self._Clear()\r
+ self.UpdatePcdTypeDict()\r
\r
## XXX[key] = value\r
def __setitem__(self, key, value):\r
return DependencyList\r
\r
class DscBuildData(PlatformBuildClassObject):\r
- # dict used to convert PCD type in database to string used by build tool\r
- _PCD_TYPE_STRING_ = {\r
- MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BUILD,\r
- MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_IN_MODULE,\r
- MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLAG,\r
- MODEL_PCD_DYNAMIC : TAB_PCDS_DYNAMIC,\r
- MODEL_PCD_DYNAMIC_DEFAULT : TAB_PCDS_DYNAMIC,\r
- MODEL_PCD_DYNAMIC_HII : TAB_PCDS_DYNAMIC_HII,\r
- MODEL_PCD_DYNAMIC_VPD : TAB_PCDS_DYNAMIC_VPD,\r
- MODEL_PCD_DYNAMIC_EX : TAB_PCDS_DYNAMIC_EX,\r
- MODEL_PCD_DYNAMIC_EX_DEFAULT : TAB_PCDS_DYNAMIC_EX,\r
- MODEL_PCD_DYNAMIC_EX_HII : TAB_PCDS_DYNAMIC_EX_HII,\r
- MODEL_PCD_DYNAMIC_EX_VPD : TAB_PCDS_DYNAMIC_EX_VPD,\r
- }\r
\r
# dict used to convert part of [Defines] to members of DscBuildData directly\r
_PROPERTY_ = {\r
self.WorkspaceDir = os.getenv("WORKSPACE") if os.getenv("WORKSPACE") else ""\r
self.DefaultStores = None\r
self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)\r
-\r
+ self.UpdatePcdTypeDict()\r
@property\r
def OutputPath(self):\r
if os.getenv("WORKSPACE"):\r
except:\r
EdkLogger.error("build", FORMAT_INVALID, "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile)\r
self._VpdToolGuid = Record[2]\r
+ elif Name == TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX:\r
+ if TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX not in gCommandLineDefines:\r
+ gCommandLineDefines[TAB_DSC_DEFINES_PCD_DYNAMIC_AS_DYNAMICEX] = Record[2].strip()\r
elif Name in self:\r
self[Name] = Record[2]\r
# set _Header to non-None in order to avoid database re-querying\r
# into ModuleBuildClassObject form for easier use for AutoGen.\r
#\r
class InfBuildData(ModuleBuildClassObject):\r
- # dict used to convert PCD type in database to string used by build tool\r
- _PCD_TYPE_STRING_ = {\r
- MODEL_PCD_FIXED_AT_BUILD : TAB_PCDS_FIXED_AT_BUILD,\r
- MODEL_PCD_PATCHABLE_IN_MODULE : TAB_PCDS_PATCHABLE_IN_MODULE,\r
- MODEL_PCD_FEATURE_FLAG : TAB_PCDS_FEATURE_FLAG,\r
- MODEL_PCD_DYNAMIC : TAB_PCDS_DYNAMIC,\r
- MODEL_PCD_DYNAMIC_DEFAULT : TAB_PCDS_DYNAMIC,\r
- MODEL_PCD_DYNAMIC_HII : TAB_PCDS_DYNAMIC_HII,\r
- MODEL_PCD_DYNAMIC_VPD : TAB_PCDS_DYNAMIC_VPD,\r
- MODEL_PCD_DYNAMIC_EX : TAB_PCDS_DYNAMIC_EX,\r
- MODEL_PCD_DYNAMIC_EX_DEFAULT : TAB_PCDS_DYNAMIC_EX,\r
- MODEL_PCD_DYNAMIC_EX_HII : TAB_PCDS_DYNAMIC_EX_HII,\r
- MODEL_PCD_DYNAMIC_EX_VPD : TAB_PCDS_DYNAMIC_EX_VPD,\r
- }\r
\r
# dict used to convert part of [Defines] to members of InfBuildData directly\r
_PROPERTY_ = {\r
self._PcdComments = None\r
self._BuildOptions = None\r
self._DependencyFileList = None\r
+ self.UpdatePcdTypeDict()\r
self.LibInstances = []\r
self.ReferenceModules = set()\r
\r