]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools: Update NV Default Header format to include the max size
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / DscBuildData.py
index d2114fedcd2f20158eb1eada4bde3db6af58bb70..a5fceb9e2b614ee681f6de590451d058acd6df27 100644 (file)
@@ -159,7 +159,7 @@ class DscBuildData(PlatformBuildClassObject):
         else:\r
             self.OutputPath = os.path.dirname(self.DscFile)\r
         self.DefaultStores = None\r
-        self.SkuIdMgr = SkuClass(self.SkuIdentifier, self.SkuIds)\r
+        self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)\r
         arraystr = self.SkuIdMgr.DumpSkuIdArrary()\r
 \r
     ## XXX[key] = value\r
@@ -185,8 +185,6 @@ class DscBuildData(PlatformBuildClassObject):
         self._SupArchList       = None\r
         self._BuildTargets      = None\r
         self._SkuName           = None\r
-        self._SkuIdentifier     = None\r
-        self._AvilableSkuIds    = None\r
         self._PcdInfoFlag       = None\r
         self._VarCheckFlag      = None\r
         self._FlashDefinition   = None\r
@@ -306,8 +304,8 @@ class DscBuildData(PlatformBuildClassObject):
             elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER:\r
                 if self._SkuName == None:\r
                     self._SkuName = Record[2]\r
-                self._SkuIdentifier = Record[2]\r
-                self._AvilableSkuIds = Record[2]\r
+                if GlobalData.gSKUID_CMD:\r
+                    self._SkuName = GlobalData.gSKUID_CMD\r
             elif Name == TAB_DSC_DEFINES_PCD_INFO_GENERATION:\r
                 self._PcdInfoFlag = Record[2]\r
             elif Name == TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION:\r
@@ -438,23 +436,13 @@ class DscBuildData(PlatformBuildClassObject):
             return True\r
         else:\r
             return False\r
-    def _GetAviableSkuIds(self):\r
-        if self._AvilableSkuIds:\r
-            return self._AvilableSkuIds\r
-        return self.SkuIdentifier\r
-    def _GetSkuIdentifier(self):\r
-        if self._SkuName:\r
-            return self._SkuName\r
-        if self._SkuIdentifier == None:\r
-            if self._Header == None:\r
-                self._GetHeaderInfo()\r
-        return self._SkuIdentifier\r
-    ## Retrieve SKUID_IDENTIFIER\r
+\r
+    # # Retrieve SKUID_IDENTIFIER\r
     def _GetSkuName(self):\r
         if self._SkuName == None:\r
             if self._Header == None:\r
                 self._GetHeaderInfo()\r
-            if (self._SkuName == None or self._SkuName not in self.SkuIds):\r
+            if self._SkuName == None:\r
                 self._SkuName = 'DEFAULT'\r
         return self._SkuName\r
 \r
@@ -620,6 +608,9 @@ class DscBuildData(PlatformBuildClassObject):
                 self.DefaultStores[Record[1].upper()] = (self.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
+            if GlobalData.gDefaultStores:\r
+                GlobalData.gDefaultStores.sort()\r
         return self.DefaultStores\r
 \r
     ## Retrieve [Components] section information\r
@@ -854,10 +845,14 @@ class DscBuildData(PlatformBuildClassObject):
             for pcdname in Pcds:\r
                 pcd = Pcds[pcdname]\r
                 Pcds[pcdname].SkuInfoList = {"DEFAULT":pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}\r
+                if type(pcd) is StructurePcd and pcd.OverrideValues:\r
+                    Pcds[pcdname].OverrideValues = {"DEFAULT":pcd.OverrideValues[skuid] for skuid in pcd.OverrideValues if skuid in available_sku}\r
         else:\r
             for pcdname in Pcds:\r
                 pcd = Pcds[pcdname]\r
                 Pcds[pcdname].SkuInfoList = {skuid:pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}\r
+                if type(pcd) is StructurePcd and pcd.OverrideValues:\r
+                    Pcds[pcdname].OverrideValues = {skuid:pcd.OverrideValues[skuid] for skuid in pcd.OverrideValues if skuid in available_sku}\r
         return Pcds\r
     def CompleteHiiPcdsDefaultStores(self,Pcds):\r
         HiiPcd = [Pcds[pcd] for pcd in Pcds if Pcds[pcd].Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]]\r
@@ -1251,13 +1246,10 @@ class DscBuildData(PlatformBuildClassObject):
             CApp = CApp + '  VOID    *OriginalPcd;\n'\r
             CApp = CApp + '  %s      *Pcd;\n' % (Pcd.DatumType)\r
             CApp = CApp + '\n'\r
+\r
             Pcd.DefaultValue = Pcd.DefaultValue.strip()\r
-            if Pcd.DefaultValue.startswith('L"') and Pcd.DefaultValue.endswith('"'):\r
-                PcdDefaultValue = "{" + ",".join(self.__UNICODE2OCTList(Pcd.DefaultValue)) + "}"\r
-            elif Pcd.DefaultValue.startswith('"') and Pcd.DefaultValue.endswith('"'):\r
-                PcdDefaultValue = "{" + ",".join(self.__STRING2OCTList(Pcd.DefaultValue)) + "}"\r
-            else:\r
-                PcdDefaultValue = Pcd.DefaultValue\r
+            PcdDefaultValue = StringToArray(Pcd.DefaultValue)\r
+\r
             InitByteValue += '%s.%s.%s.%s|%s|%s\n' % (SkuName, DefaultStoreName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName, Pcd.DatumType, PcdDefaultValue)\r
 \r
             #\r
@@ -1462,32 +1454,6 @@ class DscBuildData(PlatformBuildClassObject):
         else:\r
             StdOut, StdErr = self.ExecuteCommand ('make clean & make -f %s' % (MakeFileName))\r
         Messages = StdOut.split('\r')\r
-        for Message in Messages:\r
-            if " error " in Message:\r
-                FileInfo = Message.strip().split('(')\r
-                if len (FileInfo) > 0:\r
-                    FileName = FileInfo [0]\r
-                    FileLine = FileInfo [1].split (')')[0]\r
-                else:\r
-                    FileInfo = Message.strip().split(':')\r
-                    FileName = FileInfo [0]\r
-                    FileLine = FileInfo [1]\r
-\r
-                File = open (FileName, 'r')\r
-                FileData = File.readlines()\r
-                File.close()\r
-                error_line = FileData[int (FileLine) - 1]\r
-                if r"//" in error_line:\r
-                    c_line,dsc_line = error_line.split(r"//")\r
-                else:\r
-                    dsc_line = error_line\r
-\r
-                message_itmes = Message.split(":")\r
-                for item in message_itmes:\r
-                    if "PcdValueInit.c" in item:\r
-                        message_itmes[message_itmes.index(item)] = dsc_line.strip()\r
-\r
-                EdkLogger.error("build", PCD_STRUCTURE_PCD_ERROR, ":".join(message_itmes[1:]))\r
 \r
         PcdValueInitExe = PcdValueInitName\r
         if not sys.platform == "win32":\r
@@ -1574,6 +1540,10 @@ class DscBuildData(PlatformBuildClassObject):
 \r
         for pcd in Pcds.values():\r
             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
+                    sku.DefaultValue = pcdDecObject.DefaultValue\r
             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():\r
                 valuefromDec = pcdDecObject.DefaultValue\r
                 SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec)\r
@@ -1773,14 +1743,13 @@ class DscBuildData(PlatformBuildClassObject):
             if pcdDecObject.DatumType == 'VOID*':\r
                 for (_, skuobj) in pcd.SkuInfoList.items():\r
                     datalen = 0\r
-                    if skuobj.HiiDefaultValue.startswith("L"):\r
-                        datalen = (len(skuobj.HiiDefaultValue) - 3 + 1) * 2\r
-                    elif skuobj.HiiDefaultValue.startswith("{"):\r
-                        datalen = len(skuobj.HiiDefaultValue.split(","))\r
-                    else:\r
-                        datalen = len(skuobj.HiiDefaultValue) - 2 + 1\r
+                    skuobj.HiiDefaultValue = StringToArray(skuobj.HiiDefaultValue)\r
+                    datalen = len(skuobj.HiiDefaultValue.split(","))\r
                     if datalen > MaxSize:\r
                         MaxSize = datalen\r
+                    for defaultst in skuobj.DefaultStoreDict:\r
+                        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
         if not rt:\r
@@ -1872,6 +1841,10 @@ class DscBuildData(PlatformBuildClassObject):
         for pcd in Pcds.values():\r
             SkuInfoObj = pcd.SkuInfoList.values()[0]\r
             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
+                    sku.DefaultValue = pcdDecObject.DefaultValue\r
             if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():\r
                 valuefromDec = pcdDecObject.DefaultValue\r
                 SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', SkuInfoObj.VpdOffset, valuefromDec)\r
@@ -1927,8 +1900,6 @@ class DscBuildData(PlatformBuildClassObject):
     SupArchList         = property(_GetSupArch)\r
     BuildTargets        = property(_GetBuildTarget)\r
     SkuName             = property(_GetSkuName, _SetSkuName)\r
-    SkuIdentifier       = property(_GetSkuIdentifier)\r
-    AvilableSkuIds      = property(_GetAviableSkuIds)\r
     PcdInfoFlag         = property(_GetPcdInfoFlag)\r
     VarCheckFlag        = property(_GetVarCheckFlag)\r
     FlashDefinition     = property(_GetFdfFile)\r