summaryrefslogtreecommitdiff
path: root/bsp/hpmicro/hpm5e00evk/rtconfig.py
blob: 962fe9789b90f91d133f3c587a1a6ac9da593edd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Copyright 2021-2025 HPMicro
# SPDX-License-Identifier: BSD-3-Clause

import os
import sys


if os.getenv('RTT_ROOT'):
    RTT_ROOT = os.getenv('RTT_ROOT')
else:
    RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..')

sys.path.insert(0, os.path.join(RTT_ROOT, 'tools'))

# toolchains options
ARCH='risc-v'
CPU='hpmicro'
SOC_FAMILY='HPM5E00'
CHIP_NAME='HPM5E31'

CROSS_TOOL='gcc'

# bsp lib config
BSP_LIBRARY_TYPE = None

# Fallback toolchain info
FALLBACK_TOOLCHAIN_VENDOR='RISC-V'
FALLBACK_TOOLCHAIN_PKG='RISC-V-GCC-RV32'
FALLBACK_TOOLCHAIN_VER='2022-04-12'

if os.getenv('RTT_CC'):
    CROSS_TOOL = os.getenv('RTT_CC')

RTT_EXEC_PATH = os.getenv('RTT_EXEC_PATH')
if RTT_EXEC_PATH != None:
    folders = RTT_EXEC_PATH.split(os.sep)
    # If the `RT-Thread Env` is from the RT-Thread Studio, generate the RTT_EXEC_PATH using `FALLBACK_TOOLCHAIN_INFO`
    if 'arm_gcc' in folders and 'platform' in folders:
        RTT_EXEC_PATH = ''
        for path in folders:
            if path != 'platform':
                RTT_EXEC_PATH = RTT_EXEC_PATH + path + os.sep
            else:
                break
        RTT_EXEC_PATH = os.path.join(RTT_EXEC_PATH, 'repo', 'Extract', 'ToolChain_Support_Packages', FALLBACK_TOOLCHAIN_VENDOR, FALLBACK_TOOLCHAIN_PKG, FALLBACK_TOOLCHAIN_VER, 'bin')
    # Override the 'RTT_RISCV_TOOLCHAIN' only if the `RT-Thread ENV` is from the RT-Thread Studio
    if 'platform' in folders:
        os.environ['RTT_RISCV_TOOLCHAIN'] = RTT_EXEC_PATH

# cross_tool provides the cross compiler
# EXEC_PATH is the compiler path, for example, GNU RISC-V toolchain, IAR
if  CROSS_TOOL == 'gcc':
    PLATFORM    = 'gcc'
    if os.getenv('RTT_RISCV_TOOLCHAIN'):
        EXEC_PATH = os.getenv('RTT_RISCV_TOOLCHAIN')
    elif RTT_EXEC_PATH:
        EXEC_PATH = RTT_EXEC_PATH
    else:
        EXEC_PATH   = r'/opt/riscv-gnu-gcc/bin'
else:
    print("CROSS_TOOL = {} not yet supported, only gcc is supported".format(CROSS_TOOL))
    exit(-1)

if os.getenv('RTT_BUILD_TYPE'):
    BUILD = os.getenv('RTT_BUILD_TYPE')
else:
    BUILD = 'flash_debug'

if PLATFORM == 'gcc':
    PREFIX = 'riscv32-unknown-elf-'
    CC = PREFIX + 'gcc'
    CXX = PREFIX + 'g++'
    AS = PREFIX + 'gcc'
    AR = PREFIX + 'ar'
    LINK = PREFIX + 'gcc'
    GDB = PREFIX + 'gdb'
    TARGET_EXT = 'elf'
    SIZE = PREFIX + 'size'
    OBJDUMP = PREFIX + 'objdump'
    OBJCPY = PREFIX + 'objcopy'
    STRIP = PREFIX + 'strip'

    ARCH_ABI = ' -mcmodel=medlow '
    DEVICE = ARCH_ABI  + ' -DUSE_NONVECTOR_MODE=1 ' + ' -ffunction-sections -fdata-sections -fno-common '
    CFLAGS = DEVICE
    AFLAGS = CFLAGS
    LFLAGS  = ARCH_ABI + '  --specs=nano.specs --specs=nosys.specs -nostartfiles -Wl,--gc-sections '

    CPATH = ''
    LPATH = ''

    if BUILD == 'ram_debug':
        CFLAGS += ' -gdwarf-2'
        AFLAGS += ' -gdwarf-2'
        CFLAGS += ' -Og'
        LFLAGS += ' -Og'
        LINKER_FILE = 'board/linker_scripts/gcc/ram_rtt.ld'
    elif BUILD == 'ram_release':
        CFLAGS += ' -O2'
        LFLAGS += ' -O2'
        LINKER_FILE = 'board/linker_scripts/gcc/ram_rtt.ld'
    elif BUILD == 'flash_debug':
        CFLAGS += ' -gdwarf-2'
        AFLAGS += ' -gdwarf-2'
        CFLAGS += ' -Og'
        LFLAGS += ' -Og'
        CFLAGS += ' -DFLASH_XIP=1'
        LINKER_FILE = 'board/linker_scripts/gcc/flash_rtt.ld'
    elif BUILD == 'flash_release':
        CFLAGS += ' -O2'
        LFLAGS += ' -O2'
        CFLAGS += ' -DFLASH_XIP=1'
        LINKER_FILE = 'board/linker_scripts/gcc/flash_rtt.ld'
    else:
        CFLAGS += ' -O2'
        LFLAGS += ' -O2'
        LINKER_FILE = 'board/linker_scripts/gcc/flash_rtt.ld'
    LFLAGS += ' -T ' + LINKER_FILE

    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'

    # module setting
    CXXFLAGS = CFLAGS +  ' -Woverloaded-virtual -fno-exceptions -fno-rtti '
    CFLAGS = CFLAGS + ' -std=gnu11'

def dist_handle(BSP_ROOT, dist_dir):
    import sys
    cwd_path = os.getcwd()
    sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
    from sdk_dist import dist_do_building
    dist_do_building(BSP_ROOT, dist_dir)