Applied DEFAULT SkuId for dynamic PCDs if they're not specified one.
authorjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 8 Apr 2008 02:28:53 +0000 (02:28 +0000)
committerjwang36 <jwang36@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 8 Apr 2008 02:28:53 +0000 (02:28 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1129 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Workspace/WorkspaceDatabase.py

index 603b787..a1fb5f3 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
-# This file is used to create a database used by ECC tool\r
+# This file is used to create a database used by build tool\r
 #\r
-# Copyright (c) 2007 ~ 2008, Intel Corporation\r
+# Copyright (c) 2008, Intel Corporation\r
 # All rights reserved. This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -31,6 +31,14 @@ from MetaFileTable import *
 from MetaFileParser import *\r
 from BuildClassObject import *\r
 \r
+## Check if gvien file exists or not\r
+# \r
+#   @param      File    File name or path to be checked\r
+#   @param      Dir     The directory the file is relative to\r
+# \r
+#   @retval     True    if file exists\r
+#   @retval     False   if file doesn't exists\r
+# \r
 def ValidFile(File, Dir='.'):\r
     Wd = os.getcwd()\r
     os.chdir(Dir)\r
@@ -40,6 +48,14 @@ def ValidFile(File, Dir='.'):
     os.chdir(Wd)\r
     return True\r
 \r
+## Get GUID value from given packages\r
+# \r
+#   @param      CName           The CName of the GUID\r
+#   @param      PackageList     List of packages looking-up in\r
+# \r
+#   @retval     GuidValue   if the CName is found in any given package\r
+#   @retval     None        if the CName is not found in all given packages\r
+# \r
 def GuidValue(CName, PackageList):\r
     for P in PackageList:\r
         if CName in P.Guids:\r
@@ -50,22 +66,12 @@ def GuidValue(CName, PackageList):
             return P.Ppis[CName]\r
     return None\r
 \r
+## Platform build information from DSC file\r
+#\r
+#  This class is used to retrieve information stored in database and convert them\r
+# into PlatformBuildClassObject form for easier use for AutoGen.\r
+#\r
 class DscBuildData(PlatformBuildClassObject):\r
-    #_PROPERTY_ = {\r
-    #    TAB_DSC_DEFINES_PLATFORM_NAME           : '_PlatformName'\r
-    #    TAB_DSC_DEFINES_PLATFORM_GUID           : '_Guid'\r
-    #    TAB_DSC_DEFINES_PLATFORM_VERSION        : '_Version'\r
-    #    TAB_DSC_DEFINES_DSC_SPECIFICATION       : '_DscSpecification'\r
-    #    TAB_DSC_DEFINES_OUTPUT_DIRECTORY        : '_OutputDirectory'\r
-    #    TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES : '_SupArchList'\r
-    #    TAB_DSC_DEFINES_BUILD_TARGETS           : '_BuildTargets'\r
-    #    TAB_DSC_DEFINES_SKUID_IDENTIFIER        : '_SkuId'\r
-    #    TAB_DSC_DEFINES_FLASH_DEFINITION        : '_FlashDefinition'\r
-    #    TAB_DSC_DEFINES_BUILD_NUMBER            : '_BuildNumber'\r
-    #    TAB_DSC_DEFINES_MAKEFILE_NAME           : '_MakefileName'\r
-    #    TAB_DSC_DEFINES_BS_BASE_ADDRESS         : '_BsBaseAddress'\r
-    #    TAB_DSC_DEFINES_RT_BASE_ADDRESS         : '_RtBaseAddress'\r
-    #}\r
     _PCD_TYPE_STRING_ = {\r
         MODEL_PCD_FIXED_AT_BUILD        :   "FixedAtBuild",\r
         MODEL_PCD_PATCHABLE_IN_MODULE   :   "PatchableInModule",\r
@@ -139,18 +145,6 @@ class DscBuildData(PlatformBuildClassObject):
         S += "\t" + "\n\t".join([str(M) for M in self.Modules]) + '\n'\r
         return S\r
 \r
-    ## XXX[key] = value\r
-    #def __setitem__(self, key, value):\r
-    #    self.__dict__[self._PROPERTY_[key]] = value\r
-    #\r
-    ### variable = XXX[key]\r
-    #def __getitem__(self, key):\r
-    #    return self.__dict__[self._PROPERTY_[key]]\r
-    #\r
-    ### "in" test support\r
-    #def __contains__(self, key):\r
-    #    return key in self._PROPERTY_\r
-\r
     def _Clear(self):\r
         self._PlatformName      = None\r
         self._Guid              = None\r
@@ -313,6 +307,8 @@ class DscBuildData(PlatformBuildClassObject):
                     EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name',\r
                                     File=self.DescFilePath, Line=Record[-1])\r
                 self._SkuIds[Record[1]] = Record[0]\r
+            if 'DEFAULT' not in self._SkuIds:\r
+                self._SkuIds['DEFAULT'] = 0\r
         return self._SkuIds\r
 \r
     def _GetModules(self):\r
@@ -573,6 +569,17 @@ class DscBuildData(PlatformBuildClassObject):
                 else:\r
                     PcdInModule.MaxDatumSize = str(len(Value))\r
 \r
+            # apply default SKU for dynamic PCDS if specified one is not available\r
+            if (PcdInModule.Type in PCD_DYNAMIC_TYPE_LIST or PcdInModule.Type in PCD_DYNAMIC_EX_TYPE_LIST) \\r
+                and PcdInModule.SkuInfoList in [None, {}, '']:\r
+                if self.SkuName in self.SkuIds:\r
+                    SkuName = self.SkuName\r
+                else:\r
+                    SkuName = 'DEFAULT'\r
+                PcdInModule.SkuInfoList = {\r
+                    SkuName : SkuInfoClass(SkuName, self.SkuIds[SkuName], '', '', '', '', '', PcdInModule.DefaultValue)\r
+                }\r
+\r
         RecordList = self._Table.Query(MODEL_PCD_FIXED_AT_BUILD, Scope1=self.Arch, BelongsToItem=ModuleId)\r
         for TokenSpaceGuid, PcdCName, Setting, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList:\r
             if (PcdCName, TokenSpaceGuid) not in Module.Pcds:\r
@@ -1018,7 +1025,8 @@ class DecBuildData(PackageBuildClassObject):
                 if not ValidFile(File, self._PackageDir):\r
                     EdkLogger.error('build', FILE_NOT_FOUND, ExtraData=File,\r
                                     File=self.DescFilePath, Line=LineNo)\r
-                self._Includes.append(File)\r
+                if File not in self._Includes:\r
+                    self._Includes.append(File)\r
         return self._Includes\r
 \r
     def _GetLibraryClass(self):\r