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)