]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/ToolDefClassObject.py
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / Source / Python / Common / ToolDefClassObject.py
index 0a78123e2c4b5af0ffe9ae3e063bd4518942bb9b..2b4b23849196199a8715efc46e8c9f0087557488 100644 (file)
@@ -1,14 +1,8 @@
 ## @file\r
 # This file is used to define each component of tools_def.txt file\r
 #\r
-# Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>\r
-# 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
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
 #\r
 \r
 ##\r
@@ -92,26 +86,9 @@ class ToolDefClassObject(object):
         self.ToolsDefTxtDatabase[TAB_TOD_DEFINES_TARGET_ARCH].sort()\r
         self.ToolsDefTxtDatabase[TAB_TOD_DEFINES_COMMAND_TYPE].sort()\r
 \r
-        KeyList = [TAB_TOD_DEFINES_TARGET, TAB_TOD_DEFINES_TOOL_CHAIN_TAG, TAB_TOD_DEFINES_TARGET_ARCH, TAB_TOD_DEFINES_COMMAND_TYPE]\r
-        for Index in range(3, -1, -1):\r
-            # make a copy of the keys to enumerate over to prevent issues when\r
-            # adding/removing items from the original dict.\r
-            for Key in list(self.ToolsDefTxtDictionary.keys()):\r
-                List = Key.split('_')\r
-                if List[Index] == TAB_STAR:\r
-                    for String in self.ToolsDefTxtDatabase[KeyList[Index]]:\r
-                        List[Index] = String\r
-                        NewKey = '%s_%s_%s_%s_%s' % tuple(List)\r
-                        if NewKey not in self.ToolsDefTxtDictionary:\r
-                            self.ToolsDefTxtDictionary[NewKey] = self.ToolsDefTxtDictionary[Key]\r
-                    del self.ToolsDefTxtDictionary[Key]\r
-                elif List[Index] not in self.ToolsDefTxtDatabase[KeyList[Index]]:\r
-                    del self.ToolsDefTxtDictionary[Key]\r
-\r
-\r
     ## IncludeToolDefFile\r
     #\r
-    # Load target.txt file and parse it as if it's contents were inside the main file\r
+    # Load target.txt file and parse it as if its contents were inside the main file\r
     #\r
     # @param Filename:  Input value for full path of tools_def.txt\r
     #\r
@@ -268,18 +245,40 @@ class ToolDefClassObject(object):
 #\r
 # @retval ToolDef An instance of ToolDefClassObject() with loaded tools_def.txt\r
 #\r
-def ToolDefDict(ConfDir):\r
-    Target = TargetTxtDict(ConfDir)\r
-    ToolDef = ToolDefClassObject()\r
-    if TAB_TAT_DEFINES_TOOL_CHAIN_CONF in Target.TargetTxtDictionary:\r
-        ToolsDefFile = Target.TargetTxtDictionary[TAB_TAT_DEFINES_TOOL_CHAIN_CONF]\r
-        if ToolsDefFile:\r
-            ToolDef.LoadToolDefFile(os.path.normpath(ToolsDefFile))\r
+\r
+\r
+class ToolDefDict():\r
+\r
+    def __new__(cls, ConfDir, *args, **kw):\r
+        if not hasattr(cls, '_instance'):\r
+            orig = super(ToolDefDict, cls)\r
+            cls._instance = orig.__new__(cls, *args, **kw)\r
+        return cls._instance\r
+\r
+    def __init__(self, ConfDir):\r
+        self.ConfDir = ConfDir\r
+        if not hasattr(self, 'ToolDef'):\r
+            self._ToolDef = None\r
+\r
+    @property\r
+    def ToolDef(self):\r
+        if not self._ToolDef:\r
+            self._GetToolDef()\r
+        return self._ToolDef\r
+\r
+    def _GetToolDef(self):\r
+        TargetObj = TargetTxtDict()\r
+        Target = TargetObj.Target\r
+        ToolDef = ToolDefClassObject()\r
+        if TAB_TAT_DEFINES_TOOL_CHAIN_CONF in Target.TargetTxtDictionary:\r
+            ToolsDefFile = Target.TargetTxtDictionary[TAB_TAT_DEFINES_TOOL_CHAIN_CONF]\r
+            if ToolsDefFile:\r
+                ToolDef.LoadToolDefFile(os.path.normpath(ToolsDefFile))\r
+            else:\r
+                ToolDef.LoadToolDefFile(os.path.normpath(os.path.join(self.ConfDir, gDefaultToolsDefFile)))\r
         else:\r
-            ToolDef.LoadToolDefFile(os.path.normpath(os.path.join(ConfDir, gDefaultToolsDefFile)))\r
-    else:\r
-        ToolDef.LoadToolDefFile(os.path.normpath(os.path.join(ConfDir, gDefaultToolsDefFile)))\r
-    return ToolDef\r
+            ToolDef.LoadToolDefFile(os.path.normpath(os.path.join(self.ConfDir, gDefaultToolsDefFile)))\r
+        self._ToolDef = ToolDef\r
 \r
 ##\r
 #\r