1import os
2import sys
3import rtconfig
4
5if os.getenv('RTT_ROOT'):
6    RTT_ROOT = os.getenv('RTT_ROOT')
7else:
8    RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..')
9
10sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
11from building import *
12
13TARGET = 'rtthread.' + rtconfig.TARGET_EXT
14
15AddOption('--run',
16        dest = 'run',
17        type='string',
18        nargs=1,
19        action = 'store',
20        default = "",
21        help = 'Upload or debug application using openocd')
22
23DefaultEnvironment(tools=[])
24env = Environment(tools = ['mingw'],
25    AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
26    CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, CCFLAGS = '',
27    CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
28    AR = rtconfig.AR, ARFLAGS = '-rc', LIBS = rtconfig.LIBS,
29    LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
30env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
31env['ASCOM'] = env['ASPPCOM']
32
33Export('RTT_ROOT')
34Export('rtconfig')
35
36SDK_ROOT = os.path.abspath('./')
37
38if os.path.exists(SDK_ROOT + '/libraries'):
39    libraries_path_prefix = SDK_ROOT + '/libraries'
40else:
41    libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries'
42
43SDK_LIB = libraries_path_prefix
44Export('SDK_LIB')
45
46GDB = rtconfig.GDB
47
48# prepare building environment
49objs = PrepareBuilding(env, RTT_ROOT)
50
51bsp_library_type = rtconfig.NUCLEI_SDK_SOC
52rtconfig.BSP_LIBRARY_TYPE = bsp_library_type
53
54if hasattr(rtconfig, 'NUCLEI_SDK_OPENOCD_CFG'):
55    openocd_cfg = rtconfig.NUCLEI_SDK_OPENOCD_CFG.replace('\\', '/')
56else:
57    print("ERROR: Nuclei SDK package is not yet downloaded, please execute <pkgs --update> in command line first!")
58    exit(0)
59
60# include hal drivers
61hal_sconscript = os.path.join(libraries_path_prefix, bsp_library_type, 'HAL_Drivers', 'SConscript')
62
63if os.path.isfile(hal_sconscript):
64    objs.extend(SConscript(hal_sconscript))
65
66# make a building
67DoBuilding(TARGET, objs)
68
69# Run upload or debug if --run=upload or --upload=debug
70run_target = GetOption('run')
71SUPPORT_RUN_TARGETS = ["upload", "debug"]
72if run_target in SUPPORT_RUN_TARGETS:
73    if os.path.isfile(TARGET):
74        if run_target == "upload":
75            upload_cmd = '{} {} -ex "set remotetimeout 240" \
76                    -ex "target remote | openocd --pipe -f {}" \
77                    --batch -ex "monitor halt" -ex "monitor flash protect 0 0 last off" -ex "load" \
78                    -ex "monitor resume" -ex "quit"'.format(GDB, TARGET, openocd_cfg)
79            print("Upload application {} using openocd and gdb".format(TARGET))
80            print(upload_cmd)
81            os.system(upload_cmd)
82        elif run_target == "debug":
83            debug_cmd = '{} {} -ex "set remotetimeout 240" \
84                    -ex "target remote | openocd --pipe -f {}"'.format(GDB, TARGET, openocd_cfg)
85            print("Debug application {} using openocd and gdb".format(TARGET))
86            print(debug_cmd)
87            os.system(debug_cmd)
88    else:
89        print(TARGET + ' not exist, please run scons first!!')
90    exit(0)
91