|
| 1 | +import os |
| 2 | + |
| 3 | +# toolchains options |
| 4 | +ARCH='arm' |
| 5 | +CPU='cortex-m4' |
| 6 | +CROSS_TOOL='gcc' |
| 7 | + |
| 8 | +# bsp lib config |
| 9 | +BSP_LIBRARY_TYPE = None |
| 10 | + |
| 11 | +if os.getenv('RTT_CC'): |
| 12 | + CROSS_TOOL = os.getenv('RTT_CC') |
| 13 | +if 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 |
| 18 | +if CROSS_TOOL == 'gcc': |
| 19 | + PLATFORM = 'gcc' |
| 20 | + EXEC_PATH = r'C:\Users\XXYYZZ' |
| 21 | +elif CROSS_TOOL == 'keil': |
| 22 | + PLATFORM = 'armcc' |
| 23 | + EXEC_PATH = r'C:/Keil_v5' |
| 24 | +elif CROSS_TOOL == 'iar': |
| 25 | + PLATFORM = 'iccarm' |
| 26 | + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' |
| 27 | + |
| 28 | +if os.getenv('RTT_EXEC_PATH'): |
| 29 | + EXEC_PATH = os.getenv('RTT_EXEC_PATH') |
| 30 | + |
| 31 | +BUILD = 'debug' |
| 32 | + |
| 33 | +if PLATFORM == 'gcc': |
| 34 | + # toolchains |
| 35 | + PREFIX = 'arm-none-eabi-' |
| 36 | + CC = PREFIX + 'gcc' |
| 37 | + AS = PREFIX + 'gcc' |
| 38 | + AR = PREFIX + 'ar' |
| 39 | + CXX = PREFIX + 'g++' |
| 40 | + LINK = PREFIX + 'gcc' |
| 41 | + TARGET_EXT = 'elf' |
| 42 | + SIZE = PREFIX + 'size' |
| 43 | + OBJDUMP = PREFIX + 'objdump' |
| 44 | + OBJCPY = PREFIX + 'objcopy' |
| 45 | + |
| 46 | + DEVICE = ' -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' |
| 47 | + CFLAGS = DEVICE + ' -Dgcc' |
| 48 | + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' |
| 49 | + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' |
| 50 | + |
| 51 | + CPATH = '' |
| 52 | + LPATH = '' |
| 53 | + |
| 54 | + if BUILD == 'debug': |
| 55 | + CFLAGS += ' -O0 -gdwarf-2 -g' |
| 56 | + AFLAGS += ' -gdwarf-2' |
| 57 | + else: |
| 58 | + CFLAGS += ' -O2' |
| 59 | + |
| 60 | + CXXFLAGS = CFLAGS |
| 61 | + |
| 62 | + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' |
| 63 | + |
| 64 | +elif PLATFORM == 'armcc': |
| 65 | + # toolchains |
| 66 | + CC = 'armcc' |
| 67 | + CXX = 'armcc' |
| 68 | + AS = 'armasm' |
| 69 | + AR = 'armar' |
| 70 | + LINK = 'armlink' |
| 71 | + TARGET_EXT = 'axf' |
| 72 | + |
| 73 | + DEVICE = ' --cpu Cortex-M4.fp ' |
| 74 | + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' |
| 75 | + AFLAGS = DEVICE + ' --apcs=interwork ' |
| 76 | + LFLAGS = DEVICE + ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict' |
| 77 | + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' |
| 78 | + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' |
| 79 | + |
| 80 | + CFLAGS += ' -D__MICROLIB ' |
| 81 | + AFLAGS += ' --pd "__MICROLIB SETA 1" ' |
| 82 | + LFLAGS += ' --library_type=microlib ' |
| 83 | + EXEC_PATH += '/ARM/ARMCC/bin/' |
| 84 | + |
| 85 | + if BUILD == 'debug': |
| 86 | + CFLAGS += ' -g -O0' |
| 87 | + AFLAGS += ' -g' |
| 88 | + else: |
| 89 | + CFLAGS += ' -O2' |
| 90 | + |
| 91 | + CXXFLAGS = CFLAGS |
| 92 | + CFLAGS += ' -std=c99' |
| 93 | + |
| 94 | + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' |
| 95 | + |
| 96 | +elif PLATFORM == 'armclang': |
| 97 | + # toolchains |
| 98 | + CC = 'armclang' |
| 99 | + CXX = 'armclang' |
| 100 | + AS = 'armasm' |
| 101 | + AR = 'armar' |
| 102 | + LINK = 'armlink' |
| 103 | + TARGET_EXT = 'axf' |
| 104 | + |
| 105 | + DEVICE = ' --cpu Cortex-M4.fp ' |
| 106 | + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m4 ' |
| 107 | + CFLAGS += ' -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 ' |
| 108 | + CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' |
| 109 | + CFLAGS += ' -gdwarf-3 -ffunction-sections ' |
| 110 | + AFLAGS = DEVICE + ' --apcs=interwork ' |
| 111 | + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' |
| 112 | + LFLAGS += ' --list rt-thread.map ' |
| 113 | + LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' |
| 114 | + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' |
| 115 | + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' |
| 116 | + |
| 117 | + EXEC_PATH += '/ARM/ARMCLANG/bin/' |
| 118 | + |
| 119 | + if BUILD == 'debug': |
| 120 | + CFLAGS += ' -g -O1' # armclang recommend |
| 121 | + AFLAGS += ' -g' |
| 122 | + else: |
| 123 | + CFLAGS += ' -O2' |
| 124 | + |
| 125 | + CXXFLAGS = CFLAGS |
| 126 | + CFLAGS += ' -std=c99' |
| 127 | + |
| 128 | + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' |
| 129 | + |
| 130 | +elif PLATFORM == 'iccarm': |
| 131 | + # toolchains |
| 132 | + CC = 'iccarm' |
| 133 | + CXX = 'iccarm' |
| 134 | + AS = 'iasmarm' |
| 135 | + AR = 'iarchive' |
| 136 | + LINK = 'ilinkarm' |
| 137 | + TARGET_EXT = 'out' |
| 138 | + |
| 139 | + DEVICE = '-Dewarm' |
| 140 | + |
| 141 | + CFLAGS = DEVICE |
| 142 | + CFLAGS += ' --diag_suppress Pa050' |
| 143 | + CFLAGS += ' --no_cse' |
| 144 | + CFLAGS += ' --no_unroll' |
| 145 | + CFLAGS += ' --no_inline' |
| 146 | + CFLAGS += ' --no_code_motion' |
| 147 | + CFLAGS += ' --no_tbaa' |
| 148 | + CFLAGS += ' --no_clustering' |
| 149 | + CFLAGS += ' --no_scheduling' |
| 150 | + CFLAGS += ' --endian=little' |
| 151 | + CFLAGS += ' --cpu=Cortex-M4' |
| 152 | + CFLAGS += ' -e' |
| 153 | + CFLAGS += ' --fpu=VFPv4_sp' |
| 154 | + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' |
| 155 | + CFLAGS += ' --silent' |
| 156 | + |
| 157 | + AFLAGS = DEVICE |
| 158 | + AFLAGS += ' -s+' |
| 159 | + AFLAGS += ' -w+' |
| 160 | + AFLAGS += ' -r' |
| 161 | + AFLAGS += ' --cpu Cortex-M4' |
| 162 | + AFLAGS += ' --fpu VFPv4_sp' |
| 163 | + AFLAGS += ' -S' |
| 164 | + |
| 165 | + if BUILD == 'debug': |
| 166 | + CFLAGS += ' --debug' |
| 167 | + CFLAGS += ' -On' |
| 168 | + else: |
| 169 | + CFLAGS += ' -Oh' |
| 170 | + |
| 171 | + LFLAGS = ' --config "board/linker_scripts/link.icf"' |
| 172 | + LFLAGS += ' --entry __iar_program_start' |
| 173 | + |
| 174 | + CXXFLAGS = CFLAGS |
| 175 | + |
| 176 | + EXEC_PATH = EXEC_PATH + '/arm/bin/' |
| 177 | + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' |
| 178 | + |
| 179 | +def dist_handle(BSP_ROOT, dist_dir): |
| 180 | + import sys |
| 181 | + cwd_path = os.getcwd() |
| 182 | + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) |
| 183 | + from sdk_dist import dist_do_building |
| 184 | + dist_do_building(BSP_ROOT, dist_dir) |
0 commit comments