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