Fixed PCD override issue.
authorjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 19 May 2008 05:10:21 +0000 (05:10 +0000)
committerjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 19 May 2008 05:10:21 +0000 (05:10 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1236 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/AutoGen/AutoGen.py
Source/Python/Workspace/BuildClassObject.py
Source/Python/Workspace/WorkspaceDatabase.py

index 093087c..81369a8 100755 (executable)
@@ -917,15 +917,23 @@ class PlatformAutoGen(AutoGen):
     #   @param  ToPcd       The PCD to be overrided\r
     #   @param  FromPcd     The PCD overrideing from\r
     #\r
-    def _OverridePcd(self, ToPcd, FromPcd):\r
+    def _OverridePcd(self, ToPcd, FromPcd, Module=""):\r
         #\r
         # in case there's PCDs coming from FDF file, which have no type given.\r
-        # at this point, PcdInModule.Type has the type found from dependent\r
+        # at this point, ToPcd.Type has the type found from dependent\r
         # package\r
         #\r
         if FromPcd != None:\r
-            if FromPcd.Type not in [None, '']:\r
+            if ToPcd.Pending and FromPcd.Type not in [None, '']:\r
                 ToPcd.Type = FromPcd.Type\r
+            elif ToPcd.Type not in [None, ''] and FromPcd.Type not in [None, ''] \\r
+                and ToPcd.Type != FromPcd.Type:\r
+                EdkLogger.error("build", OPTION_CONFLICT, "Mismatched PCD type",\r
+                                ExtraData="%s.%s is defined as [%s] in module %s, but as [%s] in platform."\\r
+                                          % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName,\r
+                                             ToPcd.Type, Module, FromPcd.Type),\r
+                                          File=self._MetaFile)\r
+\r
             if FromPcd.MaxDatumSize not in [None, '']:\r
                 ToPcd.MaxDatumSize = FromPcd.MaxDatumSize\r
             if FromPcd.DefaultValue not in [None, '']:\r
@@ -977,7 +985,7 @@ class PlatformAutoGen(AutoGen):
             else:\r
                 PcdInPlatform = None\r
             # then override the settings if any\r
-            self._OverridePcd(PcdInModule, PcdInPlatform)\r
+            self._OverridePcd(PcdInModule, PcdInPlatform, Module)\r
             # resolve the VariableGuid value\r
             for SkuId in PcdInModule.SkuInfoList:\r
                 Sku = PcdInModule.SkuInfoList[SkuId]\r
@@ -999,7 +1007,7 @@ class PlatformAutoGen(AutoGen):
             PlatformModule = self.Platform.Modules[str(Module)]\r
             for Key  in PlatformModule.Pcds:\r
                 if Key in Module.Pcds:\r
-                    self._OverridePcd(Module.Pcds[Key], PlatformModule.Pcds[Key])\r
+                    self._OverridePcd(Module.Pcds[Key], PlatformModule.Pcds[Key], Module)\r
         return Module.Pcds.values()\r
 \r
     ## Resolve library names to library modules\r
index e698c9b..e9db83d 100644 (file)
@@ -16,7 +16,7 @@ from Common.Misc import sdict
 ## PcdClassObject\r
 #\r
 # This Class is used for PcdObject\r
-# \r
+#\r
 # @param object:             Inherited from object class\r
 # @param Name:               Input value for Name of Pcd, default is None\r
 # @param Guid:               Input value for Guid of Pcd, default is None\r
@@ -50,6 +50,7 @@ class PcdClassObject(object):
         self.MaxDatumSize = MaxDatumSize\r
         self.SkuInfoList = SkuInfoList\r
         self.Phase = "DXE"\r
+        self.Pending = False\r
 \r
     ## Convert the class to a string\r
     #\r
@@ -94,7 +95,7 @@ class PcdClassObject(object):
 ## LibraryClassObject\r
 #\r
 # This Class defines LibraryClassObject used in BuildDatabase\r
-# \r
+#\r
 # @param object:      Inherited from object class\r
 # @param Name:        Input value for LibraryClassName, default is None\r
 # @param SupModList:  Input value for SupModList, default is []\r
@@ -114,7 +115,7 @@ class LibraryClassObject(object):
 ## ModuleBuildClassObject\r
 #\r
 # This Class defines ModuleBuildClass\r
-# \r
+#\r
 # @param object:               Inherited from object class\r
 #\r
 # @var DescFilePath:           To store value for DescFilePath\r
@@ -218,7 +219,7 @@ class ModuleBuildClassObject(object):
 ## PackageBuildClassObject\r
 #\r
 # This Class defines PackageBuildClass\r
-# \r
+#\r
 # @param object:        Inherited from object class\r
 #\r
 # @var DescFilePath:    To store value for DescFilePath\r
@@ -283,7 +284,7 @@ class PackageBuildClassObject(object):
 ## PlatformBuildClassObject\r
 #\r
 # This Class defines PlatformBuildClass\r
-# \r
+#\r
 # @param object:          Inherited from object class\r
 #\r
 # @var DescFilePath:      To store value for DescFilePath\r
index 8c62c13..5c86604 100644 (file)
@@ -359,7 +359,7 @@ class DscBuildData(PlatformBuildClassObject):
                         MaxDatumSize = TokenList[1]\r
                     else:\r
                         MaxDatumSize = ''\r
-                    Type = self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD]\r
+                    Type = self._PCD_TYPE_STRING_[Type]\r
                     Pcd = PcdClassObject(\r
                             PcdCName,\r
                             TokenSpaceGuid,\r
@@ -1676,10 +1676,13 @@ class InfBuildData(ModuleBuildClassObject):
                 #\r
                 PcdType = self._PCD_TYPE_STRING_[Type]\r
                 if Type in [MODEL_PCD_DYNAMIC, MODEL_PCD_DYNAMIC_EX]:\r
+                    Pcd.Pending = True\r
                     for T in ["FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx"]:\r
                         if (PcdCName, TokenSpaceGuid, T) in Package.Pcds:\r
                             PcdType = T\r
                             break\r
+                else:\r
+                    Pcd.Pending = False\r
 \r
                 if (PcdCName, TokenSpaceGuid, PcdType) in Package.Pcds:\r
                     PcdInPackage = Package.Pcds[PcdCName, TokenSpaceGuid, PcdType]\r