]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/build/build.py
BaseTools: Fix DSC override of Guided tool
[mirror_edk2.git] / BaseTools / Source / Python / build / build.py
index e5693c0d27a2010ef5a20803386cbce48934f55a..037493f0b02a78da6f4b1303d866838db1e59988 100755 (executable)
@@ -62,6 +62,7 @@ from AutoGen.ModuleAutoGenHelper import WorkSpaceInfo, PlatformInfo
 from GenFds.FdfParser import FdfParser\r
 from AutoGen.IncludesAutoGen import IncludesAutoGen\r
 from GenFds.GenFds import resetFdsGlobalVariable\r
+from AutoGen.AutoGen import CalculatePriorityValue\r
 \r
 ## standard targets of build command\r
 gSupportedTarget = ['all', 'genc', 'genmake', 'modules', 'libraries', 'fds', 'clean', 'cleanall', 'cleanlib', 'run']\r
@@ -2425,27 +2426,42 @@ class Build():
                 FvDir = Wa.FvDir\r
                 if not os.path.exists(FvDir):\r
                     continue\r
-\r
                 for Arch in self.ArchList:\r
-                    # Look through the tool definitions for GUIDed tools\r
+                    guidList = []\r
+                    tooldefguidList = []\r
                     guidAttribs = []\r
-                    for (attrib, value) in self.ToolDef.ToolsDefTxtDictionary.items():\r
-                        GuidBuildTarget, GuidToolChain, GuidArch, GuidTool, GuidAttr = attrib.split('_')\r
-                        if GuidAttr.upper() == 'GUID':\r
-                            if GuidBuildTarget == TAB_STAR:\r
-                                GuidBuildTarget = BuildTarget\r
-                            if GuidToolChain == TAB_STAR:\r
-                                GuidToolChain = ToolChain\r
-                            if GuidArch == TAB_STAR:\r
-                                GuidArch = Arch\r
-                            if GuidBuildTarget == BuildTarget and GuidToolChain == ToolChain and GuidArch == Arch:\r
-                                path = '_'.join(attrib.split('_')[:-1]) + '_PATH'\r
-                                if path in self.ToolDef.ToolsDefTxtDictionary:\r
-                                    path = self.ToolDef.ToolsDefTxtDictionary[path]\r
-                                    path = self.GetRealPathOfTool(path)\r
-                                    guidAttribs.append((value.lower(), GuidTool, path))\r
+                    for Platform in Wa.AutoGenObjectList:\r
+                        if Platform.BuildTarget != BuildTarget:\r
+                            continue\r
+                        if Platform.ToolChain != ToolChain:\r
+                            continue\r
+                        if Platform.Arch != Arch:\r
+                            continue\r
+                        if hasattr (Platform, 'BuildOption'):\r
+                            for Tool in Platform.BuildOption:\r
+                                if 'GUID' in Platform.BuildOption[Tool]:\r
+                                    if 'PATH' in Platform.BuildOption[Tool]:\r
+                                        value = Platform.BuildOption[Tool]['GUID']\r
+                                        if value in guidList:\r
+                                            EdkLogger.error("build", FORMAT_INVALID, "Duplicate GUID value %s used with Tool %s in DSC [BuildOptions]." % (value, Tool))\r
+                                        path = Platform.BuildOption[Tool]['PATH']\r
+                                        guidList.append(value)\r
+                                        guidAttribs.append((value, Tool, path))\r
+                        for Tool in Platform.ToolDefinition:\r
+                            if 'GUID' in Platform.ToolDefinition[Tool]:\r
+                                if 'PATH' in Platform.ToolDefinition[Tool]:\r
+                                    value = Platform.ToolDefinition[Tool]['GUID']\r
+                                    if value in tooldefguidList:\r
+                                        EdkLogger.error("build", FORMAT_INVALID, "Duplicate GUID value %s used with Tool %s in tools_def.txt." % (value, Tool))\r
+                                    tooldefguidList.append(value)\r
+                                    if value in guidList:\r
+                                        # Already added by platform\r
+                                        continue\r
+                                    path = Platform.ToolDefinition[Tool]['PATH']\r
+                                    guidList.append(value)\r
+                                    guidAttribs.append((value, Tool, path))\r
                     # Sort by GuidTool name\r
-                    sorted (guidAttribs, key=lambda x: x[1])\r
+                    guidAttribs = sorted (guidAttribs, key=lambda x: x[1])\r
                     # Write out GuidedSecTools.txt\r
                     toolsFile = os.path.join(FvDir, 'GuidedSectionTools.txt')\r
                     toolsFile = open(toolsFile, 'wt')\r