summaryrefslogtreecommitdiff
path: root/bsp/hpmicro/hpm5300evk/rtconfig.py
blob: f7a810920026bbcd5bcb545eaf633199bf4678bd (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Copyright 2021-2025 HPMicro
# SPDX-License-Identifier: BSD-3-Clause

import os
import sys
import rtconfig


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

sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
try:
    from building import *
except:
    print('Cannot found RT-Thread root directory, please check RTT_ROOT')
    print(RTT_ROOT)
    exit(-1)

def bsp_pkg_check():
    import subprocess
    
    need_update = True
    for p in os.listdir("packages"):
        if p.startswith("hpm_sdk-"):
            need_update = False
            break
    if need_update:
        print("\n===============================================================================")
        print("Dependency packages missing, please running 'pkgs --update'...")
        print("If no packages are fetched, run 'pkgs --upgrade' first, then 'pkgs --update'...")
        print("===============================================================================")
        exit(1)

RegisterPreBuildingAction(bsp_pkg_check)


# toolchains options
ARCH='risc-v'
CPU='hpmicro'
SOC_FAMILY='HPM5300'
CHIP_NAME='HPM5361'

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" % CROSS_TOOL)

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  -u _printf_float -u _scanf_float -nostartfiles -Wl,--gc-sections '

    CPATH = ''
    LPATH = ''

    if BUILD == 'ram_debug':
        CFLAGS += ' -gdwarf-2'
        AFLAGS += ' -gdwarf-2'
        CFLAGS += ' -O0'
        LFLAGS += ' -O0'
        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 += ' -O0'
        LFLAGS += ' -O0'
        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)