]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Convert "Unicode string" to "byte array" if value type diff
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index f41038e26d7aaea0e0ae8def7b92e723d2a53904..b0e88a93ce7fb7bef29817e88e753bee7f974626 100644 (file)
@@ -1067,6 +1067,7 @@ class DscBuildData(PlatformBuildClassObject):
                         PcdItem = BuildData.Pcds[key]\r
                         if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName =="":\r
                             PcdItem.DefaultValue = pcdvalue\r
+                            PcdItem.PcdValueFromComm = pcdvalue\r
         #In command line, the latter full assign value in commandLine should override the former field assign value.\r
         #For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}"\r
         delete_assign = []\r
@@ -1132,6 +1133,8 @@ class DscBuildData(PlatformBuildClassObject):
             if not FieldName:\r
                 if PcdDatumType not in TAB_PCD_NUMERIC_TYPES:\r
                     PcdValue = '"' + PcdValue + '"'\r
+                elif not PcdValue.isdigit() and not PcdValue.upper().startswith('0X'):\r
+                    PcdValue = '"' + PcdValue + '"'\r
             else:\r
                 IsArray = False\r
                 Base = 10\r
@@ -2875,6 +2878,15 @@ class DscBuildData(PlatformBuildClassObject):
             elif TAB_DEFAULT in pcd.SkuInfoList and TAB_COMMON in pcd.SkuInfoList:\r
                 del pcd.SkuInfoList[TAB_COMMON]\r
 \r
+        #For the same one VOID* pcd, if the default value type of one SKU is "Unicode string",\r
+        #the other SKUs are "OtherVOID*"(ASCII string or byte array),Then convert "Unicode string" to "byte array".\r
+        for pcd in Pcds.values():\r
+            PcdValueTypeSet = set()\r
+            for sku in pcd.SkuInfoList.values():\r
+                PcdValueTypeSet.add("UnicodeString" if sku.DefaultValue.startswith(('L"',"L'")) else "OtherVOID*")\r
+            if len(PcdValueTypeSet) > 1:\r
+                for sku in pcd.SkuInfoList.values():\r
+                    sku.DefaultValue = StringToArray(sku.DefaultValue) if sku.DefaultValue.startswith(('L"',"L'")) else sku.DefaultValue\r
 \r
         map(self.FilterSkuSettings, Pcds.values())\r
         return Pcds\r
@@ -2944,4 +2956,5 @@ class DscBuildData(PlatformBuildClassObject):
                 ModuleData = self._Bdb[ModuleFile, self._Arch, self._Target, self._Toolchain]\r
                 PkgSet.update(ModuleData.Packages)\r
             self._DecPcds, self._GuidDict = GetDeclaredPcd(self, self._Bdb, self._Arch, self._Target, self._Toolchain, PkgSet)\r
+            self._GuidDict.update(GlobalData.gPlatformPcds)\r
         return self._DecPcds\r