rtconfig.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import os
  2. import sys
  3. import SCons.Tool.MSCommon.vc
  4. # toolchains options
  5. ARCH='sim'
  6. ASAN = False
  7. #CROSS_TOOL='msvc' or 'gcc' or 'mingw'
  8. #'msvc' and 'mingw' are both for windows
  9. # 'gcc' is for linux
  10. if sys.platform == 'win32':
  11. CROSS_TOOL='msvc'
  12. else:
  13. CROSS_TOOL='gcc'
  14. ASAN = True
  15. if os.getenv('RTT_CC'):
  16. CROSS_TOOL = os.getenv('RTT_CC')
  17. # cross_tool provides the cross compiler
  18. # EXEC_PATH is the compiler execute path
  19. if CROSS_TOOL == 'gcc' or CROSS_TOOL == 'clang-analyze':
  20. CPU = 'posix'
  21. PLATFORM = 'gcc'
  22. EXEC_PATH = '/usr/bin'
  23. elif CROSS_TOOL == 'mingw':
  24. CPU = 'win32'
  25. PLATFORM = 'mingw'
  26. EXEC_PATH = r'D:\Program Files\CodeBlocks\MinGW\bin'
  27. elif CROSS_TOOL == 'msvc':
  28. CPU = 'win32'
  29. PLATFORM = 'cl'
  30. EXEC_PATH = ''
  31. try:
  32. vc_version = ''
  33. vc_versions = SCons.Tool.MSCommon.vc.get_installed_vcs()
  34. if not vc_versions:
  35. print("No vc version!")
  36. exit(1)
  37. else:
  38. vc_version = vc_versions[0]
  39. EXEC_PATH = SCons.Tool.MSCommon.vc.find_vc_pdir(vc_version)
  40. if not EXEC_PATH:
  41. print('Installed VC %s failure!' % vc_version)
  42. exit(1)
  43. else:
  44. print('Successfully installed VC %s, path:%s' % (vc_version, EXEC_PATH))
  45. except:
  46. pass
  47. else:
  48. print("Simulator does not support this CROSS TOOL!")
  49. exit(1)
  50. if os.getenv('RTT_EXEC_PATH'):
  51. EXEC_PATH = os.getenv('RTT_EXEC_PATH')
  52. BUILD = 'debug'
  53. #BUILD = ''
  54. if PLATFORM == 'gcc':
  55. # toolchains
  56. PREFIX = ''
  57. CC = PREFIX + 'gcc'
  58. AS = PREFIX + 'gcc'
  59. AR = PREFIX + 'ar'
  60. LINK = PREFIX + 'gcc'
  61. TARGET_EXT = 'elf'
  62. SIZE = PREFIX + 'size'
  63. OBJDUMP = PREFIX + 'objdump'
  64. OBJCPY = PREFIX + 'objcopy'
  65. DEVICE = ' -ffunction-sections -fdata-sections'
  66. # DEVICE = ' -m32 ' # open this when build 32bit target on 64bit PC
  67. CFLAGS = DEVICE + ' -I/usr/include -w -D_REENTRANT -D_LINUX -DHAVE_SYS_SIGNALS'
  68. AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
  69. # LFLAGS = DEVICE + ' -Wl,-Map=rtthread-linux.map -pthread -T gcc.ld' # open this when build 32bit target
  70. LFLAGS = DEVICE + ' -Wl,-Map=rtthread-linux.map -pthread -T gcc_elf64.ld' # open this when build 64bit target
  71. CPATH = ''
  72. LPATH = ''
  73. if BUILD == 'debug':
  74. CFLAGS += ' -g -O0 -gdwarf-2'
  75. AFLAGS += ' -gdwarf-2'
  76. else:
  77. CFLAGS += ' -O2'
  78. if ASAN == True:
  79. CFLAGS += ' -Wall -g -O0 -fsanitize=address -fsanitize-recover=address,all -fno-omit-frame-pointer -fsanitize=leak -fsanitize=undefined -fdiagnostics-color'
  80. POST_ACTION = ''
  81. elif PLATFORM == 'mingw':
  82. # toolchains
  83. PREFIX = ''
  84. CC = PREFIX + 'gcc'
  85. CXX = PREFIX + 'g++'
  86. AS = PREFIX + 'gcc'
  87. AR = PREFIX + 'ar'
  88. LINK = PREFIX + 'g++'
  89. TARGET_EXT = 'exe'
  90. SIZE = PREFIX + 'size'
  91. OBJDUMP = PREFIX + 'objdump'
  92. OBJCPY = PREFIX + 'objcopy'
  93. DEVICE = ''
  94. CFLAGS = DEVICE + ' -D_Win32 -DNO_OLDNAMES -fno-pic -fno-builtin -fno-exceptions -fno-omit-frame-pointer'
  95. AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
  96. LFLAGS = DEVICE + ' -static-libgcc -Wl,--gc-sections,-Map=rtthread-win32.map -T mingw.ld '
  97. CPATH = ''
  98. LPATH = ''
  99. if BUILD == 'debug':
  100. CFLAGS += ' -g -O0 -gdwarf-2'
  101. AFLAGS += ' -gdwarf-2'
  102. else:
  103. CFLAGS += ' -O2'
  104. CXXFLAGS = CFLAGS
  105. POST_ACTION = ''
  106. elif PLATFORM == 'cl':
  107. # toolchains
  108. PREFIX = ''
  109. TARGET_EXT = 'exe'
  110. AS = PREFIX + 'cl'
  111. CC = PREFIX + 'cl'
  112. AR = PREFIX + 'cl'
  113. LINK = PREFIX + 'cl'
  114. AFLAGS = ''
  115. CFLAGS = ''
  116. LFLAGS = ''
  117. if BUILD == 'debug':
  118. CFLAGS += ' /MTd'
  119. LFLAGS += ' /DEBUG'
  120. else:
  121. CFLAGS += ' /MT'
  122. LFLAGS += ''
  123. CFLAGS += ' /Zi /Od /W 3 /WL /D_Win32'
  124. LFLAGS += ' /SUBSYSTEM:CONSOLE /MACHINE:X86 /INCREMENTAL:NO'
  125. CPATH = ''
  126. LPATH = ''
  127. POST_ACTION = ''