rtconfig.py 4.7 KB

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