BaseTools: Singleton the object to handle build conf file
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1875 The build config files are target.txt, build rule, tooldef During a build, the config is not changed, so the object to handle them need to be singleton. Cc: Liming Gao <liming.gao@intel.com> Signed-off-by: Bob Feng <bob.c.feng@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Acked-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@ -22,9 +22,9 @@ from Common.BuildToolError import COMMAND_FAILURE,GENFDS_ERROR
|
||||
from Common import EdkLogger
|
||||
from Common.Misc import SaveFileOnChange
|
||||
|
||||
from Common.TargetTxtClassObject import TargetTxtClassObject
|
||||
from Common.ToolDefClassObject import ToolDefClassObject, ToolDefDict
|
||||
from AutoGen.BuildEngine import BuildRule
|
||||
from Common.TargetTxtClassObject import TargetTxt
|
||||
from Common.ToolDefClassObject import ToolDef
|
||||
from AutoGen.BuildEngine import BuildRuleObj
|
||||
import Common.DataType as DataType
|
||||
from Common.Misc import PathClass
|
||||
from Common.LongFilePathSupport import OpenLongFilePath as open
|
||||
@ -95,31 +95,21 @@ class GenFdsGlobalVariable:
|
||||
def _LoadBuildRule():
|
||||
if GenFdsGlobalVariable.__BuildRuleDatabase:
|
||||
return GenFdsGlobalVariable.__BuildRuleDatabase
|
||||
BuildConfigurationFile = os.path.normpath(os.path.join(GenFdsGlobalVariable.ConfDir, "target.txt"))
|
||||
TargetTxt = TargetTxtClassObject()
|
||||
if os.path.isfile(BuildConfigurationFile) == True:
|
||||
TargetTxt.LoadTargetTxtFile(BuildConfigurationFile)
|
||||
if DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF in TargetTxt.TargetTxtDictionary:
|
||||
BuildRuleFile = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF]
|
||||
if not BuildRuleFile:
|
||||
BuildRuleFile = 'Conf/build_rule.txt'
|
||||
GenFdsGlobalVariable.__BuildRuleDatabase = BuildRule(BuildRuleFile)
|
||||
ToolDefinitionFile = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF]
|
||||
if ToolDefinitionFile == '':
|
||||
ToolDefinitionFile = "Conf/tools_def.txt"
|
||||
if os.path.isfile(ToolDefinitionFile):
|
||||
ToolDef = ToolDefClassObject()
|
||||
ToolDef.LoadToolDefFile(ToolDefinitionFile)
|
||||
ToolDefinition = ToolDef.ToolsDefTxtDatabase
|
||||
if DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY in ToolDefinition \
|
||||
and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY] \
|
||||
and ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]:
|
||||
GenFdsGlobalVariable.BuildRuleFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]
|
||||
GenFdsGlobalVariable.__BuildRuleDatabase = BuildRuleObj
|
||||
ToolDefinitionFile = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF]
|
||||
if ToolDefinitionFile == '':
|
||||
ToolDefinitionFile = "Conf/tools_def.txt"
|
||||
if os.path.isfile(ToolDefinitionFile):
|
||||
ToolDefinition = ToolDef.ToolsDefTxtDatabase
|
||||
if DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY in ToolDefinition \
|
||||
and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY] \
|
||||
and ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]:
|
||||
GenFdsGlobalVariable.BuildRuleFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_BUILDRULEFAMILY][GenFdsGlobalVariable.ToolChainTag]
|
||||
|
||||
if DataType.TAB_TOD_DEFINES_FAMILY in ToolDefinition \
|
||||
and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY] \
|
||||
and ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]:
|
||||
GenFdsGlobalVariable.ToolChainFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]
|
||||
if DataType.TAB_TOD_DEFINES_FAMILY in ToolDefinition \
|
||||
and GenFdsGlobalVariable.ToolChainTag in ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY] \
|
||||
and ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]:
|
||||
GenFdsGlobalVariable.ToolChainFamily = ToolDefinition[DataType.TAB_TOD_DEFINES_FAMILY][GenFdsGlobalVariable.ToolChainTag]
|
||||
return GenFdsGlobalVariable.__BuildRuleDatabase
|
||||
|
||||
## GetBuildRules
|
||||
@ -839,7 +829,7 @@ class GenFdsGlobalVariable:
|
||||
# @param NameGuid The Guid name
|
||||
#
|
||||
def FindExtendTool(KeyStringList, CurrentArchList, NameGuid):
|
||||
ToolDb = ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDatabase
|
||||
ToolDb = ToolDef.ToolsDefTxtDatabase
|
||||
# if user not specify filter, try to deduce it from global data.
|
||||
if KeyStringList is None or KeyStringList == []:
|
||||
Target = GenFdsGlobalVariable.TargetName
|
||||
@ -855,15 +845,15 @@ def FindExtendTool(KeyStringList, CurrentArchList, NameGuid):
|
||||
if NameGuid in GenFdsGlobalVariable.GuidToolDefinition:
|
||||
return GenFdsGlobalVariable.GuidToolDefinition[NameGuid]
|
||||
|
||||
ToolDefinition = ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDictionary
|
||||
ToolDefinition = ToolDef.ToolsDefTxtDictionary
|
||||
ToolPathTmp = None
|
||||
ToolOption = None
|
||||
ToolPathKey = None
|
||||
ToolOptionKey = None
|
||||
KeyList = None
|
||||
for ToolDef in ToolDefinition.items():
|
||||
if NameGuid.lower() == ToolDef[1].lower():
|
||||
KeyList = ToolDef[0].split('_')
|
||||
for tool_def in ToolDefinition.items():
|
||||
if NameGuid.lower() == tool_def[1].lower():
|
||||
KeyList = tool_def[0].split('_')
|
||||
Key = KeyList[0] + \
|
||||
'_' + \
|
||||
KeyList[1] + \
|
||||
|
Reference in New Issue
Block a user