[tools] Fix the IDE project build error when using 'scons --target=cc'.

This commit is contained in:
armink 2018-06-22 15:03:02 +08:00
parent 9539892a1c
commit b7f7d6e6b2
2 changed files with 60 additions and 27 deletions

View File

@ -112,6 +112,35 @@ class Win32Spawn:
return proc.wait() return proc.wait()
# auto fix the 'RTT_CC' and 'RTT_EXEC_PATH'
# when using 'scons --target=cc' the 'RTT_CC' will set to 'cc'
# it will fix the the 'rtconfig.EXEC_PATH' when get it failed.
# NOTE: this function will changed your env. Please backup the env before used it.
def AutoFixRttCCAndExecPath():
import rtconfig
target_option = None
# get --target=cc option
if len(sys.argv) > 1:
option = sys.argv[1].split('=')
if len(option) > 1 and option[0] == '--target':
target_option = option[1]
# force change the 'RTT_CC' when using 'scons --target=cc'
if target_option:
if target_option == 'mdk' or target_option == 'mdk4' or target_option == 'mdk5':
os.environ['RTT_CC'] = 'keil'
elif target_option == 'iar':
os.environ['RTT_CC'] = 'iar'
# auto change the 'RTT_EXEC_PATH' when 'rtconfig.EXEC_PATH' get failed
reload(rtconfig)
if not os.path.exists(rtconfig.EXEC_PATH):
if os.environ['RTT_EXEC_PATH']:
# del the 'RTT_EXEC_PATH' and using the 'EXEC_PATH' setting on rtconfig.py
del os.environ['RTT_EXEC_PATH']
reload(rtconfig)
def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = []): def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = []):
import SCons.cpp import SCons.cpp
import rtconfig import rtconfig
@ -130,6 +159,9 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
sys.path = sys.path + [os.path.join(Rtt_Root, 'tools')] sys.path = sys.path + [os.path.join(Rtt_Root, 'tools')]
# auto fix the 'RTT_CC' and 'RTT_EXEC_PATH'
AutoFixRttCCAndExecPath()
# add compability with Keil MDK 4.6 which changes the directory of armcc.exe # add compability with Keil MDK 4.6 which changes the directory of armcc.exe
if rtconfig.PLATFORM == 'armcc': if rtconfig.PLATFORM == 'armcc':
if not os.path.isfile(os.path.join(rtconfig.EXEC_PATH, 'armcc.exe')): if not os.path.isfile(os.path.join(rtconfig.EXEC_PATH, 'armcc.exe')):
@ -710,17 +742,7 @@ def DoBuilding(target, objects):
EndBuilding(target, program) EndBuilding(target, program)
def EndBuilding(target, program = None): def GenTargetProject(program = None):
import rtconfig
Env['target'] = program
Env['project'] = Projects
Env.AddPostAction(target, rtconfig.POST_ACTION)
# Add addition clean files
Clean(target, 'cconfig.h')
Clean(target, 'rtua.py')
Clean(target, 'rtua.pyc')
if GetOption('target') == 'mdk': if GetOption('target') == 'mdk':
from keil import MDKProject from keil import MDKProject
@ -777,27 +799,47 @@ def EndBuilding(target, program = None):
from cdk import CDKProject from cdk import CDKProject
CDKProject('project.cdkproj', Projects) CDKProject('project.cdkproj', Projects)
def EndBuilding(target, program = None):
import rtconfig
need_exit = False
Env['target'] = program
Env['project'] = Projects
Env.AddPostAction(target, rtconfig.POST_ACTION)
# Add addition clean files
Clean(target, 'cconfig.h')
Clean(target, 'rtua.py')
Clean(target, 'rtua.pyc')
if GetOption('target'):
GenTargetProject(program)
BSP_ROOT = Dir('#').abspath BSP_ROOT = Dir('#').abspath
if GetOption('copy') and program != None: if GetOption('copy') and program != None:
from mkdist import MakeCopy from mkdist import MakeCopy
MakeCopy(program, BSP_ROOT, Rtt_Root, Env) MakeCopy(program, BSP_ROOT, Rtt_Root, Env)
exit(0) need_exit = True
if GetOption('copy-header') and program != None: if GetOption('copy-header') and program != None:
from mkdist import MakeCopyHeader from mkdist import MakeCopyHeader
MakeCopyHeader(program, BSP_ROOT, Rtt_Root, Env) MakeCopyHeader(program, BSP_ROOT, Rtt_Root, Env)
exit(0) need_exit = True
if GetOption('make-dist') and program != None: if GetOption('make-dist') and program != None:
from mkdist import MkDist from mkdist import MkDist
MkDist(program, BSP_ROOT, Rtt_Root, Env) MkDist(program, BSP_ROOT, Rtt_Root, Env)
exit(0) need_exit = True
if GetOption('cscope'): if GetOption('cscope'):
from cscope import CscopeDatabase from cscope import CscopeDatabase
CscopeDatabase(Projects) CscopeDatabase(Projects)
if not GetOption('help') and not GetOption('target'): if not GetOption('help') and not GetOption('target'):
if not os.path.exists(rtconfig.EXEC_PATH): if not os.path.exists(rtconfig.EXEC_PATH):
print "Error: Toolchain path (%s) is not exist, please check 'EXEC_PATH' in path or rtconfig.py." % rtconfig.EXEC_PATH print "Error: the toolchain path (%s) is not exist, please check 'EXEC_PATH' in path or rtconfig.py." % rtconfig.EXEC_PATH
sys.exit(1) need_exit = True
if need_exit:
exit(0)
def SrcRemove(src, remove): def SrcRemove(src, remove):
if not src: if not src:

View File

@ -178,21 +178,12 @@ def IARVersion():
return path return path
# get the IAR path in 'RTT_EXEC_PATH'
path = IARPath(); path = IARPath();
# retry to get IAR path on 'rtconfig.py'
if not os.path.exists(path):
rtt_exec_path = os.environ['RTT_EXEC_PATH']
if rtt_exec_path:
del os.environ['RTT_EXEC_PATH']
path = IARPath();
os.environ['RTT_EXEC_PATH'] = rtt_exec_path
if os.path.exists(path): if os.path.exists(path):
cmd = os.path.join(path, 'iccarm.exe') cmd = os.path.join(path, 'iccarm.exe')
else: else:
print('Get IAR version error. Please update IAR installation path in rtconfig.py!') print('Error: get IAR version failed. Please update the IAR installation path in rtconfig.py!')
return "0.0" return "0.0"
child = subprocess.Popen([cmd, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) child = subprocess.Popen([cmd, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)