1import os
2import sys
3import rtconfig
4import platform
5import subprocess
6import uuid
7
8from rtconfig import RTT_ROOT
9import sys
10
11sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
12from building import *
13
14TARGET = 'rtthread.' + rtconfig.TARGET_EXT
15
16DefaultEnvironment(tools=[])
17env = Environment(tools = ['mingw'],
18    AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
19    CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
20    CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
21    AR = rtconfig.AR, ARFLAGS = '-rc',
22    LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
23env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
24env['ASCOM'] = env['ASPPCOM']
25
26Export('RTT_ROOT')
27Export('rtconfig')
28
29rtconfig.CPU='c906'
30rtconfig.VENDOR="t-head"
31rtconfig.ARCH='risc-v'
32
33SDK_ROOT = os.path.abspath('../')
34
35if os.path.exists(SDK_ROOT + '/libraries'):
36    libraries_path_prefix = SDK_ROOT + '/libraries'
37else:
38    libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries'
39
40SDK_LIB = libraries_path_prefix
41Export('SDK_LIB')
42
43# prepare building environment
44objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False)
45
46# set spawn
47def ourspawn(sh, escape, cmd, args, e):
48    filename = str(uuid.uuid4())
49    newargs = ' '.join(args[1:])
50    cmdline = cmd + " " + newargs
51    if (len(cmdline) > 16 * 1024):
52        f = open(filename, 'w')
53        f.write(' '.join(args[1:]).replace('\\', '/'))
54        f.close()
55        # exec
56        cmdline = cmd + " @" + filename
57    proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
58        stderr=subprocess.PIPE, shell = False, env = e)
59    data, err = proc.communicate()
60    rv = proc.wait()
61    def res_output(_output, _s):
62        if len(_s):
63            if isinstance(_s, str):
64                _output(_s)
65            elif isinstance(_s, bytes):
66                _output(str(_s, 'UTF-8'))
67            else:
68                _output(str(_s))
69    res_output(sys.stderr.write, err)
70    res_output(sys.stdout.write, data)
71    if os.path.isfile(filename):
72        os.remove(filename)
73    return rv
74
75if platform.system() == 'Windows':
76    env['SPAWN'] = ourspawn
77
78hal_library = 'sunxi-hal'
79rtconfig.BSP_LIBRARY_TYPE = hal_library
80
81# include libraries
82objs.extend(SConscript(os.path.join(libraries_path_prefix, hal_library, 'SConscript'), variant_dir='build/libraries/sunxi-hal', duplicate=0))
83
84# include drivers
85objs.extend(SConscript(os.path.join(libraries_path_prefix, 'drivers', 'SConscript'), variant_dir='build/libraries/drivers', duplicate=0))
86
87# include libos
88objs.extend(SConscript(os.path.join(libraries_path_prefix, 'libos', 'SConscript'), variant_dir='build/libraries/libos', duplicate=0))
89
90if rtconfig.PLATFORM == 'gcc':
91    env['LINKCOM'] = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS -Wl,--start-group $_LIBFLAGS -Wl,--end-group'
92
93stack_size = 4096
94
95stack_lds = open('link_stacksize.lds', 'w')
96if GetDepend('__STACKSIZE__'): stack_size = GetDepend('__STACKSIZE__')
97stack_lds.write('__STACKSIZE__ = %d;\n' % stack_size)
98stack_lds.close()
99
100# make a building
101DoBuilding(TARGET, objs)
102