diff options
Diffstat (limited to 'BaseTools/Source/Python/Common/TargetTxtClassObject.py')
| -rw-r--r-- | BaseTools/Source/Python/Common/TargetTxtClassObject.py | 398 |
1 files changed, 199 insertions, 199 deletions
diff --git a/BaseTools/Source/Python/Common/TargetTxtClassObject.py b/BaseTools/Source/Python/Common/TargetTxtClassObject.py index 363c38302b..ff2e4be90e 100644 --- a/BaseTools/Source/Python/Common/TargetTxtClassObject.py +++ b/BaseTools/Source/Python/Common/TargetTxtClassObject.py @@ -1,199 +1,199 @@ -## @file
-# This file is used to define each component of Target.txt file
-#
-# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-
-##
-# Import Modules
-#
-from __future__ import print_function
-from __future__ import absolute_import
-
-import Common.GlobalData as GlobalData
-import Common.LongFilePathOs as os
-from . import EdkLogger
-from . import DataType
-from .BuildToolError import *
-
-from Common.LongFilePathSupport import OpenLongFilePath as open
-from Common.MultipleWorkspace import MultipleWorkspace as mws
-
-gDefaultTargetTxtFile = "target.txt"
-
-## TargetTxtClassObject
-#
-# This class defined content used in file target.txt
-#
-# @param object: Inherited from object class
-# @param Filename: Input value for full path of target.txt
-#
-# @var TargetTxtDictionary: To store keys and values defined in target.txt
-#
-class TargetTxtClassObject(object):
- def __init__(self, Filename = None):
- self.TargetTxtDictionary = {
- DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM : '',
- DataType.TAB_TAT_DEFINES_ACTIVE_MODULE : '',
- DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF : '',
- DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER : '',
- DataType.TAB_TAT_DEFINES_TARGET : [],
- DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG : [],
- DataType.TAB_TAT_DEFINES_TARGET_ARCH : [],
- DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF : '',
- }
- self.ConfDirectoryPath = ""
- if Filename is not None:
- self.LoadTargetTxtFile(Filename)
-
- ## LoadTargetTxtFile
- #
- # Load target.txt file and parse it, return a set structure to store keys and values
- #
- # @param Filename: Input value for full path of target.txt
- #
- # @retval set() A set structure to store keys and values
- # @retval 1 Error happenes in parsing
- #
- def LoadTargetTxtFile(self, Filename):
- if os.path.exists(Filename) and os.path.isfile(Filename):
- return self.ConvertTextFileToDict(Filename, '#', '=')
- else:
- EdkLogger.error("Target.txt Parser", FILE_NOT_FOUND, ExtraData=Filename)
- return 1
-
- ## ConvertTextFileToDict
- #
- # Convert a text file to a dictionary of (name:value) pairs.
- # The data is saved to self.TargetTxtDictionary
- #
- # @param FileName: Text filename
- # @param CommentCharacter: Comment char, be used to ignore comment content
- # @param KeySplitCharacter: Key split char, between key name and key value. Key1 = Value1, '=' is the key split char
- #
- # @retval 0 Convert successfully
- # @retval 1 Open file failed
- #
- def ConvertTextFileToDict(self, FileName, CommentCharacter, KeySplitCharacter):
- F = None
- try:
- F = open(FileName, 'r')
- self.ConfDirectoryPath = os.path.dirname(FileName)
- except:
- EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=FileName)
- if F is not None:
- F.close()
-
- for Line in F:
- Line = Line.strip()
- if Line.startswith(CommentCharacter) or Line == '':
- continue
-
- LineList = Line.split(KeySplitCharacter, 1)
- Key = LineList[0].strip()
- if len(LineList) == 2:
- Value = LineList[1].strip()
- else:
- Value = ""
-
- if Key in [DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM, DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF, \
- DataType.TAB_TAT_DEFINES_ACTIVE_MODULE, DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF]:
- self.TargetTxtDictionary[Key] = Value.replace('\\', '/')
- if Key == DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF and self.TargetTxtDictionary[Key]:
- if self.TargetTxtDictionary[Key].startswith("Conf/"):
- Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())
- if not os.path.exists(Tools_Def) or not os.path.isfile(Tools_Def):
- # If Conf/Conf does not exist, try just the Conf/ directory
- Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].replace("Conf/", "", 1).strip())
- else:
- # The File pointed to by TOOL_CHAIN_CONF is not in a Conf/ directory
- Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())
- self.TargetTxtDictionary[Key] = Tools_Def
- if Key == DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF and self.TargetTxtDictionary[Key]:
- if self.TargetTxtDictionary[Key].startswith("Conf/"):
- Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())
- if not os.path.exists(Build_Rule) or not os.path.isfile(Build_Rule):
- # If Conf/Conf does not exist, try just the Conf/ directory
- Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].replace("Conf/", "", 1).strip())
- else:
- # The File pointed to by BUILD_RULE_CONF is not in a Conf/ directory
- Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip())
- self.TargetTxtDictionary[Key] = Build_Rule
- elif Key in [DataType.TAB_TAT_DEFINES_TARGET, DataType.TAB_TAT_DEFINES_TARGET_ARCH, \
- DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]:
- self.TargetTxtDictionary[Key] = Value.split()
- elif Key == DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER:
- try:
- V = int(Value, 0)
- except:
- EdkLogger.error("build", FORMAT_INVALID, "Invalid number of [%s]: %s." % (Key, Value),
- File=FileName)
- self.TargetTxtDictionary[Key] = Value
- #elif Key not in GlobalData.gGlobalDefines:
- # GlobalData.gGlobalDefines[Key] = Value
-
- F.close()
- return 0
-
-## TargetTxtDict
-#
-# Load target.txt in input Conf dir
-#
-# @param ConfDir: Conf dir
-#
-# @retval Target An instance of TargetTxtClassObject() with loaded target.txt
-#
-
-class TargetTxtDict():
-
- def __new__(cls, *args, **kw):
- if not hasattr(cls, '_instance'):
- orig = super(TargetTxtDict, cls)
- cls._instance = orig.__new__(cls, *args, **kw)
- return cls._instance
-
- def __init__(self):
- if not hasattr(self, 'Target'):
- self.TxtTarget = None
-
- @property
- def Target(self):
- if not self.TxtTarget:
- self._GetTarget()
- return self.TxtTarget
-
- def _GetTarget(self):
- Target = TargetTxtClassObject()
- ConfDirectory = GlobalData.gCmdConfDir
- if ConfDirectory:
- # Get alternate Conf location, if it is absolute, then just use the absolute directory name
- ConfDirectoryPath = os.path.normpath(ConfDirectory)
-
- if not os.path.isabs(ConfDirectoryPath):
- # Since alternate directory name is not absolute, the alternate directory is located within the WORKSPACE
- # This also handles someone specifying the Conf directory in the workspace. Using --conf=Conf
- ConfDirectoryPath = mws.join(os.environ["WORKSPACE"], ConfDirectoryPath)
- else:
- if "CONF_PATH" in os.environ:
- ConfDirectoryPath = os.path.normcase(os.path.normpath(os.environ["CONF_PATH"]))
- else:
- # Get standard WORKSPACE/Conf use the absolute path to the WORKSPACE/Conf
- ConfDirectoryPath = mws.join(os.environ["WORKSPACE"], 'Conf')
- GlobalData.gConfDirectory = ConfDirectoryPath
- targettxt = os.path.normpath(os.path.join(ConfDirectoryPath, gDefaultTargetTxtFile))
- if os.path.exists(targettxt):
- Target.LoadTargetTxtFile(targettxt)
- self.TxtTarget = Target
-
-##
-#
-# This acts like the main() function for the script, unless it is 'import'ed into another
-# script.
-#
-if __name__ == '__main__':
- pass
- Target = TargetTxtDict(os.getenv("WORKSPACE"))
- print(Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER])
- print(Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET])
- print(Target.TargetTxtDictionary)
+## @file +# This file is used to define each component of Target.txt file +# +# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +## +# Import Modules +# +from __future__ import print_function +from __future__ import absolute_import + +import Common.GlobalData as GlobalData +import Common.LongFilePathOs as os +from . import EdkLogger +from . import DataType +from .BuildToolError import * + +from Common.LongFilePathSupport import OpenLongFilePath as open +from Common.MultipleWorkspace import MultipleWorkspace as mws + +gDefaultTargetTxtFile = "target.txt" + +## TargetTxtClassObject +# +# This class defined content used in file target.txt +# +# @param object: Inherited from object class +# @param Filename: Input value for full path of target.txt +# +# @var TargetTxtDictionary: To store keys and values defined in target.txt +# +class TargetTxtClassObject(object): + def __init__(self, Filename = None): + self.TargetTxtDictionary = { + DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM : '', + DataType.TAB_TAT_DEFINES_ACTIVE_MODULE : '', + DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF : '', + DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER : '', + DataType.TAB_TAT_DEFINES_TARGET : [], + DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG : [], + DataType.TAB_TAT_DEFINES_TARGET_ARCH : [], + DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF : '', + } + self.ConfDirectoryPath = "" + if Filename is not None: + self.LoadTargetTxtFile(Filename) + + ## LoadTargetTxtFile + # + # Load target.txt file and parse it, return a set structure to store keys and values + # + # @param Filename: Input value for full path of target.txt + # + # @retval set() A set structure to store keys and values + # @retval 1 Error happenes in parsing + # + def LoadTargetTxtFile(self, Filename): + if os.path.exists(Filename) and os.path.isfile(Filename): + return self.ConvertTextFileToDict(Filename, '#', '=') + else: + EdkLogger.error("Target.txt Parser", FILE_NOT_FOUND, ExtraData=Filename) + return 1 + + ## ConvertTextFileToDict + # + # Convert a text file to a dictionary of (name:value) pairs. + # The data is saved to self.TargetTxtDictionary + # + # @param FileName: Text filename + # @param CommentCharacter: Comment char, be used to ignore comment content + # @param KeySplitCharacter: Key split char, between key name and key value. Key1 = Value1, '=' is the key split char + # + # @retval 0 Convert successfully + # @retval 1 Open file failed + # + def ConvertTextFileToDict(self, FileName, CommentCharacter, KeySplitCharacter): + F = None + try: + F = open(FileName, 'r') + self.ConfDirectoryPath = os.path.dirname(FileName) + except: + EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=FileName) + if F is not None: + F.close() + + for Line in F: + Line = Line.strip() + if Line.startswith(CommentCharacter) or Line == '': + continue + + LineList = Line.split(KeySplitCharacter, 1) + Key = LineList[0].strip() + if len(LineList) == 2: + Value = LineList[1].strip() + else: + Value = "" + + if Key in [DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM, DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF, \ + DataType.TAB_TAT_DEFINES_ACTIVE_MODULE, DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF]: + self.TargetTxtDictionary[Key] = Value.replace('\\', '/') + if Key == DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF and self.TargetTxtDictionary[Key]: + if self.TargetTxtDictionary[Key].startswith("Conf/"): + Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip()) + if not os.path.exists(Tools_Def) or not os.path.isfile(Tools_Def): + # If Conf/Conf does not exist, try just the Conf/ directory + Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].replace("Conf/", "", 1).strip()) + else: + # The File pointed to by TOOL_CHAIN_CONF is not in a Conf/ directory + Tools_Def = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip()) + self.TargetTxtDictionary[Key] = Tools_Def + if Key == DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF and self.TargetTxtDictionary[Key]: + if self.TargetTxtDictionary[Key].startswith("Conf/"): + Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip()) + if not os.path.exists(Build_Rule) or not os.path.isfile(Build_Rule): + # If Conf/Conf does not exist, try just the Conf/ directory + Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].replace("Conf/", "", 1).strip()) + else: + # The File pointed to by BUILD_RULE_CONF is not in a Conf/ directory + Build_Rule = os.path.join(self.ConfDirectoryPath, self.TargetTxtDictionary[Key].strip()) + self.TargetTxtDictionary[Key] = Build_Rule + elif Key in [DataType.TAB_TAT_DEFINES_TARGET, DataType.TAB_TAT_DEFINES_TARGET_ARCH, \ + DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]: + self.TargetTxtDictionary[Key] = Value.split() + elif Key == DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER: + try: + V = int(Value, 0) + except: + EdkLogger.error("build", FORMAT_INVALID, "Invalid number of [%s]: %s." % (Key, Value), + File=FileName) + self.TargetTxtDictionary[Key] = Value + #elif Key not in GlobalData.gGlobalDefines: + # GlobalData.gGlobalDefines[Key] = Value + + F.close() + return 0 + +## TargetTxtDict +# +# Load target.txt in input Conf dir +# +# @param ConfDir: Conf dir +# +# @retval Target An instance of TargetTxtClassObject() with loaded target.txt +# + +class TargetTxtDict(): + + def __new__(cls, *args, **kw): + if not hasattr(cls, '_instance'): + orig = super(TargetTxtDict, cls) + cls._instance = orig.__new__(cls, *args, **kw) + return cls._instance + + def __init__(self): + if not hasattr(self, 'Target'): + self.TxtTarget = None + + @property + def Target(self): + if not self.TxtTarget: + self._GetTarget() + return self.TxtTarget + + def _GetTarget(self): + Target = TargetTxtClassObject() + ConfDirectory = GlobalData.gCmdConfDir + if ConfDirectory: + # Get alternate Conf location, if it is absolute, then just use the absolute directory name + ConfDirectoryPath = os.path.normpath(ConfDirectory) + + if not os.path.isabs(ConfDirectoryPath): + # Since alternate directory name is not absolute, the alternate directory is located within the WORKSPACE + # This also handles someone specifying the Conf directory in the workspace. Using --conf=Conf + ConfDirectoryPath = mws.join(os.environ["WORKSPACE"], ConfDirectoryPath) + else: + if "CONF_PATH" in os.environ: + ConfDirectoryPath = os.path.normcase(os.path.normpath(os.environ["CONF_PATH"])) + else: + # Get standard WORKSPACE/Conf use the absolute path to the WORKSPACE/Conf + ConfDirectoryPath = mws.join(os.environ["WORKSPACE"], 'Conf') + GlobalData.gConfDirectory = ConfDirectoryPath + targettxt = os.path.normpath(os.path.join(ConfDirectoryPath, gDefaultTargetTxtFile)) + if os.path.exists(targettxt): + Target.LoadTargetTxtFile(targettxt) + self.TxtTarget = Target + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + pass + Target = TargetTxtDict(os.getenv("WORKSPACE")) + print(Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER]) + print(Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET]) + print(Target.TargetTxtDictionary) |
