]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Fixed the pcd value override issue.
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index 66402c52b7364064d4c83ad1af84a1d49be141b7..007d9b7f151735c9116307634981661095445347 100644 (file)
@@ -895,12 +895,11 @@ class DscBuildData(PlatformBuildClassObject):
                 if pcd[2] == "":\r
                     pcdset.append((pcd[0],pcd[1],pcd[3]))\r
                 else:\r
-                    pcdobj = self._Pcds.get((pcd[1],pcd[0]))\r
-                    if pcdobj:\r
-                        pcdset.append((pcd[0],pcd[1], pcdobj.DefaultValue))\r
-                    else:\r
+                    if (pcd[1],pcd[0]) not in self._Pcds:\r
                         pcdvalue = pcd[3] if len(pcd) == 4 else pcd[2]\r
                         pcdset.append((pcd[0],pcd[1],pcdvalue))\r
+                    #else:\r
+                        # remove the settings from command line since it has been handled.\r
         GlobalData.BuildOptionPcd = pcdset\r
     def GetFieldValueFromComm(self,ValueStr,TokenSpaceGuidCName, TokenCName, FieldName):\r
         PredictedFieldType = "VOID*"\r
@@ -1677,6 +1676,23 @@ class DscBuildData(PlatformBuildClassObject):
             # Assign field values in PCD\r
             #\r
             CApp = CApp + "// Default value in Dec \n"\r
+            DefaultValueFromDec = Pcd.DefaultValueFromDec\r
+            IsArray = self.IsFieldValueAnArray(Pcd.DefaultValueFromDec)\r
+            if IsArray:\r
+                try:\r
+                    DefaultValueFromDec = ValueExpressionEx(Pcd.DefaultValueFromDec, "VOID*")(True)\r
+                except BadExpression:\r
+                    EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from DEC: %s" %\r
+                                    (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, DefaultValueFromDec))\r
+            Value, ValueSize = ParseFieldValue (DefaultValueFromDec)\r
+            if isinstance(Value, str):\r
+                CApp = CApp + '  Pcd = %s; // From DEC Default Value %s\n' % (Value, Pcd.DefaultValueFromDec)\r
+            elif IsArray:\r
+            #\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 + '  memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
             for FieldList in [Pcd.DefaultValues]:\r
                 if not FieldList:\r
                     continue\r