]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/build/build.py
BaseTools: check CONF_PATH env to get the configure files
[mirror_edk2.git] / BaseTools / Source / Python / build / build.py
index 37ce8e16aa9d5aa24857a5a3db7f01315aeddab7..be02119042f6a88776963beb50c1c4ee6f0b7b60 100644 (file)
@@ -110,6 +110,12 @@ def CheckEnvVariable():
     # set multiple workspace\r
     PackagesPath = os.getenv("PACKAGES_PATH")\r
     mws.setWs(WorkspaceDir, PackagesPath)\r
+    if mws.PACKAGES_PATH:\r
+        for Path in mws.PACKAGES_PATH:\r
+            if not os.path.exists(Path):\r
+                EdkLogger.error("build", FILE_NOT_FOUND, "One Path in PACKAGES_PATH doesn't exist", ExtraData="%s" % Path)\r
+            elif ' ' in Path:\r
+                EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in PACKAGES_PATH", ExtraData=Path)\r
 \r
     #\r
     # Check EFI_SOURCE (Edk build convention). EDK_SOURCE will always point to ECP\r
@@ -769,8 +775,11 @@ class Build():
                 # This also handles someone specifying the Conf directory in the workspace. Using --conf=Conf\r
                 ConfDirectoryPath = mws.join(self.WorkspaceDir, ConfDirectoryPath)\r
         else:\r
-            # Get standard WORKSPACE/Conf use the absolute path to the WORKSPACE/Conf\r
-            ConfDirectoryPath = mws.join(self.WorkspaceDir, 'Conf')\r
+            if "CONF_PATH" in os.environ:\r
+                ConfDirectoryPath = os.path.normcase(os.path.normpath(os.environ["CONF_PATH"]))\r
+            else:\r
+                # Get standard WORKSPACE/Conf use the absolute path to the WORKSPACE/Conf\r
+                ConfDirectoryPath = mws.join(self.WorkspaceDir, 'Conf')\r
         GlobalData.gConfDirectory = ConfDirectoryPath\r
         GlobalData.gDatabasePath = os.path.normpath(os.path.join(ConfDirectoryPath, GlobalData.gDatabasePath))\r
 \r
@@ -780,6 +789,7 @@ class Build():
             self.Db = WorkspaceDatabase(GlobalData.gDatabasePath, self.Reparse)\r
         self.BuildDatabase = self.Db.BuildObject\r
         self.Platform = None\r
+        self.ToolChainFamily = None\r
         self.LoadFixAddress = 0\r
         self.UniFlag        = BuildOptions.Flag\r
         self.BuildModules = []\r
@@ -805,7 +815,7 @@ class Build():
         if "EDK_TOOLS_BIN" in os.environ:\r
             # Print the same path style with WORKSPACE env. \r
             EdkLogger.quiet("%-16s = %s" % ("EDK_TOOLS_BIN", os.path.normcase(os.path.normpath(os.environ["EDK_TOOLS_BIN"]))))\r
-\r
+        EdkLogger.quiet("%-16s = %s" % ("CONF_PATH", GlobalData.gConfDirectory))\r
         self.InitPreBuild()\r
         self.InitPostBuild()\r
         if self.PrebuildScript:\r
@@ -872,6 +882,17 @@ class Build():
         else:\r
             self.ToolChainList = NewToolChainList\r
 \r
+        ToolChainFamily = []\r
+        ToolDefinition = self.ToolDef.ToolsDefTxtDatabase\r
+        for Tool in self.ToolChainList:\r
+            if TAB_TOD_DEFINES_FAMILY not in ToolDefinition or Tool not in ToolDefinition[TAB_TOD_DEFINES_FAMILY] \\r
+               or not ToolDefinition[TAB_TOD_DEFINES_FAMILY][Tool]:\r
+                EdkLogger.warn("No tool chain family found in configuration for %s. Default to MSFT." % Tool)\r
+                ToolChainFamily.append("MSFT")\r
+            else:\r
+                ToolChainFamily.append(ToolDefinition[TAB_TOD_DEFINES_FAMILY][Tool])\r
+        self.ToolChainFamily = ToolChainFamily\r
+\r
         if self.ThreadNumber == None:\r
             self.ThreadNumber = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER]\r
             if self.ThreadNumber == '':\r
@@ -920,6 +941,9 @@ class Build():
 \r
     def InitPreBuild(self):\r
         self.LoadConfiguration()\r
+        ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc", False)\r
+        if ErrorCode != 0:\r
+            EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo)\r
         if self.BuildTargetList:\r
             GlobalData.gGlobalDefines['TARGET'] = self.BuildTargetList[0]\r
         if self.ArchList:\r
@@ -927,6 +951,8 @@ class Build():
         if self.ToolChainList:\r
             GlobalData.gGlobalDefines['TOOLCHAIN'] = self.ToolChainList[0]\r
             GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = self.ToolChainList[0]\r
+        if self.ToolChainFamily:\r
+            GlobalData.gGlobalDefines['FAMILY'] = self.ToolChainFamily[0]\r
         if 'PREBUILD' in GlobalData.gCommandLineDefines.keys():\r
             self.Prebuild   = GlobalData.gCommandLineDefines.get('PREBUILD')\r
         else:\r
@@ -1590,9 +1616,12 @@ class Build():
         SaveFileOnChange(self.PlatformBuildPath, '# DO NOT EDIT \n# FILE auto-generated\n', False)\r
         for BuildTarget in self.BuildTargetList:\r
             GlobalData.gGlobalDefines['TARGET'] = BuildTarget\r
+            index = 0\r
             for ToolChain in self.ToolChainList:\r
                 GlobalData.gGlobalDefines['TOOLCHAIN'] = ToolChain\r
                 GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = ToolChain\r
+                GlobalData.gGlobalDefines['FAMILY'] = self.ToolChainFamily[index]\r
+                index += 1\r
                 Wa = WorkspaceAutoGen(\r
                         self.WorkspaceDir,\r
                         self.PlatformFile,\r
@@ -1670,9 +1699,12 @@ class Build():
     def _BuildModule(self):\r
         for BuildTarget in self.BuildTargetList:\r
             GlobalData.gGlobalDefines['TARGET'] = BuildTarget\r
+            index = 0\r
             for ToolChain in self.ToolChainList:\r
                 GlobalData.gGlobalDefines['TOOLCHAIN'] = ToolChain\r
                 GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = ToolChain\r
+                GlobalData.gGlobalDefines['FAMILY'] = self.ToolChainFamily[index]\r
+                index += 1\r
                 #\r
                 # module build needs platform build information, so get platform\r
                 # AutoGen first\r
@@ -1764,9 +1796,12 @@ class Build():
         SaveFileOnChange(self.PlatformBuildPath, '# DO NOT EDIT \n# FILE auto-generated\n', False)\r
         for BuildTarget in self.BuildTargetList:\r
             GlobalData.gGlobalDefines['TARGET'] = BuildTarget\r
+            index = 0\r
             for ToolChain in self.ToolChainList:\r
                 GlobalData.gGlobalDefines['TOOLCHAIN'] = ToolChain\r
                 GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = ToolChain\r
+                GlobalData.gGlobalDefines['FAMILY'] = self.ToolChainFamily[index]\r
+                index += 1\r
                 Wa = WorkspaceAutoGen(\r
                         self.WorkspaceDir,\r
                         self.PlatformFile,\r