rtconfig.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import os
  2. import sys
  3. def _config_enabled(symbol, default=False):
  4. config_path = os.path.join(os.path.dirname(__file__), '.config')
  5. try:
  6. with open(config_path, 'r', encoding='utf-8') as cfg:
  7. text = cfg.read()
  8. if f'CONFIG_{symbol}=y' in text:
  9. return True
  10. if f'# CONFIG_{symbol} is not set' in text:
  11. return False
  12. return default
  13. except OSError:
  14. return default
  15. # toolchains options
  16. ARCH='arm'
  17. CPU='cortex-r52'
  18. CROSS_TOOL='gcc'
  19. if os.getenv('RTT_CC'):
  20. CROSS_TOOL = os.getenv('RTT_CC')
  21. if os.getenv('RTT_ROOT'):
  22. RTT_ROOT = os.getenv('RTT_ROOT')
  23. # cross_tool provides the cross compiler
  24. if CROSS_TOOL == 'gcc':
  25. PLATFORM = 'gcc'
  26. EXEC_PATH = r'/opt/toolchain/gcc-arm-none-eabi-10.3-2021.10/bin'
  27. if os.getenv('RTT_EXEC_PATH'):
  28. EXEC_PATH = os.getenv('RTT_EXEC_PATH')
  29. # BUILD = 'debug'
  30. BUILD = 'release'
  31. if PLATFORM == 'gcc':
  32. # toolchains
  33. PREFIX = 'arm-none-eabi-'
  34. CC = PREFIX + 'gcc'
  35. AS = PREFIX + 'gcc'
  36. AR = PREFIX + 'ar'
  37. CXX = PREFIX + 'g++'
  38. LINK = PREFIX + 'gcc'
  39. TARGET_EXT = 'elf'
  40. SIZE = PREFIX + 'size'
  41. OBJDUMP = PREFIX + 'objdump'
  42. OBJCPY = PREFIX + 'objcopy'
  43. NM = PREFIX + 'nm'
  44. if _config_enabled('RT_USING_FPU', default=True):
  45. DEVICE = ' -mcpu=cortex-r52 -marm -mfloat-abi=hard -mfpu=vfpv3-d16 -mlittle-endian'
  46. else:
  47. DEVICE = ' -mcpu=cortex-r52 -marm -mfloat-abi=soft -mgeneral-regs-only -mlittle-endian'
  48. COMMON_CFLAGS = (
  49. ' -fno-inline'
  50. ' -ffunction-sections'
  51. ' -fdata-sections'
  52. ' -fdiagnostics-parseable-fixits'
  53. ' -fmessage-length=0'
  54. ' -funsigned-char'
  55. ' -funsigned-bitfields'
  56. ' -fno-common'
  57. ' -fno-strict-aliasing'
  58. ' -funwind-tables'
  59. ' -Dgcc'
  60. )
  61. CFLAGS = DEVICE + COMMON_CFLAGS
  62. AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
  63. LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vector -lgcc -T link.lds'
  64. if BUILD == 'debug':
  65. CFLAGS += ' -Og -ggdb3 -gdwarf-4'
  66. AFLAGS += ' -ggdb3 -gdwarf-4'
  67. else:
  68. CFLAGS += ' -O2'
  69. CXXFLAGS = CFLAGS
  70. POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'