1import os
2import platform
3
4# toolchains options
5ARCH='risc-v'
6CPU='nuclei'
7CROSS_TOOL='gcc'
8
9if os.getenv('RTT_CC'):
10    CROSS_TOOL = os.getenv('RTT_CC')
11
12if CROSS_TOOL == 'gcc':
13    PLATFORM 	= 'gcc'
14    if platform.system().lower() == "windows":
15        EXEC_PATH 	= r'/NucleiStudio/toolchain/gcc/bin'
16    else:
17        EXEC_PATH 	= r'~/NucleiStudio/toolchain/gcc/bin'
18    if os.path.exists(EXEC_PATH) == False:
19        print("Warning: Toolchain path %s doesn't exist, assume it is already in PATH" % EXEC_PATH)
20        EXEC_PATH = '' # Don't set path if not exist
21else:
22    print("CROSS_TOOL = %s not yet supported" % CROSS_TOOL)
23
24if os.getenv('RTT_EXEC_PATH'):
25	EXEC_PATH = os.getenv('RTT_EXEC_PATH')
26
27BUILD = 'debug'
28# Fixed configurations below
29NUCLEI_SDK_SOC = "demosoc"
30NUCLEI_SDK_BOARD = "nuclei_fpga_eval"
31# Configurable options below
32# DOWNLOAD: https://doc.nucleisys.com/nuclei_sdk/develop/buildsystem.html#download
33NUCLEI_SDK_DOWNLOAD = "ilm"
34# CORE: See https://doc.nucleisys.com/nuclei_sdk/develop/buildsystem.html#core
35NUCLEI_SDK_CORE = "nx600"
36
37if PLATFORM == 'gcc':
38    # toolchains
39    PREFIX  = 'riscv-nuclei-elf-'
40    CC      = PREFIX + 'gcc'
41    CXX     = PREFIX + 'g++'
42    AS      = PREFIX + 'gcc'
43    AR      = PREFIX + 'ar'
44    LINK    = PREFIX + 'gcc'
45    GDB     = PREFIX + 'gdb'
46    TARGET_EXT = 'elf'
47    SIZE    = PREFIX + 'size'
48    OBJDUMP = PREFIX + 'objdump'
49    OBJCPY  = PREFIX + 'objcopy'
50
51    CFLAGS  = ' -ffunction-sections -fdata-sections -fno-common '
52    AFLAGS  = CFLAGS
53    LFLAGS  = ' --specs=nano.specs --specs=nosys.specs -nostartfiles -Wl,--gc-sections '
54    LFLAGS += ' -Wl,-cref,-Map=rtthread.map'
55    LFLAGS  += ' -u _isatty -u _write -u _sbrk -u _read -u _close -u _fstat -u _lseek '
56    CPATH   = ''
57    LPATH   = ''
58    LIBS = ['stdc++']
59    AFLAGS += ' -D"irq_entry=SW_handler" '
60
61    if BUILD == 'debug':
62        CFLAGS += ' -O2 -ggdb'
63        AFLAGS += ' -ggdb'
64    else:
65        CFLAGS += ' -O2 -Os'
66
67    CXXFLAGS = CFLAGS
68
69DUMP_ACTION = OBJDUMP + ' -D -S $TARGET > rtt.asm\n'
70POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
71
72def dist_handle(BSP_ROOT, dist_dir):
73    import sys
74    cwd_path = os.getcwd()
75    sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
76    from sdk_dist import dist_do_building
77    dist_do_building(BSP_ROOT, dist_dir)
78