]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: minimize assignment processing
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index 804eafa619184ca5946d4c4300127be09b04f12b..eeeb08b4b60ed3bcf74016dcecece3ccbbc761e7 100644 (file)
@@ -308,21 +308,6 @@ class DscBuildData(PlatformBuildClassObject):
     def _GetArch(self):\r
         return self._Arch\r
 \r
-    ## Set architecture\r
-    #\r
-    #   Changing the default ARCH to another may affect all other information\r
-    # because all information in a platform may be ARCH-related. That's\r
-    # why we need to clear all internal used members, in order to cause all\r
-    # information to be re-retrieved.\r
-    #\r
-    #   @param  Value   The value of ARCH\r
-    #\r
-    def _SetArch(self, Value):\r
-        if self._Arch == Value:\r
-            return\r
-        self._Arch = Value\r
-        self._Clear()\r
-\r
     ## Retrieve all information in [Defines] section\r
     #\r
     #   (Retriving all [Defines] information in one-shot is just to save time.)\r
@@ -912,7 +897,7 @@ class DscBuildData(PlatformBuildClassObject):
             if not Valid:\r
                 EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
-            if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
+            if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
                 if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
                     EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
@@ -1295,10 +1280,10 @@ class DscBuildData(PlatformBuildClassObject):
         if GlobalData.gFdfParser is None:\r
             return AllPcds\r
         NoFiledValues = GlobalData.gFdfParser.Profile.PcdDict\r
-        for Guid,Name,Field in NoFiledValues:\r
+        for Name,Guid,Field in NoFiledValues:\r
             if len(Field):\r
                 continue\r
-            Value = NoFiledValues[(Guid,Name,Field)]\r
+            Value = NoFiledValues[(Name,Guid,Field)]\r
             if (Name,Guid) in AllPcds:\r
                 Pcd = AllPcds.get((Name,Guid))\r
                 if isinstance(self._DecPcds.get((Pcd.TokenCName,Pcd.TokenSpaceGuidCName), None),StructurePcd):\r
@@ -1325,7 +1310,7 @@ class DscBuildData(PlatformBuildClassObject):
             else:\r
                 PcdInDec = self.DecPcds.get((Name,Guid))\r
                 if PcdInDec:\r
-                    PcdInDec.PcdValueFromComm = Value\r
+                    PcdInDec.PcdValueFromFdf = Value\r
                     if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
                                         self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE],\r
                                         self._PCD_TYPE_STRING_[MODEL_PCD_FEATURE_FLAG]]:\r
@@ -1536,21 +1521,29 @@ class DscBuildData(PlatformBuildClassObject):
             if Setting is None:\r
                 continue\r
             PcdValue, DatumType, MaxDatumSize = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
+            if MaxDatumSize:\r
+                if int(MaxDatumSize, 0) > 0xFFFF:\r
+                    EdkLogger.error('build', FORMAT_INVALID, "The size value must not exceed the maximum value of 0xFFFF (UINT16) for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+                                    File=self.MetaFile, Line=Dummy4)\r
+                if int(MaxDatumSize, 0) < 0:\r
+                    EdkLogger.error('build', FORMAT_INVALID, "The size value can't be set to negative value for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+                                    File=self.MetaFile, Line=Dummy4)\r
             if (PcdCName, TokenSpaceGuid) in PcdValueDict:\r
                 PcdValueDict[PcdCName, TokenSpaceGuid][SkuName] = (PcdValue, DatumType, MaxDatumSize)\r
             else:\r
                 PcdValueDict[PcdCName, TokenSpaceGuid] = {SkuName:(PcdValue, DatumType, MaxDatumSize)}\r
 \r
         for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.iteritems():\r
-            PcdValue = None\r
-            DatumType = None\r
-            MaxDatumSize = None\r
-            if TAB_COMMON in PcdSetting:\r
-                PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_COMMON]\r
-            if TAB_DEFAULT in PcdSetting:\r
-                PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_DEFAULT]\r
             if self.SkuIdMgr.SystemSkuId in PcdSetting:\r
                 PcdValue, DatumType, MaxDatumSize = PcdSetting[self.SkuIdMgr.SystemSkuId]\r
+            elif TAB_DEFAULT in PcdSetting:\r
+                PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_DEFAULT]\r
+            elif TAB_COMMON in PcdSetting:\r
+                PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_COMMON]\r
+            else:\r
+                PcdValue = None\r
+                DatumType = None\r
+                MaxDatumSize = None\r
 \r
             Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject(\r
                                                 PcdCName,\r
@@ -2381,6 +2374,13 @@ class DscBuildData(PlatformBuildClassObject):
                 continue\r
 \r
             PcdValue, DatumType, MaxDatumSize = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
+            if MaxDatumSize:\r
+                if int(MaxDatumSize, 0) > 0xFFFF:\r
+                    EdkLogger.error('build', FORMAT_INVALID, "The size value must not exceed the maximum value of 0xFFFF (UINT16) for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+                                    File=self.MetaFile, Line=Dummy4)\r
+                if int(MaxDatumSize, 0) < 0:\r
+                    EdkLogger.error('build', FORMAT_INVALID, "The size value can't be set to negative value for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+                                    File=self.MetaFile, Line=Dummy4)\r
             SkuInfo = SkuInfoClass(SkuName, self.SkuIds[SkuName][0], '', '', '', '', '', PcdValue)\r
             if (PcdCName, TokenSpaceGuid) in Pcds:\r
                 pcdObject = Pcds[PcdCName, TokenSpaceGuid]\r
@@ -2714,6 +2714,13 @@ class DscBuildData(PlatformBuildClassObject):
             # until the DEC parser has been called.\r
             #\r
             VpdOffset, MaxDatumSize, InitialValue = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
+            if MaxDatumSize:\r
+                if int(MaxDatumSize, 0) > 0xFFFF:\r
+                    EdkLogger.error('build', FORMAT_INVALID, "The size value must not exceed the maximum value of 0xFFFF (UINT16) for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+                                    File=self.MetaFile, Line=Dummy4)\r
+                if int(MaxDatumSize, 0) < 0:\r
+                    EdkLogger.error('build', FORMAT_INVALID, "The size value can't be set to negative value for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
+                                    File=self.MetaFile, Line=Dummy4)\r
             SkuInfo = SkuInfoClass(SkuName, self.SkuIds[SkuName][0], '', '', '', '', VpdOffset, InitialValue)\r
             if (PcdCName, TokenSpaceGuid) in Pcds:\r
                 pcdObject = Pcds[PcdCName, TokenSpaceGuid]\r
@@ -2778,7 +2785,7 @@ class DscBuildData(PlatformBuildClassObject):
             self.Modules.append(Module)\r
 \r
     def _GetToolChainFamily(self):\r
-        self._ToolChainFamily = "MSFT"\r
+        self._ToolChainFamily = TAB_COMPILER_MSFT\r
         BuildConfigurationFile = os.path.normpath(os.path.join(GlobalData.gConfDirectory, "target.txt"))\r
         if os.path.isfile(BuildConfigurationFile) == True:\r
             TargetTxt      = TargetTxtClassObject()\r
@@ -2794,7 +2801,7 @@ class DscBuildData(PlatformBuildClassObject):
                 if TAB_TOD_DEFINES_FAMILY not in ToolDefinition \\r
                    or self._Toolchain not in ToolDefinition[TAB_TOD_DEFINES_FAMILY] \\r
                    or not ToolDefinition[TAB_TOD_DEFINES_FAMILY][self._Toolchain]:\r
-                    self._ToolChainFamily = "MSFT"\r
+                    self._ToolChainFamily = TAB_COMPILER_MSFT\r
                 else:\r
                     self._ToolChainFamily = ToolDefinition[TAB_TOD_DEFINES_FAMILY][self._Toolchain]\r
         return self._ToolChainFamily\r
@@ -2828,7 +2835,7 @@ class DscBuildData(PlatformBuildClassObject):
             self._DecPcds, self._GuidDict = GetDeclaredPcd(self, self._Bdb, self._Arch, self._Target, self._Toolchain, PkgSet)\r
         return self._DecPcds\r
     _Macros             = property(_GetMacros)\r
-    Arch                = property(_GetArch, _SetArch)\r
+    Arch                = property(_GetArch)\r
     Platform            = property(_GetPlatformName)\r
     PlatformName        = property(_GetPlatformName)\r
     Guid                = property(_GetFileGuid)\r