From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: bob.c.feng@intel.com) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by groups.io with SMTP; Fri, 28 Jun 2019 00:07:10 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Jun 2019 00:07:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,426,1557212400"; d="scan'208";a="167681186" Received: from shwdepsi1121.ccr.corp.intel.com ([10.239.158.47]) by orsmga006.jf.intel.com with ESMTP; 28 Jun 2019 00:07:08 -0700 From: "Bob Feng" To: devel@edk2.groups.io Cc: Liming Gao , Bob Feng Subject: [Patch 1/1] BaseTools: Singleton the object to handle build conf file Date: Fri, 28 Jun 2019 15:07:03 +0800 Message-Id: <20190628070703.17224-1-bob.c.feng@intel.com> X-Mailer: git-send-email 2.20.1.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Bob Feng --- BaseTools/Source/Python/AutoGen/AutoGen.py | 33 ++---------- .../Source/Python/AutoGen/BuildEngine.py | 22 ++++++++ .../Python/Common/TargetTxtClassObject.py | 2 + .../Python/Common/ToolDefClassObject.py | 6 ++- BaseTools/Source/Python/GenFds/GenFds.py | 4 +- .../Python/GenFds/GenFdsGlobalVariable.py | 54 ++++++++----------- .../Source/Python/Workspace/DscBuildData.py | 8 +-- BaseTools/Source/Python/build/build.py | 29 +++------- 8 files changed, 62 insertions(+), 96 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index e8e09dc8a366..a1f7f5641e09 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -22,11 +22,12 @@ from . import GenC from . import GenMake from . import GenDepex from io import BytesIO from .StrGather import * -from .BuildEngine import BuildRule +from .BuildEngine import BuildRuleObj as BuildRule +from .BuildEngine import gDefaultBuildRuleFile,AutoGenReqBuildRuleVerNum import shutil from Common.LongFilePathSupport import CopyLongFilePath from Common.BuildToolError import * from Common.DataType import * from Common.Misc import * @@ -76,16 +77,10 @@ gEfiVarStoreGuidPattern = re.compile("\s*guid\s*=\s*({.*?{.*?}\s*})") ## Mapping Makefile type gMakeTypeMap = {TAB_COMPILER_MSFT:"nmake", "GCC":"gmake"} -## Build rule configuration file -gDefaultBuildRuleFile = 'build_rule.txt' - -## Build rule default version -AutoGenReqBuildRuleVerNum = "0.1" - ## default file name for AutoGen gAutoGenCodeFileName = "AutoGen.c" gAutoGenHeaderFileName = "AutoGen.h" gAutoGenStringFileName = "%(module_name)sStrDefs.h" gAutoGenStringFormFileName = "%(module_name)sStrDefs.hpk" @@ -1964,32 +1959,10 @@ class PlatformAutoGen(AutoGen): ## Return the build options specific for EDKII modules in this platform @cached_property def EdkIIBuildOption(self): return self._ExpandBuildOption(self.Platform.BuildOptions, EDKII_NAME) - ## Parse build_rule.txt in Conf Directory. - # - # @retval BuildRule object - # - @cached_property - def BuildRule(self): - BuildRuleFile = None - if TAB_TAT_DEFINES_BUILD_RULE_CONF in self.Workspace.TargetTxt.TargetTxtDictionary: - BuildRuleFile = self.Workspace.TargetTxt.TargetTxtDictionary[TAB_TAT_DEFINES_BUILD_RULE_CONF] - if not BuildRuleFile: - BuildRuleFile = gDefaultBuildRuleFile - RetVal = BuildRule(BuildRuleFile) - if RetVal._FileVersion == "": - RetVal._FileVersion = AutoGenReqBuildRuleVerNum - else: - if RetVal._FileVersion < AutoGenReqBuildRuleVerNum : - # If Build Rule's version is less than the version number required by the tools, halting the build. - EdkLogger.error("build", AUTOGEN_ERROR, - ExtraData="The version number [%s] of build_rule.txt is less than the version number required by the AutoGen.(the minimum required version number is [%s])"\ - % (RetVal._FileVersion, AutoGenReqBuildRuleVerNum)) - return RetVal - ## Summarize the packages used by modules in this platform @cached_property def PackageList(self): RetVal = set() for La in self.LibraryAutoGenList: @@ -3143,11 +3116,11 @@ class ModuleAutoGen(AutoGen): return RetVal @cached_property def BuildRules(self): RetVal = {} - BuildRuleDatabase = self.PlatformInfo.BuildRule + BuildRuleDatabase = BuildRule for Type in BuildRuleDatabase.FileTypeList: #first try getting build rule by BuildRuleFamily RuleObject = BuildRuleDatabase[Type, self.BuildType, self.Arch, self.BuildRuleFamily] if not RuleObject: # build type is always module type, but ... diff --git a/BaseTools/Source/Python/AutoGen/BuildEngine.py b/BaseTools/Source/Python/AutoGen/BuildEngine.py index 14e61140e7ba..bb9153447793 100644 --- a/BaseTools/Source/Python/AutoGen/BuildEngine.py +++ b/BaseTools/Source/Python/AutoGen/BuildEngine.py @@ -18,10 +18,13 @@ from Common.LongFilePathSupport import OpenLongFilePath as open from Common.GlobalData import * from Common.BuildToolError import * from Common.Misc import tdict, PathClass from Common.StringUtils import NormPath from Common.DataType import * +from Common.TargetTxtClassObject import TargetTxt +gDefaultBuildRuleFile = 'build_rule.txt' +AutoGenReqBuildRuleVerNum = '0.1' import Common.EdkLogger as EdkLogger ## Convert file type to file list macro name # @@ -581,10 +584,29 @@ class BuildRule: _ExtraDependency : ParseCommonSubSection, _Command : ParseCommonSubSection, _UnknownSection : SkipSection, } +def GetBuildRule(): + BuildRuleFile = None + if TAB_TAT_DEFINES_BUILD_RULE_CONF in TargetTxt.TargetTxtDictionary: + BuildRuleFile = TargetTxt.TargetTxtDictionary[TAB_TAT_DEFINES_BUILD_RULE_CONF] + if not BuildRuleFile: + BuildRuleFile = gDefaultBuildRuleFile + RetVal = BuildRule(BuildRuleFile) + if RetVal._FileVersion == "": + RetVal._FileVersion = AutoGenReqBuildRuleVerNum + else: + if RetVal._FileVersion < AutoGenReqBuildRuleVerNum : + # If Build Rule's version is less than the version number required by the tools, halting the build. + EdkLogger.error("build", AUTOGEN_ERROR, + ExtraData="The version number [%s] of build_rule.txt is less than the version number required by the AutoGen.(the minimum required version number is [%s])"\ + % (RetVal._FileVersion, AutoGenReqBuildRuleVerNum)) + return RetVal + +BuildRuleObj = GetBuildRule() + # This acts like the main() function for the script, unless it is 'import'ed into another # script. if __name__ == '__main__': import sys EdkLogger.Initialize() diff --git a/BaseTools/Source/Python/Common/TargetTxtClassObject.py b/BaseTools/Source/Python/Common/TargetTxtClassObject.py index 9d7673b41bb5..79a5acc01074 100644 --- a/BaseTools/Source/Python/Common/TargetTxtClassObject.py +++ b/BaseTools/Source/Python/Common/TargetTxtClassObject.py @@ -144,10 +144,12 @@ class TargetTxtClassObject(object): def TargetTxtDict(ConfDir): Target = TargetTxtClassObject() Target.LoadTargetTxtFile(os.path.normpath(os.path.join(ConfDir, gDefaultTargetTxtFile))) return Target +TargetTxt = TargetTxtDict(os.path.join(os.getenv("WORKSPACE"),"Conf")) + ## # # This acts like the main() function for the script, unless it is 'import'ed into another # script. # diff --git a/BaseTools/Source/Python/Common/ToolDefClassObject.py b/BaseTools/Source/Python/Common/ToolDefClassObject.py index 5d692ea13cfc..0bfa263270c3 100644 --- a/BaseTools/Source/Python/Common/ToolDefClassObject.py +++ b/BaseTools/Source/Python/Common/ToolDefClassObject.py @@ -12,11 +12,11 @@ from __future__ import absolute_import import Common.LongFilePathOs as os import re from . import EdkLogger from .BuildToolError import * -from Common.TargetTxtClassObject import TargetTxtDict +from Common.TargetTxtClassObject import TargetTxt from Common.LongFilePathSupport import OpenLongFilePath as open from Common.Misc import PathClass from Common.StringUtils import NormPath import Common.GlobalData as GlobalData from Common import GlobalData @@ -261,11 +261,11 @@ class ToolDefClassObject(object): # @param ConfDir: Conf dir # # @retval ToolDef An instance of ToolDefClassObject() with loaded tools_def.txt # def ToolDefDict(ConfDir): - Target = TargetTxtDict(ConfDir) + Target = TargetTxt ToolDef = ToolDefClassObject() if TAB_TAT_DEFINES_TOOL_CHAIN_CONF in Target.TargetTxtDictionary: ToolsDefFile = Target.TargetTxtDictionary[TAB_TAT_DEFINES_TOOL_CHAIN_CONF] if ToolsDefFile: ToolDef.LoadToolDefFile(os.path.normpath(ToolsDefFile)) @@ -273,10 +273,12 @@ def ToolDefDict(ConfDir): ToolDef.LoadToolDefFile(os.path.normpath(os.path.join(ConfDir, gDefaultToolsDefFile))) else: ToolDef.LoadToolDefFile(os.path.normpath(os.path.join(ConfDir, gDefaultToolsDefFile))) return ToolDef +ToolDef = ToolDefDict((os.path.join(os.getenv("WORKSPACE"),"Conf"))) + ## # # This acts like the main() function for the script, unless it is 'import'ed into another # script. # diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Python/GenFds/GenFds.py index 5888997761bb..51943411ad1f 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -18,11 +18,11 @@ from glob import glob from struct import unpack from linecache import getlines from io import BytesIO import Common.LongFilePathOs as os -from Common.TargetTxtClassObject import TargetTxtClassObject +from Common.TargetTxtClassObject import TargetTxt from Common.DataType import * import Common.GlobalData as GlobalData from Common import EdkLogger from Common.StringUtils import NormPath from Common.Misc import DirCache, PathClass, GuidStructureStringToGuidString @@ -205,12 +205,10 @@ def GenFdsApi(FdsCommandDict, WorkSpaceDataBase=None): GenFdsGlobalVariable.ConfDir = ConfDirectoryPath if not GlobalData.gConfDirectory: GlobalData.gConfDirectory = GenFdsGlobalVariable.ConfDir BuildConfigurationFile = os.path.normpath(os.path.join(ConfDirectoryPath, "target.txt")) if os.path.isfile(BuildConfigurationFile) == True: - TargetTxt = TargetTxtClassObject() - TargetTxt.LoadTargetTxtFile(BuildConfigurationFile) # if no build target given in command line, get it from target.txt if not GenFdsGlobalVariable.TargetName: BuildTargetList = TargetTxt.TargetTxtDictionary[TAB_TAT_DEFINES_TARGET] if len(BuildTargetList) != 1: EdkLogger.error("GenFds", OPTION_VALUE_INVALID, ExtraData="Only allows one instance for Target.") diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py index c9c476cf6154..f49af9371b8d 100644 --- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py +++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py @@ -20,13 +20,13 @@ from array import array 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 from Common.MultipleWorkspace import MultipleWorkspace as mws import Common.GlobalData as GlobalData @@ -93,35 +93,25 @@ class GenFdsGlobalVariable: # @staticmethod 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 # @param Inf: object of InfBuildData # @param Arch: current arch @@ -834,11 +824,11 @@ class GenFdsGlobalVariable: # @param KeyStringList Filter for inputs of section generation # @param CurrentArchList Arch list # @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 ToolChain = GenFdsGlobalVariable.ToolChainTag if ToolChain not in ToolDb['TOOL_CHAIN_TAG']: @@ -850,19 +840,19 @@ def FindExtendTool(KeyStringList, CurrentArchList, NameGuid): if GenFdsGlobalVariable.GuidToolDefinition: 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] + \ '_' + \ KeyList[2] diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index 9f65ad54257d..bfd203aee805 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -17,12 +17,12 @@ from Common.StringUtils import * from Common.DataType import * from Common.Misc import * from types import * from Common.Expression import * from CommonDataClass.CommonClass import SkuInfoClass -from Common.TargetTxtClassObject import TargetTxtClassObject -from Common.ToolDefClassObject import ToolDefClassObject +from Common.TargetTxtClassObject import TargetTxt +from Common.ToolDefClassObject import ToolDef from .MetaDataTable import * from .MetaFileTable import * from .MetaFileParser import * from .WorkspaceCommon import GetDeclaredPcd @@ -3259,19 +3259,15 @@ class DscBuildData(PlatformBuildClassObject): @property def ToolChainFamily(self): self._ToolChainFamily = TAB_COMPILER_MSFT BuildConfigurationFile = os.path.normpath(os.path.join(GlobalData.gConfDirectory, "target.txt")) if os.path.isfile(BuildConfigurationFile) == True: - TargetTxt = TargetTxtClassObject() - TargetTxt.LoadTargetTxtFile(BuildConfigurationFile) ToolDefinitionFile = TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF] if ToolDefinitionFile == '': ToolDefinitionFile = "tools_def.txt" ToolDefinitionFile = os.path.normpath(mws.join(self.WorkspaceDir, 'Conf', ToolDefinitionFile)) if os.path.isfile(ToolDefinitionFile) == True: - ToolDef = ToolDefClassObject() - ToolDef.LoadToolDefFile(ToolDefinitionFile) ToolDefinition = ToolDef.ToolsDefTxtDatabase if TAB_TOD_DEFINES_FAMILY not in ToolDefinition \ or self._Toolchain not in ToolDefinition[TAB_TOD_DEFINES_FAMILY] \ or not ToolDefinition[TAB_TOD_DEFINES_FAMILY][self._Toolchain]: self._ToolChainFamily = TAB_COMPILER_MSFT diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 8c3315619afa..5e13453a1254 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -28,12 +28,12 @@ import threading from optparse import OptionParser from subprocess import * from Common import Misc as Utils from Common.LongFilePathSupport import OpenLongFilePath as open -from Common.TargetTxtClassObject import TargetTxtClassObject -from Common.ToolDefClassObject import ToolDefClassObject +from Common.TargetTxtClassObject import TargetTxt +from Common.ToolDefClassObject import ToolDef from Common.DataType import * from Common.BuildVersion import gBUILD_VERSION from AutoGen.AutoGen import * from Common.BuildToolError import * from Workspace.WorkspaceDatabase import WorkspaceDatabase @@ -714,12 +714,12 @@ class Build(): if self.SkuId: GlobalData.gSKUID_CMD = self.SkuId self.ConfDirectory = BuildOptions.ConfDirectory self.SpawnMode = True self.BuildReport = BuildReport(BuildOptions.ReportFile, BuildOptions.ReportType) - self.TargetTxt = TargetTxtClassObject() - self.ToolDef = ToolDefClassObject() + self.TargetTxt = TargetTxt + self.ToolDef = ToolDef self.AutoGenTime = 0 self.MakeTime = 0 self.GenFdsTime = 0 GlobalData.BuildOptionPcd = BuildOptions.OptionPcd if BuildOptions.OptionPcd else [] #Set global flag for build mode @@ -813,12 +813,12 @@ class Build(): EdkLogger.quiet("%-16s = %s" % ("PREBUILD", self.Prebuild)) if self.Postbuild: EdkLogger.quiet("%-16s = %s" % ("POSTBUILD", self.Postbuild)) if self.Prebuild: self.LaunchPrebuild() - self.TargetTxt = TargetTxtClassObject() - self.ToolDef = ToolDefClassObject() + self.TargetTxt = TargetTxt + self.ToolDef = ToolDef if not (self.LaunchPrebuildFlag and os.path.exists(self.PlatformBuildPath)): self.InitBuild() EdkLogger.info("") os.chdir(self.WorkspaceDir) @@ -826,27 +826,10 @@ class Build(): ## Load configuration # # This method will parse target.txt and get the build configurations. # def LoadConfiguration(self): - # - # Check target.txt and tools_def.txt and Init them - # - BuildConfigurationFile = os.path.normpath(os.path.join(GlobalData.gConfDirectory, gBuildConfiguration)) - if os.path.isfile(BuildConfigurationFile) == True: - StatusCode = self.TargetTxt.LoadTargetTxtFile(BuildConfigurationFile) - - ToolDefinitionFile = self.TargetTxt.TargetTxtDictionary[TAB_TAT_DEFINES_TOOL_CHAIN_CONF] - if ToolDefinitionFile == '': - ToolDefinitionFile = gToolsDefinition - ToolDefinitionFile = os.path.normpath(mws.join(self.WorkspaceDir, 'Conf', ToolDefinitionFile)) - if os.path.isfile(ToolDefinitionFile) == True: - StatusCode = self.ToolDef.LoadToolDefFile(ToolDefinitionFile) - else: - EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=ToolDefinitionFile) - else: - EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=BuildConfigurationFile) # if no ARCH given in command line, get it from target.txt if not self.ArchList: self.ArchList = self.TargetTxt.TargetTxtDictionary[TAB_TAT_DEFINES_TARGET_ARCH] self.ArchList = tuple(self.ArchList) -- 2.20.1.windows.1