]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: change DscBuildData functions without need for self to staticmethod
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index d60d491e1099bd1ecd6b8926c3de7d046e5a3b3d..f50059551e2e6708c2a71903456be5c5c88b35d5 100644 (file)
@@ -95,6 +95,9 @@ MAKEROOT ?= $(EDK_TOOLS_PATH)/Source/C
 LIBS = -lCommon\r
 '''\r
 \r
+## regular expressions for finding decimal and hex numbers\r
+Pattern = re.compile('^[1-9]\d*|0$')\r
+HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')\r
 ## Regular expression for finding header file inclusions\r
 from AutoGen.GenMake import gIncludePattern\r
 \r
@@ -279,8 +282,6 @@ class DscBuildData(PlatformBuildClassObject):
     ## handle Override Path of Module\r
     def _HandleOverridePath(self):\r
         RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch]\r
-        Macros = self._Macros\r
-        Macros["EDK_SOURCE"] = GlobalData.gEcpSource\r
         for Record in RecordList:\r
             ModuleId = Record[6]\r
             LineNo = Record[7]\r
@@ -298,7 +299,7 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     ## Get current effective macros\r
     def _GetMacros(self):\r
-        if self.__Macros == None:\r
+        if self.__Macros is None:\r
             self.__Macros = {}\r
             self.__Macros.update(GlobalData.gPlatformDefines)\r
             self.__Macros.update(GlobalData.gGlobalDefines)\r
@@ -368,7 +369,7 @@ class DscBuildData(PlatformBuildClassObject):
             elif Name == TAB_DSC_DEFINES_BUILD_TARGETS:\r
                 self._BuildTargets = GetSplitValueList(Record[2])\r
             elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER:\r
-                if self._SkuName == None:\r
+                if self._SkuName is None:\r
                     self._SkuName = Record[2]\r
                 if GlobalData.gSKUID_CMD:\r
                     self._SkuName = GlobalData.gSKUID_CMD\r
@@ -427,76 +428,76 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     ## Retrieve platform name\r
     def _GetPlatformName(self):\r
-        if self._PlatformName == None:\r
-            if self._Header == None:\r
+        if self._PlatformName is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._PlatformName == None:\r
+            if self._PlatformName is None:\r
                 EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No PLATFORM_NAME", File=self.MetaFile)\r
         return self._PlatformName\r
 \r
     ## Retrieve file guid\r
     def _GetFileGuid(self):\r
-        if self._Guid == None:\r
-            if self._Header == None:\r
+        if self._Guid is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._Guid == None:\r
+            if self._Guid is None:\r
                 EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No PLATFORM_GUID", File=self.MetaFile)\r
         return self._Guid\r
 \r
     ## Retrieve platform version\r
     def _GetVersion(self):\r
-        if self._Version == None:\r
-            if self._Header == None:\r
+        if self._Version is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._Version == None:\r
+            if self._Version is None:\r
                 EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No PLATFORM_VERSION", File=self.MetaFile)\r
         return self._Version\r
 \r
     ## Retrieve platform description file version\r
     def _GetDscSpec(self):\r
-        if self._DscSpecification == None:\r
-            if self._Header == None:\r
+        if self._DscSpecification is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._DscSpecification == None:\r
+            if self._DscSpecification is None:\r
                 EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No DSC_SPECIFICATION", File=self.MetaFile)\r
         return self._DscSpecification\r
 \r
     ## Retrieve OUTPUT_DIRECTORY\r
     def _GetOutpuDir(self):\r
-        if self._OutputDirectory == None:\r
-            if self._Header == None:\r
+        if self._OutputDirectory is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._OutputDirectory == None:\r
+            if self._OutputDirectory is None:\r
                 self._OutputDirectory = os.path.join("Build", self._PlatformName)\r
         return self._OutputDirectory\r
 \r
     ## Retrieve SUPPORTED_ARCHITECTURES\r
     def _GetSupArch(self):\r
-        if self._SupArchList == None:\r
-            if self._Header == None:\r
+        if self._SupArchList is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._SupArchList == None:\r
+            if self._SupArchList is None:\r
                 EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No SUPPORTED_ARCHITECTURES", File=self.MetaFile)\r
         return self._SupArchList\r
 \r
     ## Retrieve BUILD_TARGETS\r
     def _GetBuildTarget(self):\r
-        if self._BuildTargets == None:\r
-            if self._Header == None:\r
+        if self._BuildTargets is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._BuildTargets == None:\r
+            if self._BuildTargets is None:\r
                 EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No BUILD_TARGETS", File=self.MetaFile)\r
         return self._BuildTargets\r
 \r
     def _GetPcdInfoFlag(self):\r
-        if self._PcdInfoFlag == None or self._PcdInfoFlag.upper() == 'FALSE':\r
+        if self._PcdInfoFlag is None or self._PcdInfoFlag.upper() == 'FALSE':\r
             return False\r
         elif self._PcdInfoFlag.upper() == 'TRUE':\r
             return True\r
         else:\r
             return False\r
     def _GetVarCheckFlag(self):\r
-        if self._VarCheckFlag == None or self._VarCheckFlag.upper() == 'FALSE':\r
+        if self._VarCheckFlag is None or self._VarCheckFlag.upper() == 'FALSE':\r
             return False\r
         elif self._VarCheckFlag.upper() == 'TRUE':\r
             return True\r
@@ -505,10 +506,10 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     # # Retrieve SKUID_IDENTIFIER\r
     def _GetSkuName(self):\r
-        if self._SkuName == None:\r
-            if self._Header == None:\r
+        if self._SkuName is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._SkuName == None:\r
+            if self._SkuName is None:\r
                 self._SkuName = 'DEFAULT'\r
         return self._SkuName\r
 \r
@@ -517,72 +518,72 @@ class DscBuildData(PlatformBuildClassObject):
         self._SkuName = Value\r
 \r
     def _GetFdfFile(self):\r
-        if self._FlashDefinition == None:\r
-            if self._Header == None:\r
+        if self._FlashDefinition is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._FlashDefinition == None:\r
+            if self._FlashDefinition is None:\r
                 self._FlashDefinition = ''\r
         return self._FlashDefinition\r
 \r
     def _GetPrebuild(self):\r
-        if self._Prebuild == None:\r
-            if self._Header == None:\r
+        if self._Prebuild is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._Prebuild == None:\r
+            if self._Prebuild is None:\r
                 self._Prebuild = ''\r
         return self._Prebuild\r
 \r
     def _GetPostbuild(self):\r
-        if self._Postbuild == None:\r
-            if self._Header == None:\r
+        if self._Postbuild is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._Postbuild == None:\r
+            if self._Postbuild is None:\r
                 self._Postbuild = ''\r
         return self._Postbuild\r
 \r
     ## Retrieve FLASH_DEFINITION\r
     def _GetBuildNumber(self):\r
-        if self._BuildNumber == None:\r
-            if self._Header == None:\r
+        if self._BuildNumber is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._BuildNumber == None:\r
+            if self._BuildNumber is None:\r
                 self._BuildNumber = ''\r
         return self._BuildNumber\r
 \r
     ## Retrieve MAKEFILE_NAME\r
     def _GetMakefileName(self):\r
-        if self._MakefileName == None:\r
-            if self._Header == None:\r
+        if self._MakefileName is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._MakefileName == None:\r
+            if self._MakefileName is None:\r
                 self._MakefileName = ''\r
         return self._MakefileName\r
 \r
     ## Retrieve BsBaseAddress\r
     def _GetBsBaseAddress(self):\r
-        if self._BsBaseAddress == None:\r
-            if self._Header == None:\r
+        if self._BsBaseAddress is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._BsBaseAddress == None:\r
+            if self._BsBaseAddress is None:\r
                 self._BsBaseAddress = ''\r
         return self._BsBaseAddress\r
 \r
     ## Retrieve RtBaseAddress\r
     def _GetRtBaseAddress(self):\r
-        if self._RtBaseAddress == None:\r
-            if self._Header == None:\r
+        if self._RtBaseAddress is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._RtBaseAddress == None:\r
+            if self._RtBaseAddress is None:\r
                 self._RtBaseAddress = ''\r
         return self._RtBaseAddress\r
 \r
     ## Retrieve the top address for the load fix address\r
     def _GetLoadFixAddress(self):\r
-        if self._LoadFixAddress == None:\r
-            if self._Header == None:\r
+        if self._LoadFixAddress is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
 \r
-            if self._LoadFixAddress == None:\r
+            if self._LoadFixAddress is None:\r
                 self._LoadFixAddress = self._Macros.get(TAB_FIX_LOAD_TOP_MEMORY_ADDRESS, '0')\r
 \r
             try:\r
@@ -608,34 +609,34 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     ## Retrieve RFCLanguage filter\r
     def _GetRFCLanguages(self):\r
-        if self._RFCLanguages == None:\r
-            if self._Header == None:\r
+        if self._RFCLanguages is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._RFCLanguages == None:\r
+            if self._RFCLanguages is None:\r
                 self._RFCLanguages = []\r
         return self._RFCLanguages\r
 \r
     ## Retrieve ISOLanguage filter\r
     def _GetISOLanguages(self):\r
-        if self._ISOLanguages == None:\r
-            if self._Header == None:\r
+        if self._ISOLanguages is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._ISOLanguages == None:\r
+            if self._ISOLanguages is None:\r
                 self._ISOLanguages = []\r
         return self._ISOLanguages\r
     ## Retrieve the GUID string for VPD tool\r
     def _GetVpdToolGuid(self):\r
-        if self._VpdToolGuid == None:\r
-            if self._Header == None:\r
+        if self._VpdToolGuid is None:\r
+            if self._Header is None:\r
                 self._GetHeaderInfo()\r
-            if self._VpdToolGuid == None:\r
+            if self._VpdToolGuid is None:\r
                 self._VpdToolGuid = ''\r
         return self._VpdToolGuid\r
 \r
     ## Retrieve [SkuIds] section information\r
     def _GetSkuIds(self):\r
-        if self._SkuIds == None:\r
-            self._SkuIds = sdict()\r
+        if self._SkuIds is None:\r
+            self._SkuIds = OrderedDict()\r
             RecordList = self._RawData[MODEL_EFI_SKU_ID, self._Arch]\r
             for Record in RecordList:\r
                 if Record[0] in [None, '']:\r
@@ -644,25 +645,26 @@ class DscBuildData(PlatformBuildClassObject):
                 if Record[1] in [None, '']:\r
                     EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name',\r
                                     File=self.MetaFile, Line=Record[-1])\r
-                Pattern = re.compile('^[1-9]\d*|0$')\r
-                HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')\r
-                if Pattern.match(Record[0]) == None and HexPattern.match(Record[0]) == None:\r
+                if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]):\r
                     EdkLogger.error('build', FORMAT_INVALID, "The format of the Sku ID number is invalid. It only support Integer and HexNumber",\r
                                     File=self.MetaFile, Line=Record[-1])\r
                 if not IsValidWord(Record[1]):\r
                     EdkLogger.error('build', FORMAT_INVALID, "The format of the Sku ID name is invalid. The correct format is '(a-zA-Z0-9_)(a-zA-Z0-9_-.)*'",\r
                                     File=self.MetaFile, Line=Record[-1])\r
-                self._SkuIds[Record[1].upper()] = (str(self.ToInt(Record[0])), Record[1].upper(), Record[2].upper())\r
+                self._SkuIds[Record[1].upper()] = (str(DscBuildData.ToInt(Record[0])), Record[1].upper(), Record[2].upper())\r
             if 'DEFAULT' not in self._SkuIds:\r
                 self._SkuIds['DEFAULT'] = ("0","DEFAULT","DEFAULT")\r
             if 'COMMON' not in self._SkuIds:\r
                 self._SkuIds['COMMON'] = ("0","DEFAULT","DEFAULT")\r
         return self._SkuIds\r
-    def ToInt(self,intstr):\r
+\r
+    @staticmethod\r
+    def ToInt(intstr):\r
         return int(intstr,16) if intstr.upper().startswith("0X") else int(intstr)\r
+\r
     def _GetDefaultStores(self):\r
-        if self.DefaultStores == None:\r
-            self.DefaultStores = sdict()\r
+        if self.DefaultStores is None:\r
+            self.DefaultStores = OrderedDict()\r
             RecordList = self._RawData[MODEL_EFI_DEFAULT_STORES, self._Arch]\r
             for Record in RecordList:\r
                 if Record[0] in [None, '']:\r
@@ -671,15 +673,13 @@ class DscBuildData(PlatformBuildClassObject):
                 if Record[1] in [None, '']:\r
                     EdkLogger.error('build', FORMAT_INVALID, 'No DefaultStores ID name',\r
                                     File=self.MetaFile, Line=Record[-1])\r
-                Pattern = re.compile('^[1-9]\d*|0$')\r
-                HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$')\r
-                if Pattern.match(Record[0]) == None and HexPattern.match(Record[0]) == None:\r
+                if not Pattern.match(Record[0]) and not HexPattern.match(Record[0]):\r
                     EdkLogger.error('build', FORMAT_INVALID, "The format of the DefaultStores ID number is invalid. It only support Integer and HexNumber",\r
                                     File=self.MetaFile, Line=Record[-1])\r
                 if not IsValidWord(Record[1]):\r
                     EdkLogger.error('build', FORMAT_INVALID, "The format of the DefaultStores ID name is invalid. The correct format is '(a-zA-Z0-9_)(a-zA-Z0-9_-.)*'",\r
                                     File=self.MetaFile, Line=Record[-1])\r
-                self.DefaultStores[Record[1].upper()] = (self.ToInt(Record[0]),Record[1].upper())\r
+                self.DefaultStores[Record[1].upper()] = (DscBuildData.ToInt(Record[0]),Record[1].upper())\r
             if TAB_DEFAULT_STORES_DEFAULT not in self.DefaultStores:\r
                 self.DefaultStores[TAB_DEFAULT_STORES_DEFAULT] = (0,TAB_DEFAULT_STORES_DEFAULT)\r
             GlobalData.gDefaultStores = self.DefaultStores.keys()\r
@@ -689,10 +689,10 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     ## Retrieve [Components] section information\r
     def _GetModules(self):\r
-        if self._Modules != None:\r
+        if self._Modules is not None:\r
             return self._Modules\r
 \r
-        self._Modules = sdict()\r
+        self._Modules = OrderedDict()\r
         RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch]\r
         Macros = self._Macros\r
         Macros["EDK_SOURCE"] = GlobalData.gEcpSource\r
@@ -788,13 +788,13 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     ## Retrieve all possible library instances used in this platform\r
     def _GetLibraryInstances(self):\r
-        if self._LibraryInstances == None:\r
+        if self._LibraryInstances is None:\r
             self._GetLibraryClasses()\r
         return self._LibraryInstances\r
 \r
     ## Retrieve [LibraryClasses] information\r
     def _GetLibraryClasses(self):\r
-        if self._LibraryClasses == None:\r
+        if self._LibraryClasses is None:\r
             self._LibraryInstances = []\r
             #\r
             # tdict is a special dict kind of type, used for selecting correct\r
@@ -832,7 +832,7 @@ class DscBuildData(PlatformBuildClassObject):
                 # try all possible module types\r
                 for ModuleType in SUP_MODULE_LIST:\r
                     LibraryInstance = LibraryClassDict[self._Arch, ModuleType, LibraryClass]\r
-                    if LibraryInstance == None:\r
+                    if LibraryInstance is None:\r
                         continue\r
                     self._LibraryClasses[LibraryClass, ModuleType] = LibraryInstance\r
 \r
@@ -859,7 +859,7 @@ class DscBuildData(PlatformBuildClassObject):
         return self._LibraryClasses\r
 \r
     def _ValidatePcd(self, PcdCName, TokenSpaceGuid, Setting, PcdType, LineNo):\r
-        if self._DecPcds == None:\r
+        if self._DecPcds is None:\r
 \r
             FdfInfList = []\r
             if GlobalData.gFdfParser:\r
@@ -947,10 +947,10 @@ class DscBuildData(PlatformBuildClassObject):
         for pcd in HiiPcd:\r
             for skuid in pcd.SkuInfoList:\r
                 skuobj = pcd.SkuInfoList.get(skuid)\r
-                if "STANDARD" not in skuobj.DefaultStoreDict:\r
+                if TAB_DEFAULT_STORES_DEFAULT not in skuobj.DefaultStoreDict:\r
                     PcdDefaultStoreSet = set([defaultstorename  for defaultstorename in skuobj.DefaultStoreDict])\r
                     mindefaultstorename = DefaultStoreMgr.GetMin(PcdDefaultStoreSet)\r
-                    skuobj.DefaultStoreDict['STANDARD'] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename])\r
+                    skuobj.DefaultStoreDict[TAB_DEFAULT_STORES_DEFAULT] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename])\r
         return Pcds\r
 \r
     def RecoverCommandLinePcd(self):\r
@@ -1036,9 +1036,9 @@ class DscBuildData(PlatformBuildClassObject):
                         EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s is not found in the DEC file." % (DisplayName))\r
                 pcdvalue = pcdvalue.replace("\\\\\\'", '\\\\\\"').replace('\\\'', '\'').replace('\\\\\\"', "\\'")\r
                 if FieldName:\r
-                    pcdvalue = self.HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, pcdvalue, PcdDatumType, self._GuidDict, FieldName)\r
+                    pcdvalue = DscBuildData.HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, pcdvalue, PcdDatumType, self._GuidDict, FieldName)\r
                 else:\r
-                    pcdvalue = self.HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, pcdvalue, PcdDatumType, self._GuidDict)\r
+                    pcdvalue = DscBuildData.HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, pcdvalue, PcdDatumType, self._GuidDict)\r
                     IsValid, Cause = CheckPcdDatum(PcdDatumType, pcdvalue)\r
                     if not IsValid:\r
                         EdkLogger.error("build", FORMAT_INVALID, Cause, ExtraData="%s.%s" % (TokenSpaceGuidCName, TokenCName))\r
@@ -1052,7 +1052,8 @@ class DscBuildData(PlatformBuildClassObject):
                         if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName =="":\r
                             PcdItem.DefaultValue = pcdvalue\r
 \r
-    def HandleFlexiblePcd(self, TokenSpaceGuidCName, TokenCName, PcdValue, PcdDatumType, GuidDict, FieldName=''):\r
+    @staticmethod\r
+    def HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, PcdValue, PcdDatumType, GuidDict, FieldName=''):\r
         if FieldName:\r
             IsArray = False\r
             TokenCName += '.' + FieldName\r
@@ -1121,8 +1122,8 @@ class DscBuildData(PlatformBuildClassObject):
 \r
     ## Retrieve all PCD settings in platform\r
     def _GetPcds(self):\r
-        if self._Pcds == None:\r
-            self._Pcds = sdict()\r
+        if self._Pcds is None:\r
+            self._Pcds = OrderedDict()\r
             self.__ParsePcdFromCommandLine()\r
             self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD))\r
             self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE))\r
@@ -1143,21 +1144,10 @@ class DscBuildData(PlatformBuildClassObject):
             self.RecoverCommandLinePcd()\r
         return self._Pcds\r
 \r
-    def _dumpPcdInfo(self,Pcds):\r
-        for pcd in Pcds:\r
-            pcdobj = Pcds[pcd]\r
-            if not pcdobj.TokenCName.startswith("Test"):\r
-                continue\r
-            for skuid in pcdobj.SkuInfoList:\r
-                if pcdobj.Type in (self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII],self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]):\r
-                    for storename in pcdobj.SkuInfoList[skuid].DefaultStoreDict:\r
-                        print "PcdCName: %s, SkuName: %s, StoreName: %s, Value: %s" % (".".join((pcdobj.TokenSpaceGuidCName, pcdobj.TokenCName)), skuid,storename,str(pcdobj.SkuInfoList[skuid].DefaultStoreDict[storename]))\r
-                else:\r
-                    print "PcdCName: %s, SkuName: %s, Value: %s" % (".".join((pcdobj.TokenSpaceGuidCName, pcdobj.TokenCName)), skuid,str(pcdobj.SkuInfoList[skuid].DefaultValue))\r
     ## Retrieve [BuildOptions]\r
     def _GetBuildOptions(self):\r
-        if self._BuildOptions == None:\r
-            self._BuildOptions = sdict()\r
+        if self._BuildOptions is None:\r
+            self._BuildOptions = OrderedDict()\r
             #\r
             # Retrieve build option for EDKII and EDK style module\r
             #\r
@@ -1178,10 +1168,10 @@ class DscBuildData(PlatformBuildClassObject):
         return self._BuildOptions\r
 \r
     def GetBuildOptionsByModuleType(self, Edk, ModuleType):\r
-        if self._ModuleTypeOptions == None:\r
-            self._ModuleTypeOptions = sdict()\r
+        if self._ModuleTypeOptions is None:\r
+            self._ModuleTypeOptions = OrderedDict()\r
         if (Edk, ModuleType) not in self._ModuleTypeOptions:\r
-            options = sdict()\r
+            options = OrderedDict()\r
             self._ModuleTypeOptions[Edk, ModuleType] = options\r
             DriverType = '%s.%s' % (Edk, ModuleType)\r
             CommonDriverType = '%s.%s' % ('COMMON', ModuleType)\r
@@ -1205,7 +1195,9 @@ class DscBuildData(PlatformBuildClassObject):
             structure_pcd_data[(item[0],item[1])].append(item)\r
 \r
         return structure_pcd_data\r
-    def OverrideByFdfComm(self,StruPcds):\r
+\r
+    @staticmethod\r
+    def OverrideByFdfComm(StruPcds):\r
         StructurePcdInCom = OrderedDict()\r
         for item in GlobalData.BuildOptionPcd:\r
             if len(item) == 5 and (item[1],item[0]) in StruPcds:\r
@@ -1225,6 +1217,7 @@ class DscBuildData(PlatformBuildClassObject):
                 Pcd.PcdFieldValueFromComm[field][1] = FieldValues[field][1][0]\r
                 Pcd.PcdFieldValueFromComm[field][2] = FieldValues[field][1][1]\r
         return StruPcds\r
+\r
     def OverrideByFdfCommOverAll(self,AllPcds):\r
         def CheckStructureInComm(commpcds):\r
             if not commpcds:\r
@@ -1254,6 +1247,14 @@ class DscBuildData(PlatformBuildClassObject):
                             SkuInfo.HiiDefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName,Pcd.TokenCName)][0]\r
                             for defaultstore in SkuInfo.DefaultStoreDict:\r
                                 SkuInfo.DefaultStoreDict[defaultstore] = NoFiledValues[(Pcd.TokenSpaceGuidCName,Pcd.TokenCName)][0]\r
+                    if Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII]]:\r
+                        if Pcd.DatumType == "VOID*":\r
+                            if not Pcd.MaxDatumSize:\r
+                                Pcd.MaxDatumSize = '0'\r
+                            CurrentSize = int(Pcd.MaxDatumSize,16) if Pcd.MaxDatumSize.upper().startswith("0X") else int(Pcd.MaxDatumSize)\r
+                            OptionSize = len((StringToArray(Pcd.PcdValueFromComm)).split(","))\r
+                            MaxSize = max(CurrentSize, OptionSize)\r
+                            Pcd.MaxDatumSize = str(MaxSize)\r
             else:\r
                 PcdInDec = self.DecPcds.get((Name,Guid))\r
                 if PcdInDec:\r
@@ -1317,7 +1318,7 @@ class DscBuildData(PlatformBuildClassObject):
                         str_pcd_obj_str.DefaultFromDSC = {skuname:{defaultstore: str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, str_pcd_obj.SkuInfoList[skuname].DefaultValue) for defaultstore in DefaultStores} for skuname in str_pcd_obj.SkuInfoList}\r
                 for str_pcd_data in StrPcdSet[str_pcd]:\r
                     if str_pcd_data[3] in SkuIds:\r
-                        str_pcd_obj_str.AddOverrideValue(str_pcd_data[2], str(str_pcd_data[6]), 'DEFAULT' if str_pcd_data[3] == 'COMMON' else str_pcd_data[3],'STANDARD' if str_pcd_data[4] == 'COMMON' else str_pcd_data[4], self.MetaFile.File if self.WorkspaceDir not in self.MetaFile.File else self.MetaFile.File[len(self.WorkspaceDir) if self.WorkspaceDir.endswith(os.path.sep) else len(self.WorkspaceDir)+1:],LineNo=str_pcd_data[5])\r
+                        str_pcd_obj_str.AddOverrideValue(str_pcd_data[2], str(str_pcd_data[6]), 'DEFAULT' if str_pcd_data[3] == 'COMMON' else str_pcd_data[3],TAB_DEFAULT_STORES_DEFAULT if str_pcd_data[4] == 'COMMON' else str_pcd_data[4], self.MetaFile.File if self.WorkspaceDir not in self.MetaFile.File else self.MetaFile.File[len(self.WorkspaceDir) if self.WorkspaceDir.endswith(os.path.sep) else len(self.WorkspaceDir)+1:],LineNo=str_pcd_data[5])\r
                 S_pcd_set[str_pcd[1], str_pcd[0]] = str_pcd_obj_str\r
             else:\r
                 EdkLogger.error('build', PARSER_ERROR,\r
@@ -1351,7 +1352,7 @@ class DscBuildData(PlatformBuildClassObject):
                             NoDefault = True\r
                             break\r
                         nextskuid = self.SkuIdMgr.GetNextSkuId(nextskuid)\r
-                    stru_pcd.SkuOverrideValues[skuid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid]) if not NoDefault else copy.deepcopy({defaultstorename: stru_pcd.DefaultValues for defaultstorename in DefaultStores} if DefaultStores else {'STANDARD':stru_pcd.DefaultValues})\r
+                    stru_pcd.SkuOverrideValues[skuid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid]) if not NoDefault else copy.deepcopy({defaultstorename: stru_pcd.DefaultValues for defaultstorename in DefaultStores} if DefaultStores else {TAB_DEFAULT_STORES_DEFAULT:stru_pcd.DefaultValues})\r
                     if not NoDefault:\r
                         stru_pcd.ValueChain[(skuid,'')]= (nextskuid,'')\r
             if stru_pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
@@ -1373,7 +1374,7 @@ class DscBuildData(PlatformBuildClassObject):
                         if defaultstoreid not in stru_pcd.SkuOverrideValues[skuid]:\r
                             stru_pcd.SkuOverrideValues[skuid][defaultstoreid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid][mindefaultstorename])\r
                             stru_pcd.ValueChain[(skuid,defaultstoreid)]= (nextskuid,mindefaultstorename)\r
-        S_pcd_set = self.OverrideByFdfComm(S_pcd_set)\r
+        S_pcd_set = DscBuildData.OverrideByFdfComm(S_pcd_set)\r
         Str_Pcd_Values = self.GenerateByteArrayValue(S_pcd_set)\r
         if Str_Pcd_Values:\r
             for (skuname,StoreName,PcdGuid,PcdName,PcdValue) in Str_Pcd_Values:\r
@@ -1438,7 +1439,7 @@ class DscBuildData(PlatformBuildClassObject):
     #   @retval a dict object contains settings of given PCD type\r
     #\r
     def _GetPcd(self, Type):\r
-        Pcds = sdict()\r
+        Pcds = OrderedDict()\r
         #\r
         # tdict is a special dict kind of type, used for selecting correct\r
         # PCD settings for certain ARCH\r
@@ -1449,7 +1450,7 @@ class DscBuildData(PlatformBuildClassObject):
         PcdSet = set()\r
         # Find out all possible PCD candidates for self._Arch\r
         RecordList = self._RawData[Type, self._Arch]\r
-        PcdValueDict = sdict()\r
+        PcdValueDict = OrderedDict()\r
         for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4,Dummy5 in RecordList:\r
             SkuName = SkuName.upper()\r
             SkuName = 'DEFAULT' if SkuName == 'COMMON' else SkuName\r
@@ -1463,7 +1464,7 @@ class DscBuildData(PlatformBuildClassObject):
 \r
         for PcdCName, TokenSpaceGuid, SkuName, Dummy4 in PcdSet:\r
             Setting = PcdDict[self._Arch, PcdCName, TokenSpaceGuid, SkuName]\r
-            if Setting == None:\r
+            if Setting is None:\r
                 continue\r
             PcdValue, DatumType, MaxDatumSize = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
             if (PcdCName, TokenSpaceGuid) in PcdValueDict:\r
@@ -1501,26 +1502,6 @@ class DscBuildData(PlatformBuildClassObject):
 \r
         return Pcds\r
 \r
-    def __UNICODE2OCTList(self,Value):\r
-        Value = Value.strip()\r
-        Value = Value[2:-1]\r
-        List = []\r
-        for Item in Value:\r
-            Temp = '%04X' % ord(Item)\r
-            List.append('0x' + Temp[2:4])\r
-            List.append('0x' + Temp[0:2])\r
-        List.append('0x00')\r
-        List.append('0x00')\r
-        return List\r
-    def __STRING2OCTList(self,Value):\r
-        OCTList = []\r
-        Value = Value.strip('"')\r
-        for char in Value:\r
-            Temp = '%02X' % ord(char)\r
-            OCTList.append('0x' + Temp)\r
-        OCTList.append('0x00')\r
-        return OCTList\r
-\r
     def GetStructurePcdMaxSize(self, str_pcd):\r
         pcd_default_value = str_pcd.DefaultValue\r
         sku_values = [skuobj.HiiDefaultValue if str_pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]] else skuobj.DefaultValue for skuobj in str_pcd.SkuInfoList.values()]\r
@@ -1545,7 +1526,8 @@ class DscBuildData(PlatformBuildClassObject):
 \r
         return str(max([pcd_size for pcd_size in [get_length(item) for item in sku_values]]))\r
 \r
-    def ExecuteCommand (self, Command):\r
+    @staticmethod\r
+    def ExecuteCommand (Command):\r
         try:\r
             Process = subprocess.Popen(Command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
         except:\r
@@ -1553,7 +1535,8 @@ class DscBuildData(PlatformBuildClassObject):
         Result = Process.communicate()\r
         return Process.returncode, Result[0], Result[1]\r
 \r
-    def IntToCString(self, Value, ValueSize):\r
+    @staticmethod\r
+    def IntToCString(Value, ValueSize):\r
         Result = '"'\r
         if not isinstance (Value, str):\r
             for Index in range(0, ValueSize):\r
@@ -1562,7 +1545,8 @@ class DscBuildData(PlatformBuildClassObject):
         Result = Result + '"'\r
         return Result\r
 \r
-    def GetPcdMaxSize(self,Pcd):\r
+    @staticmethod\r
+    def GetPcdMaxSize(Pcd):\r
         MaxSize = int(Pcd.MaxDatumSize,10) if Pcd.MaxDatumSize else 0\r
         if Pcd.DatumType not in ['BOOLEAN','UINT8','UINT16','UINT32','UINT64']:\r
             if Pcd.PcdValueFromComm:\r
@@ -1583,6 +1567,7 @@ class DscBuildData(PlatformBuildClassObject):
         elif Pcd.DatumType  == 'UINT64':\r
             MaxSize = 8\r
         return MaxSize\r
+\r
     def GenerateSizeFunction(self,Pcd):\r
         CApp = "// Default Value in Dec \n"\r
         CApp = CApp + "void Cal_%s_%s_Size(UINT32 *Size){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
@@ -1665,13 +1650,16 @@ class DscBuildData(PlatformBuildClassObject):
                 while '[' in FieldName:\r
                     FieldName = FieldName.rsplit('[', 1)[0]\r
                     CApp = CApp + '  __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, Pcd.PcdFieldValueFromComm[FieldName_ori][1], Pcd.PcdFieldValueFromComm[FieldName_ori][2], Pcd.PcdFieldValueFromComm[FieldName_ori][0])\r
-        CApp = CApp + "  *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (self.GetPcdMaxSize(Pcd),self.GetPcdMaxSize(Pcd),self.GetPcdMaxSize(Pcd))\r
+        CApp = CApp + "  *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd),DscBuildData.GetPcdMaxSize(Pcd))\r
         CApp = CApp + "}\n"\r
         return CApp\r
-    def GenerateSizeStatments(self,Pcd):\r
+\r
+    @staticmethod\r
+    def GenerateSizeStatments(Pcd):\r
         CApp = '  Size = sizeof(%s);\n' % (Pcd.DatumType)\r
         CApp = CApp + '  Cal_%s_%s_Size(&Size);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
         return CApp\r
+\r
     def GenerateDefaultValueAssignFunction(self,Pcd):\r
         CApp = "// Default value in Dec \n"\r
         CApp = CApp + "void Assign_%s_%s_Default_Value(%s *Pcd){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType)\r
@@ -1693,7 +1681,7 @@ class DscBuildData(PlatformBuildClassObject):
         #\r
         # Use memcpy() to copy value into field\r
         #\r
-            CApp = CApp + '  Value     = %s; // From DEC Default Value %s\n' % (self.IntToCString(Value, ValueSize), Pcd.DefaultValueFromDec)\r
+            CApp = CApp + '  Value     = %s; // From DEC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultValueFromDec)\r
             CApp = CApp + '  memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
         for FieldList in [Pcd.DefaultValues]:\r
             if not FieldList:\r
@@ -1718,7 +1706,7 @@ class DscBuildData(PlatformBuildClassObject):
                     # Use memcpy() to copy value into field\r
                     #\r
                     CApp = CApp + '  FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.DatumType, FieldName)\r
-                    CApp = CApp + '  Value     = %s; // From %s Line %d Value %s\n' % (self.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
+                    CApp = CApp + '  Value     = %s; // From %s Line %d Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
                     CApp = CApp + '  memcpy (&Pcd->%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (FieldName, ValueSize, ValueSize)\r
                 else:\r
                     if ValueSize > 4:\r
@@ -1727,19 +1715,22 @@ class DscBuildData(PlatformBuildClassObject):
                         CApp = CApp + '  Pcd->%s = %d; // From %s Line %d Value %s\n' % (FieldName, Value, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
         CApp = CApp + "}\n"\r
         return CApp\r
-    def GenerateDefaultValueAssignStatement(self,Pcd):\r
+\r
+    @staticmethod\r
+    def GenerateDefaultValueAssignStatement(Pcd):\r
         CApp = '  Assign_%s_%s_Default_Value(Pcd);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
         return CApp\r
+\r
     def GenerateInitValueFunction(self,Pcd,SkuName,DefaultStoreName):\r
         CApp = "// Value in Dsc for Sku: %s, DefaultStore %s\n" % (SkuName,DefaultStoreName)\r
         CApp = CApp + "void Assign_%s_%s_%s_%s_Value(%s *Pcd){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName,DefaultStoreName,Pcd.DatumType)\r
         CApp = CApp + '  UINT32  FieldSize;\n'\r
         CApp = CApp + '  CHAR8   *Value;\n'\r
 \r
-        CApp = CApp + "// SkuName: %s,  DefaultStoreName: %s \n" % ('DEFAULT', 'STANDARD')\r
+        CApp = CApp + "// SkuName: %s,  DefaultStoreName: %s \n" % ('DEFAULT', TAB_DEFAULT_STORES_DEFAULT)\r
         inherit_OverrideValues = Pcd.SkuOverrideValues[SkuName]\r
-        if (SkuName,DefaultStoreName) == ('DEFAULT','STANDARD'):\r
-            pcddefaultvalue = Pcd.DefaultFromDSC.get('DEFAULT',{}).get('STANDARD', Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue\r
+        if (SkuName,DefaultStoreName) == ('DEFAULT',TAB_DEFAULT_STORES_DEFAULT):\r
+            pcddefaultvalue = Pcd.DefaultFromDSC.get('DEFAULT',{}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue\r
         else:\r
             if not Pcd.DscRawValue:\r
                 # handle the case that structure pcd is not appear in DSC\r
@@ -1758,14 +1749,14 @@ class DscBuildData(PlatformBuildClassObject):
                                         (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldList))\r
                 Value, ValueSize = ParseFieldValue (FieldList)\r
 \r
-                if (SkuName,DefaultStoreName) == ('DEFAULT','STANDARD'):\r
+                if (SkuName,DefaultStoreName) == ('DEFAULT',TAB_DEFAULT_STORES_DEFAULT):\r
                     if isinstance(Value, str):\r
-                        CApp = CApp + '  Pcd = %s; // From DSC Default Value %s\n' % (Value, Pcd.DefaultFromDSC.get('DEFAULT',{}).get('STANDARD', Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
+                        CApp = CApp + '  Pcd = %s; // From DSC Default Value %s\n' % (Value, Pcd.DefaultFromDSC.get('DEFAULT',{}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
                     elif IsArray:\r
                     #\r
                     # Use memcpy() to copy value into field\r
                     #\r
-                        CApp = CApp + '  Value     = %s; // From DSC Default Value %s\n' % (self.IntToCString(Value, ValueSize), Pcd.DefaultFromDSC.get('DEFAULT',{}).get('STANDARD', Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
+                        CApp = CApp + '  Value     = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultFromDSC.get('DEFAULT',{}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
                         CApp = CApp + '  memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
                 else:\r
                     if isinstance(Value, str):\r
@@ -1774,10 +1765,10 @@ class DscBuildData(PlatformBuildClassObject):
                     #\r
                     # Use memcpy() to copy value into field\r
                     #\r
-                        CApp = CApp + '  Value     = %s; // From DSC Default Value %s\n' % (self.IntToCString(Value, ValueSize), Pcd.DscRawValue.get(SkuName,{}).get(DefaultStoreName))\r
+                        CApp = CApp + '  Value     = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DscRawValue.get(SkuName,{}).get(DefaultStoreName))\r
                         CApp = CApp + '  memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
                 continue\r
-            if (SkuName,DefaultStoreName) == ('DEFAULT','STANDARD') or (( (SkuName,'') not in Pcd.ValueChain) and ( (SkuName,DefaultStoreName) not in Pcd.ValueChain )):\r
+            if (SkuName,DefaultStoreName) == ('DEFAULT',TAB_DEFAULT_STORES_DEFAULT) or (( (SkuName,'') not in Pcd.ValueChain) and ( (SkuName,DefaultStoreName) not in Pcd.ValueChain )):\r
                 for FieldName in FieldList:\r
                     IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
                     if IsArray:\r
@@ -1797,7 +1788,7 @@ class DscBuildData(PlatformBuildClassObject):
                     # Use memcpy() to copy value into field\r
                     #\r
                         CApp = CApp + '  FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.DatumType, FieldName)\r
-                        CApp = CApp + '  Value     = %s; // From %s Line %d Value %s\n' % (self.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
+                        CApp = CApp + '  Value     = %s; // From %s Line %d Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
                         CApp = CApp + '  memcpy (&Pcd->%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (FieldName, ValueSize, ValueSize)\r
                     else:\r
                         if ValueSize > 4:\r
@@ -1806,9 +1797,12 @@ class DscBuildData(PlatformBuildClassObject):
                             CApp = CApp + '  Pcd->%s = %d; // From %s Line %d Value %s\n' % (FieldName, Value, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
         CApp = CApp + "}\n"\r
         return CApp\r
-    def GenerateInitValueStatement(self,Pcd,SkuName,DefaultStoreName):\r
+\r
+    @staticmethod\r
+    def GenerateInitValueStatement(Pcd,SkuName,DefaultStoreName):\r
         CApp = '  Assign_%s_%s_%s_%s_Value(Pcd);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName,DefaultStoreName)\r
         return CApp\r
+\r
     def GenerateCommandLineValue(self,Pcd):\r
         CApp = "// Value in CommandLine\n"\r
         CApp = CApp + "void Assign_%s_%s_CommandLine_Value(%s *Pcd){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType)\r
@@ -1835,7 +1829,7 @@ class DscBuildData(PlatformBuildClassObject):
                 #\r
                 # Use memcpy() to copy value into field\r
                 #\r
-                    CApp = CApp + '  Value     = %s; // From Command Line.\n' % (self.IntToCString(Value, ValueSize))\r
+                    CApp = CApp + '  Value     = %s; // From Command Line.\n' % (DscBuildData.IntToCString(Value, ValueSize))\r
                     CApp = CApp + '  memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
                 continue\r
             for FieldName in FieldList:\r
@@ -1859,7 +1853,7 @@ class DscBuildData(PlatformBuildClassObject):
                 # Use memcpy() to copy value into field\r
                 #\r
                     CApp = CApp + '  FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.DatumType, FieldName)\r
-                    CApp = CApp + '  Value     = %s; // From %s Line %d Value %s\n' % (self.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
+                    CApp = CApp + '  Value     = %s; // From %s Line %d Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
                     CApp = CApp + '  memcpy (&Pcd->%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (FieldName, ValueSize, ValueSize)\r
                 else:\r
                     if ValueSize > 4:\r
@@ -1868,9 +1862,12 @@ class DscBuildData(PlatformBuildClassObject):
                         CApp = CApp + '  Pcd->%s = %d; // From %s Line %d Value %s\n' % (FieldName, Value, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
         CApp = CApp + "}\n"\r
         return CApp\r
-    def GenerateCommandLineValueStatement(self,Pcd):\r
+\r
+    @staticmethod\r
+    def GenerateCommandLineValueStatement(Pcd):\r
         CApp = '  Assign_%s_%s_CommandLine_Value(Pcd);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
         return CApp\r
+\r
     def GenerateInitializeFunc(self, SkuName, DefaultStore, Pcd, InitByteValue, CApp):\r
         OverrideValues = {DefaultStore:""}\r
         if Pcd.SkuOverrideValues:\r
@@ -1910,7 +1907,7 @@ class DscBuildData(PlatformBuildClassObject):
             # in a structure.  The size formula for this case is:\r
             # OFFSET_OF(FlexbleArrayField) + sizeof(FlexibleArray[0]) * (HighestIndex + 1)\r
             #\r
-            CApp = CApp + self.GenerateSizeStatments(Pcd)\r
+            CApp = CApp + DscBuildData.GenerateSizeStatments(Pcd)\r
 \r
             #\r
             # Allocate and zero buffer for the PCD\r
@@ -1929,20 +1926,20 @@ class DscBuildData(PlatformBuildClassObject):
             #\r
             # Assign field values in PCD\r
             #\r
-            CApp = CApp + self.GenerateDefaultValueAssignStatement(Pcd)\r
+            CApp = CApp + DscBuildData.GenerateDefaultValueAssignStatement(Pcd)\r
             if Pcd.Type not in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
                         self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
                 for skuname in self.SkuIdMgr.GetSkuChain(SkuName):\r
-                    storeset = [DefaultStoreName] if DefaultStoreName == 'STANDARD' else ['STANDARD', DefaultStoreName]\r
+                    storeset = [DefaultStoreName] if DefaultStoreName == TAB_DEFAULT_STORES_DEFAULT else [TAB_DEFAULT_STORES_DEFAULT, DefaultStoreName]\r
                     for defaultstorenameitem in storeset:\r
                         CApp = CApp + "// SkuName: %s,  DefaultStoreName: %s \n" % (skuname, defaultstorenameitem)\r
-                        CApp = CApp + self.GenerateInitValueStatement(Pcd,skuname,defaultstorenameitem)\r
+                        CApp = CApp + DscBuildData.GenerateInitValueStatement(Pcd,skuname,defaultstorenameitem)\r
                     if skuname == SkuName:\r
                         break\r
             else:\r
                 CApp = CApp + "// SkuName: %s,  DefaultStoreName: STANDARD \n" % self.SkuIdMgr.SystemSkuId\r
-                CApp = CApp + self.GenerateInitValueStatement(Pcd,self.SkuIdMgr.SystemSkuId,"STANDARD")\r
-            CApp = CApp + self.GenerateCommandLineValueStatement(Pcd)\r
+                CApp = CApp + DscBuildData.GenerateInitValueStatement(Pcd,self.SkuIdMgr.SystemSkuId,TAB_DEFAULT_STORES_DEFAULT)\r
+            CApp = CApp + DscBuildData.GenerateCommandLineValueStatement(Pcd)\r
             #\r
             # Set new PCD value and size\r
             #\r
@@ -1983,7 +1980,7 @@ class DscBuildData(PlatformBuildClassObject):
             CApp = CApp + self.GenerateCommandLineValue(Pcd)\r
             if not Pcd.SkuOverrideValues or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
                         self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
-                CApp = CApp + self.GenerateInitValueFunction(Pcd,self.SkuIdMgr.SystemSkuId, 'STANDARD')\r
+                CApp = CApp + self.GenerateInitValueFunction(Pcd,self.SkuIdMgr.SystemSkuId, TAB_DEFAULT_STORES_DEFAULT)\r
             else:\r
                 for SkuName in self.SkuIdMgr.SkuOverrideOrder():\r
                     if SkuName not in Pcd.SkuOverrideValues:\r
@@ -1992,7 +1989,7 @@ class DscBuildData(PlatformBuildClassObject):
                         CApp = CApp + self.GenerateInitValueFunction(Pcd,SkuName,DefaultStoreName)\r
             if not Pcd.SkuOverrideValues or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
                         self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
-                InitByteValue, CApp = self.GenerateInitializeFunc(self.SkuIdMgr.SystemSkuId, 'STANDARD', Pcd, InitByteValue, CApp)\r
+                InitByteValue, CApp = self.GenerateInitializeFunc(self.SkuIdMgr.SystemSkuId, TAB_DEFAULT_STORES_DEFAULT, Pcd, InitByteValue, CApp)\r
             else:\r
                 for SkuName in self.SkuIdMgr.SkuOverrideOrder():\r
                     if SkuName not in Pcd.SkuOverrideValues:\r
@@ -2008,7 +2005,7 @@ class DscBuildData(PlatformBuildClassObject):
         CApp = CApp + '{\n'\r
         for Pcd in StructuredPcds.values():\r
             if not Pcd.SkuOverrideValues or Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
-                CApp = CApp + '  Initialize_%s_%s_%s_%s();\n' % (self.SkuIdMgr.SystemSkuId, 'STANDARD', Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
+                CApp = CApp + '  Initialize_%s_%s_%s_%s();\n' % (self.SkuIdMgr.SystemSkuId, TAB_DEFAULT_STORES_DEFAULT, Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
             else:\r
                 for SkuName in self.SkuIdMgr.SkuOverrideOrder():\r
                     if SkuName not in Pcd.SkuOverrideValues:\r
@@ -2039,7 +2036,9 @@ class DscBuildData(PlatformBuildClassObject):
                 continue\r
             if Cache.Includes:\r
                 if str(Cache.MetaFile.Path) not in PlatformInc:\r
-                    PlatformInc[str(Cache.MetaFile.Path)] = Cache.CommonIncludes\r
+                    PlatformInc[str(Cache.MetaFile.Path)] = []\r
+                    PlatformInc[str(Cache.MetaFile.Path)].append (os.path.dirname(Cache.MetaFile.Path))\r
+                    PlatformInc[str(Cache.MetaFile.Path)].extend (Cache.CommonIncludes)\r
 \r
         PcdDependDEC = []\r
         for Pcd in StructuredPcds.values():\r
@@ -2135,11 +2134,11 @@ class DscBuildData(PlatformBuildClassObject):
         Messages = ''\r
         if sys.platform == "win32":\r
             MakeCommand = 'nmake -f %s' % (MakeFileName)\r
-            returncode, StdOut, StdErr = self.ExecuteCommand (MakeCommand)\r
+            returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (MakeCommand)\r
             Messages = StdOut\r
         else:\r
             MakeCommand = 'make -f %s' % (MakeFileName)\r
-            returncode, StdOut, StdErr = self.ExecuteCommand (MakeCommand)\r
+            returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (MakeCommand)\r
             Messages = StdErr\r
         Messages = Messages.split('\n')\r
         MessageGroup = []\r
@@ -2185,9 +2184,9 @@ class DscBuildData(PlatformBuildClassObject):
             else:\r
                 EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s' % MakeCommand)\r
 \r
-        if self.NeedUpdateOutput(OutputValueFile, PcdValueInitExe ,InputValueFile):\r
+        if DscBuildData.NeedUpdateOutput(OutputValueFile, PcdValueInitExe ,InputValueFile):\r
             Command = PcdValueInitExe + ' -i %s -o %s' % (InputValueFile, OutputValueFile)\r
-            returncode, StdOut, StdErr = self.ExecuteCommand (Command)\r
+            returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (Command)\r
             if returncode <> 0:\r
                 EdkLogger.warn('Build', COMMAND_FAILURE, 'Can not collect output from command: %s' % Command)\r
 \r
@@ -2202,7 +2201,8 @@ class DscBuildData(PlatformBuildClassObject):
             StructurePcdSet.append((PcdInfo[0],PcdInfo[1], PcdInfo[2], PcdInfo[3], PcdValue[2].strip()))\r
         return StructurePcdSet\r
 \r
-    def NeedUpdateOutput(self,OutputFile, ValueCFile, StructureInput):\r
+    @staticmethod\r
+    def NeedUpdateOutput(OutputFile, ValueCFile, StructureInput):\r
         if not os.path.exists(OutputFile):\r
             return True\r
         if os.stat(OutputFile).st_mtime <= os.stat(ValueCFile).st_mtime:\r
@@ -2220,7 +2220,7 @@ class DscBuildData(PlatformBuildClassObject):
     def _GetDynamicPcd(self, Type):\r
 \r
 \r
-        Pcds = sdict()\r
+        Pcds = OrderedDict()\r
         #\r
         # tdict is a special dict kind of type, used for selecting correct\r
         # PCD settings for certain ARCH and SKU\r
@@ -2246,7 +2246,7 @@ class DscBuildData(PlatformBuildClassObject):
         for PcdCName, TokenSpaceGuid, SkuName, Dummy4 in PcdList:\r
 \r
             Setting = PcdDict[self._Arch, SkuName, PcdCName, TokenSpaceGuid]\r
-            if Setting == None:\r
+            if Setting is None:\r
                 continue\r
 \r
             PcdValue, DatumType, MaxDatumSize = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
@@ -2282,7 +2282,7 @@ class DscBuildData(PlatformBuildClassObject):
             pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
             # Only fix the value while no value provided in DSC file.\r
             for sku in pcd.SkuInfoList.values():\r
-                if (sku.DefaultValue == "" or sku.DefaultValue==None):\r
+                if not sku.DefaultValue:\r
                     sku.DefaultValue = pcdDecObject.DefaultValue\r
             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():\r
                 valuefromDec = pcdDecObject.DefaultValue\r
@@ -2312,8 +2312,8 @@ class DscBuildData(PlatformBuildClassObject):
 \r
         return PcdObj\r
 \r
-\r
-    def CompareVarAttr(self, Attr1, Attr2):\r
+    @staticmethod\r
+    def CompareVarAttr(Attr1, Attr2):\r
         if not Attr1 or not Attr2:  # for empty string\r
             return True\r
         Attr1s = [attr.strip() for attr in Attr1.split(",")]\r
@@ -2324,20 +2324,21 @@ class DscBuildData(PlatformBuildClassObject):
             return True\r
         else:\r
             return False\r
+\r
     def CopyDscRawValue(self,Pcd):\r
         if Pcd.DscRawValue is None:\r
             Pcd.DscRawValue = dict()\r
         if Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD], self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
             if self.SkuIdMgr.SystemSkuId not in Pcd.DscRawValue:\r
                 Pcd.DscRawValue[self.SkuIdMgr.SystemSkuId] = {}\r
-            Pcd.DscRawValue[self.SkuIdMgr.SystemSkuId]['STANDARD'] = Pcd.DefaultValue\r
+            Pcd.DscRawValue[self.SkuIdMgr.SystemSkuId][TAB_DEFAULT_STORES_DEFAULT] = Pcd.DefaultValue\r
         for skuname in Pcd.SkuInfoList:\r
             Pcd.DscRawValue[skuname] = {}\r
             if Pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
                 for defaultstore in Pcd.SkuInfoList[skuname].DefaultStoreDict:\r
                     Pcd.DscRawValue[skuname][defaultstore] = Pcd.SkuInfoList[skuname].DefaultStoreDict[defaultstore]\r
             else:\r
-                Pcd.DscRawValue[skuname]['STANDARD'] = Pcd.SkuInfoList[skuname].DefaultValue\r
+                Pcd.DscRawValue[skuname][TAB_DEFAULT_STORES_DEFAULT] = Pcd.SkuInfoList[skuname].DefaultValue\r
     def CompletePcdValues(self,PcdSet):\r
         Pcds = {}\r
         DefaultStoreObj = DefaultStore(self._GetDefaultStores())\r
@@ -2385,7 +2386,7 @@ class DscBuildData(PlatformBuildClassObject):
 \r
         VariableAttrs = {}\r
 \r
-        Pcds = sdict()\r
+        Pcds = OrderedDict()\r
         #\r
         # tdict is a special dict kind of type, used for selecting correct\r
         # PCD settings for certain ARCH and SKU\r
@@ -2402,7 +2403,7 @@ class DscBuildData(PlatformBuildClassObject):
             SkuName = 'DEFAULT' if SkuName == 'COMMON' else SkuName\r
             DefaultStore = DefaultStore.upper()\r
             if DefaultStore == "COMMON":\r
-                DefaultStore = "STANDARD"\r
+                DefaultStore = TAB_DEFAULT_STORES_DEFAULT\r
             if SkuName not in AvailableSkuIdSet:\r
                 EdkLogger.error('build', PARAMETER_INVALID, 'Sku %s is not defined in [SkuIds] section' % SkuName,\r
                                             File=self.MetaFile, Line=Dummy5)\r
@@ -2418,7 +2419,7 @@ class DscBuildData(PlatformBuildClassObject):
         for PcdCName, TokenSpaceGuid, SkuName,DefaultStore, Dummy4 in PcdSet:\r
 \r
             Setting = PcdDict[self._Arch, SkuName, PcdCName, TokenSpaceGuid,DefaultStore]\r
-            if Setting == None:\r
+            if Setting is None:\r
                 continue\r
             VariableName, VariableGuid, VariableOffset, DefaultValue, VarAttribute = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
 \r
@@ -2451,7 +2452,7 @@ class DscBuildData(PlatformBuildClassObject):
             if (VariableName, VariableGuid) not in VariableAttrs:\r
                 VariableAttrs[(VariableName, VariableGuid)] = VarAttribute\r
             else:\r
-                if not self.CompareVarAttr(VariableAttrs[(VariableName, VariableGuid)], VarAttribute):\r
+                if not DscBuildData.CompareVarAttr(VariableAttrs[(VariableName, VariableGuid)], VarAttribute):\r
                     EdkLogger.error('Build', PCD_VARIABLE_ATTRIBUTES_CONFLICT_ERROR, "The variable %s.%s for DynamicHii PCDs has conflicting attributes [%s] and [%s] " % (VariableGuid, VariableName, VarAttribute, VariableAttrs[(VariableName, VariableGuid)]))\r
 \r
             pcdDecObject = self._DecPcds[PcdCName, TokenSpaceGuid]\r
@@ -2488,7 +2489,7 @@ class DscBuildData(PlatformBuildClassObject):
             pcd.DatumType = pcdDecObject.DatumType\r
             # Only fix the value while no value provided in DSC file.\r
             for sku in pcd.SkuInfoList.values():\r
-                if (sku.HiiDefaultValue == "" or sku.HiiDefaultValue == None):\r
+                if (sku.HiiDefaultValue == "" or sku.HiiDefaultValue is None):\r
                     sku.HiiDefaultValue = pcdDecObject.DefaultValue\r
                     for default_store in sku.DefaultStoreDict:\r
                         sku.DefaultStoreDict[default_store]=pcdDecObject.DefaultValue\r
@@ -2518,7 +2519,7 @@ class DscBuildData(PlatformBuildClassObject):
                         skuobj.DefaultStoreDict[defaultst] = StringToArray(skuobj.DefaultStoreDict[defaultst])\r
                 pcd.DefaultValue = StringToArray(pcd.DefaultValue)\r
                 pcd.MaxDatumSize = str(MaxSize)\r
-        rt, invalidhii = self.CheckVariableNameAssignment(Pcds)\r
+        rt, invalidhii = DscBuildData.CheckVariableNameAssignment(Pcds)\r
         if not rt:\r
             invalidpcd = ",".join(invalidhii)\r
             EdkLogger.error('build', PCD_VARIABLE_INFO_ERROR, Message='The same HII PCD must map to the same EFI variable for all SKUs', File=self.MetaFile, ExtraData=invalidpcd)\r
@@ -2527,7 +2528,8 @@ class DscBuildData(PlatformBuildClassObject):
 \r
         return Pcds\r
 \r
-    def CheckVariableNameAssignment(self,Pcds):\r
+    @staticmethod\r
+    def CheckVariableNameAssignment(Pcds):\r
         invalidhii = []\r
         for pcdname in Pcds:\r
             pcd = Pcds[pcdname]\r
@@ -2547,7 +2549,7 @@ class DscBuildData(PlatformBuildClassObject):
     def _GetDynamicVpdPcd(self, Type):\r
 \r
 \r
-        Pcds = sdict()\r
+        Pcds = OrderedDict()\r
         #\r
         # tdict is a special dict kind of type, used for selecting correct\r
         # PCD settings for certain ARCH and SKU\r
@@ -2572,7 +2574,7 @@ class DscBuildData(PlatformBuildClassObject):
         # Remove redundant PCD candidates, per the ARCH and SKU\r
         for PcdCName, TokenSpaceGuid, SkuName, Dummy4 in PcdList:\r
             Setting = PcdDict[self._Arch, SkuName, PcdCName, TokenSpaceGuid]\r
-            if Setting == None:\r
+            if Setting is None:\r
                 continue\r
             #\r
             # For the VOID* type, it can have optional data of MaxDatumSize and InitialValue\r
@@ -2614,7 +2616,7 @@ class DscBuildData(PlatformBuildClassObject):
             pcd.DatumType = pcdDecObject.DatumType\r
             # Only fix the value while no value provided in DSC file.\r
             for sku in pcd.SkuInfoList.values():\r
-                if (sku.DefaultValue == "" or sku.DefaultValue==None):\r
+                if not sku.DefaultValue:\r
                     sku.DefaultValue = pcdDecObject.DefaultValue\r
             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():\r
                 valuefromDec = pcdDecObject.DefaultValue\r
@@ -2681,7 +2683,7 @@ class DscBuildData(PlatformBuildClassObject):
         self.Pcds[Name, Guid].DefaultValue = Value\r
     @property\r
     def DecPcds(self):\r
-        if self._DecPcds == None:\r
+        if self._DecPcds is None:\r
             FdfInfList = []\r
             if GlobalData.gFdfParser:\r
                 FdfInfList = GlobalData.gFdfParser.Profile.InfList\r