1# Copyright 2021-2023 HPMicro
2# SPDX-License-Identifier: BSD-3-Clause
3
4import os
5import sys
6
7# toolchains options
8ARCH='risc-v'
9CPU='hpmicro'
10SOC_FAMILY='HPM6700'
11CHIP_NAME='HPM6750'
12
13CROSS_TOOL='gcc'
14
15# bsp lib config
16BSP_LIBRARY_TYPE = None
17
18# Fallback toolchain info
19FALLBACK_TOOLCHAIN_VENDOR='RISC-V'
20FALLBACK_TOOLCHAIN_PKG='RISC-V-GCC-RV32'
21FALLBACK_TOOLCHAIN_VER='2022-04-12'
22
23if os.getenv('RTT_CC'):
24    CROSS_TOOL = os.getenv('RTT_CC')
25
26RTT_EXEC_PATH = os.getenv('RTT_EXEC_PATH')
27if RTT_EXEC_PATH != None:
28    folders = RTT_EXEC_PATH.split(os.sep)
29    # If the `RT-Thread Env` is from the RT-Thread Studio, generate the RTT_EXEC_PATH using `FALLBACK_TOOLCHAIN_INFO`
30    if 'arm_gcc' in folders and 'platform' in folders:
31        RTT_EXEC_PATH = ''
32        for path in folders:
33            if path != 'platform':
34                RTT_EXEC_PATH = RTT_EXEC_PATH + path + os.sep
35            else:
36                break
37        RTT_EXEC_PATH = os.path.join(RTT_EXEC_PATH, 'repo', 'Extract', 'ToolChain_Support_Packages', FALLBACK_TOOLCHAIN_VENDOR, FALLBACK_TOOLCHAIN_PKG, FALLBACK_TOOLCHAIN_VER, 'bin')
38    # Override the 'RTT_RISCV_TOOLCHAIN' only if the `RT-Thread ENV` is from the RT-Thread Studio
39    if 'platform' in folders:
40        os.environ['RTT_RISCV_TOOLCHAIN'] = RTT_EXEC_PATH
41
42# cross_tool provides the cross compiler
43# EXEC_PATH is the compiler path, for example, GNU RISC-V toolchain, IAR
44if  CROSS_TOOL == 'gcc':
45    PLATFORM    = 'gcc'
46    if os.getenv('RTT_RISCV_TOOLCHAIN'):
47        EXEC_PATH = os.getenv('RTT_RISCV_TOOLCHAIN')
48    else:
49        EXEC_PATH   = r'/opt/riscv-gnu-gcc/bin'
50else:
51    print("CROSS_TOOL = {} not yet supported" % CROSS_TOOL)
52
53BUILD = 'flash_debug'
54
55if PLATFORM == 'gcc':
56    PREFIX = 'riscv32-unknown-elf-'
57    CC = PREFIX + 'gcc'
58    CXX = PREFIX + 'g++'
59    AS = PREFIX + 'gcc'
60    AR = PREFIX + 'ar'
61    LINK = PREFIX + 'gcc'
62    GDB = PREFIX + 'gdb'
63    TARGET_EXT = 'elf'
64    SIZE = PREFIX + 'size'
65    OBJDUMP = PREFIX + 'objdump'
66    OBJCPY = PREFIX + 'objcopy'
67    STRIP = PREFIX + 'strip'
68
69    ARCH_ABI = ' -mcmodel=medlow '
70    DEVICE = ARCH_ABI  + ' -DUSE_NONVECTOR_MODE=1 ' + ' -ffunction-sections -fdata-sections -fno-common '
71    CFLAGS = DEVICE
72    AFLAGS = CFLAGS
73    LFLAGS  = ARCH_ABI + '  --specs=nano.specs --specs=nosys.specs  -u _printf_float -u _scanf_float -nostartfiles -Wl,--gc-sections '
74
75    CPATH = ''
76    LPATH = ''
77
78    if BUILD == 'ram_debug':
79        CFLAGS += ' -gdwarf-2'
80        AFLAGS += ' -gdwarf-2'
81        CFLAGS += ' -O0'
82        LFLAGS += ' -O0'
83        LINKER_FILE = 'board/linker_scripts/ram_rtt.ld'
84    elif BUILD == 'ram_release':
85        CFLAGS += ' -O2'
86        LFLAGS += ' -O2'
87        LINKER_FILE = 'board/linker_scripts/ram_rtt.ld'
88    elif BUILD == 'flash_debug':
89        CFLAGS += ' -gdwarf-2'
90        AFLAGS += ' -gdwarf-2'
91        CFLAGS += ' -O0'
92        LFLAGS += ' -O0'
93        CFLAGS += ' -DFLASH_XIP=1'
94        LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
95    elif BUILD == 'flash_release':
96        CFLAGS += ' -O2'
97        LFLAGS += ' -O2'
98        CFLAGS += ' -DFLASH_XIP=1'
99        LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
100    else:
101        CFLAGS += ' -O2'
102        LFLAGS += ' -O2'
103        LINKER_FILE = 'board/linker_scripts/flash_rtt.ld'
104    LFLAGS += ' -T ' + LINKER_FILE
105
106    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
107
108    # module setting
109    CXXFLAGS = CFLAGS +  ' -Woverloaded-virtual -fno-exceptions -fno-rtti '
110    CFLAGS = CFLAGS + ' -std=gnu11'
111
112def dist_handle(BSP_ROOT, dist_dir):
113    import sys
114    cwd_path = os.getcwd()
115    sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
116    from sdk_dist import dist_do_building
117    dist_do_building(BSP_ROOT, dist_dir)