1import os 2 3# toolchains options 4ARCH='arm' 5CPU='cortex-m7' 6CROSS_TOOL='gcc' 7 8# bsp lib config 9BSP_LIBRARY_TYPE = None 10 11if os.getenv('RTT_CC'): 12 CROSS_TOOL = os.getenv('RTT_CC') 13if os.getenv('RTT_ROOT'): 14 RTT_ROOT = os.getenv('RTT_ROOT') 15 16# cross_tool provides the cross compiler 17# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR 18if CROSS_TOOL == 'gcc': 19 PLATFORM = 'gcc' 20 EXEC_PATH = r'/opt/gcc-arm-none-eabi/bin/' 21elif CROSS_TOOL == 'keil': 22 PLATFORM = 'armcc' 23 EXEC_PATH = r'C:/Keil_v5' 24 25if os.getenv('RTT_EXEC_PATH'): 26 EXEC_PATH = os.getenv('RTT_EXEC_PATH') 27 28BUILD = 'debug' 29 30if PLATFORM == 'gcc': 31 # toolchains 32 PREFIX = 'arm-none-eabi-' 33 CC = PREFIX + 'gcc' 34 AS = PREFIX + 'gcc' 35 AR = PREFIX + 'ar' 36 CXX = PREFIX + 'g++' 37 LINK = PREFIX + 'gcc' 38 TARGET_EXT = 'elf' 39 SIZE = PREFIX + 'size' 40 OBJDUMP = PREFIX + 'objdump' 41 OBJCPY = PREFIX + 'objcopy' 42 43 DEVICE = ' -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' 44 CFLAGS = DEVICE + ' -Dgcc' 45 AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' 46 LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' 47 48 CPATH = '' 49 LPATH = '' 50 51 if BUILD == 'debug': 52 CFLAGS += ' -O0 -gdwarf-2 -g' 53 AFLAGS += ' -gdwarf-2' 54 else: 55 CFLAGS += ' -O2' 56 57 CXXFLAGS = CFLAGS 58 CFLAGS += ' -std=gnu99' 59 60 POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' 61 62elif PLATFORM == 'armcc': 63 # toolchains 64 CC = 'armcc' 65 CXX = 'armcc' 66 AS = 'armasm' 67 AR = 'armar' 68 LINK = 'armlink' 69 TARGET_EXT = 'axf' 70 71 DEVICE = ' --cpu Cortex-M7.fp.sp' 72 CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' 73 AFLAGS = DEVICE + ' --apcs=interwork ' 74 LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict' 75 CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' 76 LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' 77 78 CFLAGS += ' -D__MICROLIB ' 79 AFLAGS += ' --pd "__MICROLIB SETA 1" ' 80 LFLAGS += ' --library_type=microlib ' 81 EXEC_PATH += '/ARM/ARMCC/bin/' 82 83 if BUILD == 'debug': 84 CFLAGS += ' -g -O0' 85 AFLAGS += ' -g' 86 else: 87 CFLAGS += ' -O2' 88 89 CXXFLAGS = CFLAGS 90 CFLAGS += ' -std=gnu99' 91 92 POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' 93 94elif PLATFORM == 'armclang': 95 # toolchains 96 CC = 'armclang' 97 CXX = 'armclang' 98 AS = 'armasm' 99 AR = 'armar' 100 LINK = 'armlink' 101 TARGET_EXT = 'axf' 102 103 DEVICE = ' --cpu Cortex-M7.fp.sp ' 104 CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-M7 ' 105 CFLAGS += ' -mcpu=cortex-M7 -mfpu=fpv4-sp-d16 ' 106 CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' 107 CFLAGS += ' -gdwarf-3 -ffunction-sections ' 108 AFLAGS = DEVICE + ' --apcs=interwork ' 109 LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' 110 LFLAGS += ' --list rt-thread.map ' 111 LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' 112 CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' 113 LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' 114 115 EXEC_PATH += '/ARM/ARMCLANG/bin/' 116 117 if BUILD == 'debug': 118 CFLAGS += ' -g -O1' # armclang recommend 119 AFLAGS += ' -g' 120 else: 121 CFLAGS += ' -O2' 122 123 CXXFLAGS = CFLAGS 124 CFLAGS += ' -std=gnu99' 125 126 POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' 127 128def dist_handle(BSP_ROOT, dist_dir): 129 import sys 130 cwd_path = os.getcwd() 131 sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) 132 from sdk_dist import dist_do_building 133 dist_do_building(BSP_ROOT, dist_dir) 134