]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
Sync BaseTools Branch (version r2362) to EDKII main trunk.
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / WorkspaceDatabase.py
index f923129c5429bc1d749eea5265a289f585b15f87..ac2ca057ccdf9682ac5e51e2a2895a70ae77db84 100644 (file)
@@ -300,7 +300,7 @@ class DscBuildData(PlatformBuildClassObject):
             if self._Header == None:\r
                 self._GetHeaderInfo()\r
             if self._BuildTargets == None:\r
-                self._BuildTargets = ['DEBUG', 'RELEASE']\r
+                self._BuildTargets = ['DEBUG', 'RELEASE', 'NOOPT']\r
         return self._BuildTargets\r
 \r
     ## Retrieve SKUID_IDENTIFIER\r
@@ -564,7 +564,7 @@ class DscBuildData(PlatformBuildClassObject):
                         continue\r
                     self._LibraryClasses[LibraryClass, ModuleType] = LibraryInstance\r
 \r
-            # for R8 style library instances, which are listed in different section\r
+            # for EDK style library instances, which are listed in different section\r
             RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch]\r
             for Record in RecordList:\r
                 File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch)\r
@@ -1198,6 +1198,7 @@ class InfBuildData(ModuleBuildClassObject):
         TAB_INF_DEFINES_COMPONENT_TYPE              : "_ComponentType",\r
         TAB_INF_DEFINES_MAKEFILE_NAME               : "_MakefileName",\r
         #TAB_INF_DEFINES_CUSTOM_MAKEFILE             : "_CustomMakefile",\r
+        TAB_INF_DEFINES_DPX_SOURCE                  :"_DxsFile",\r
         TAB_INF_DEFINES_VERSION_NUMBER              : "_Version",\r
         TAB_INF_DEFINES_VERSION_STRING              : "_Version",\r
         TAB_INF_DEFINES_VERSION                     : "_Version",\r
@@ -1278,6 +1279,7 @@ class InfBuildData(ModuleBuildClassObject):
         self._Header_               = None\r
         self._AutoGenVersion        = None\r
         self._BaseName              = None\r
+        self._DxsFile               = None\r
         self._ModuleType            = None\r
         self._ComponentType         = None\r
         self._BuildType             = None\r
@@ -1419,7 +1421,7 @@ class InfBuildData(ModuleBuildClassObject):
                 self._Defs[Name] = Record[1]\r
 \r
         #\r
-        # Retrieve information in sections specific to R8.x modules\r
+        # Retrieve information in sections specific to EDK.x modules\r
         #\r
         if self._AutoGenVersion >= 0x00010005:   # _AutoGenVersion may be None, which is less than anything\r
             if not self._ModuleType:\r
@@ -1446,6 +1448,17 @@ class InfBuildData(ModuleBuildClassObject):
                 self._BuildType = 'UEFI_HII'\r
             else:\r
                 self._BuildType = self._ModuleType.upper()\r
+            \r
+            if self._DxsFile:\r
+                File = PathClass(NormPath(self._DxsFile), self._ModuleDir, Arch=self._Arch)\r
+                # check the file validation\r
+                ErrorCode, ErrorInfo = File.Validate(".dxs", CaseSensitive=False)\r
+                if ErrorCode != 0:\r
+                    EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo,\r
+                                    File=self.MetaFile, Line=LineNo)\r
+                if self.Sources == None:\r
+                    self._Sources = []\r
+                self._Sources.append(File)\r
         else:\r
             self._BuildType = self._ComponentType.upper()\r
             if not self._ComponentType:\r
@@ -1492,7 +1505,7 @@ class InfBuildData(ModuleBuildClassObject):
                         else:\r
                             Tool = ToolList[0]\r
                         ToolChain = "*_*_*_%s_FLAGS" % Tool\r
-                        ToolChainFamily = 'MSFT'    # R8.x only support MSFT tool chain\r
+                        ToolChainFamily = 'MSFT'    # EDK.x only support MSFT tool chain\r
                         #ignore not replaced macros in value\r
                         ValueList = GetSplitValueList(' ' + Value, '/D')\r
                         Dummy = ValueList[0]\r
@@ -1527,6 +1540,15 @@ class InfBuildData(ModuleBuildClassObject):
                 EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No BASE_NAME name", File=self.MetaFile)\r
         return self._BaseName\r
 \r
+    ## Retrieve DxsFile\r
+    def _GetDxsFile(self):\r
+        if self._DxsFile == None:\r
+            if self._Header_ == None:\r
+                self._GetHeaderInfo()\r
+            if self._DxsFile == None:\r
+                self._DxsFile = ''\r
+        return self._DxsFile\r
+\r
     ## Retrieve MODULE_TYPE\r
     def _GetModuleType(self):\r
         if self._ModuleType == None:\r
@@ -1709,7 +1731,7 @@ class InfBuildData(ModuleBuildClassObject):
                 ToolCode = Record[3]\r
                 FeatureFlag = Record[4]\r
                 if self._AutoGenVersion < 0x00010005:\r
-                    # old module source files (R8)\r
+                    # old module source files (EDK)\r
                     File = PathClass(NormPath(Record[0], Macros), self._ModuleDir, self._SourceOverridePath,\r
                                      '', False, self._Arch, ToolChainFamily, '', TagName, ToolCode)\r
                     # check the file validation\r
@@ -1746,13 +1768,13 @@ class InfBuildData(ModuleBuildClassObject):
                 self._LibraryClasses[Lib] = Instance\r
         return self._LibraryClasses\r
 \r
-    ## Retrieve library names (for R8.x style of modules)\r
+    ## Retrieve library names (for EDK.x style of modules)\r
     def _GetLibraryNames(self):\r
         if self._Libraries == None:\r
             self._Libraries = []\r
             RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch, self._Platform]\r
             for Record in RecordList:\r
-                # in case of name with '.lib' extension, which is unusual in R8.x inf\r
+                # in case of name with '.lib' extension, which is unusual in EDK.x inf\r
                 Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False)\r
                 LibraryName = os.path.splitext(Record[0])[0]\r
                 if LibraryName not in self._Libraries:\r
@@ -1807,14 +1829,14 @@ class InfBuildData(ModuleBuildClassObject):
                 self._Guids[CName] = Value\r
         return self._Guids\r
 \r
-    ## Retrieve include paths necessary for this module (for R8.x style of modules)\r
+    ## Retrieve include paths necessary for this module (for EDK.x style of modules)\r
     def _GetIncludes(self):\r
         if self._Includes == None:\r
             self._Includes = []\r
             if self._SourceOverridePath:\r
                 self._Includes.append(self._SourceOverridePath)\r
             RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch, self._Platform]\r
-            # [includes] section must be used only in old (R8.x) inf file\r
+            # [includes] section must be used only in old (EDK.x) inf file\r
             if self.AutoGenVersion >= 0x00010005 and len(RecordList) > 0:\r
                 EdkLogger.error('build', FORMAT_NOT_SUPPORTED, "No [include] section allowed",\r
                                 File=self.MetaFile, Line=RecordList[0][-1]-1)\r
@@ -1874,7 +1896,7 @@ class InfBuildData(ModuleBuildClassObject):
     ## Retrieve PCDs used in this module\r
     def _GetPcds(self):\r
         if self._Pcds == None:\r
-            self._Pcds = {}\r
+            self._Pcds = sdict()\r
             self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD))\r
             self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE))\r
             self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG))\r
@@ -1974,7 +1996,7 @@ class InfBuildData(ModuleBuildClassObject):
 \r
     ## Retrieve PCD for given type\r
     def _GetPcd(self, Type):\r
-        Pcds = {}\r
+        Pcds = sdict()\r
         PcdDict = tdict(True, 4)\r
         PcdList = []\r
         RecordList = self._RawData[Type, self._Arch, self._Platform]\r
@@ -2049,18 +2071,9 @@ class InfBuildData(ModuleBuildClassObject):
                     #\r
                     # Check hexadecimal token value length and format.\r
                     #\r
+                    ReIsValidPcdTokenValue = re.compile(r"^[0][x|X][0]*[0-9a-fA-F]{1,8}$", re.DOTALL)\r
                     if Pcd.TokenValue.startswith("0x") or Pcd.TokenValue.startswith("0X"):\r
-                        if len(Pcd.TokenValue) < 3 or len(Pcd.TokenValue) > 10:\r
-                            EdkLogger.error(\r
-                                    'build',\r
-                                    FORMAT_INVALID,\r
-                                    "The format of TokenValue [%s] of PCD [%s.%s] in [%s] is invalid:" % (Pcd.TokenValue, TokenSpaceGuid, PcdCName, str(Package)),\r
-                                    File =self.MetaFile, Line=LineNo,\r
-                                    ExtraData=None\r
-                                    )                          \r
-                        try:\r
-                            int (Pcd.TokenValue, 16)\r
-                        except:\r
+                        if ReIsValidPcdTokenValue.match(Pcd.TokenValue) == None:\r
                             EdkLogger.error(\r
                                     'build',\r
                                     FORMAT_INVALID,\r
@@ -2130,7 +2143,8 @@ class InfBuildData(ModuleBuildClassObject):
     ConstructorList         = property(_GetConstructor)\r
     DestructorList          = property(_GetDestructor)\r
     Defines                 = property(_GetDefines)\r
-\r
+    DxsFile                 = property(_GetDxsFile)\r
+    \r
     Binaries                = property(_GetBinaryFiles)\r
     Sources                 = property(_GetSourceFiles)\r
     LibraryClasses          = property(_GetLibraryClassUses)\r