1import os
2
3# toolchains options
4ARCH='arm'
5CPU='cortex-m4'
6CROSS_TOOL='keil'
7
8if os.getenv('RTT_CC'):
9	CROSS_TOOL = os.getenv('RTT_CC')
10
11# cross_tool provides the cross compiler
12# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
13
14if  CROSS_TOOL == 'gcc':
15	PLATFORM 	= 'gcc'
16	EXEC_PATH 	= 'D:/SourceryGCC/bin'
17elif CROSS_TOOL == 'keil':
18	PLATFORM 	= 'armcc'
19	EXEC_PATH 	= 'C:/Keil_v5'
20elif CROSS_TOOL == 'iar':
21    print('================ERROR============================')
22    print('Not support iar yet!')
23    print('=================================================')
24    exit(0)
25
26if os.getenv('RTT_EXEC_PATH'):
27	EXEC_PATH = os.getenv('RTT_EXEC_PATH')
28
29BUILD = 'debug'
30
31if PLATFORM == 'gcc':
32    # toolchains
33    PREFIX = 'arm-none-eabi-'
34    CC = PREFIX + 'gcc'
35    AS = PREFIX + 'gcc'
36    AR = PREFIX + 'ar'
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-m4 -mthumb -ffunction-sections -fdata-sections'
44    CFLAGS = DEVICE
45    AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
46    LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-apollo2.map,-cref,-u,am_reset_isr -T rtthread_link.ld'
47
48    CPATH = ''
49    LPATH = ''
50
51    if BUILD == 'debug':
52        CFLAGS += ' -O0 -gdwarf-2'
53        AFLAGS += ' -gdwarf-2'
54    else:
55        CFLAGS += ' -O2'
56
57    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
58
59elif PLATFORM == 'armcc':
60    # toolchains
61    CC = 'armcc'
62    AS = 'armasm'
63    AR = 'armar'
64    LINK = 'armlink'
65    TARGET_EXT = 'axf'
66
67    DEVICE = ' --cpu Cortex-M4'
68    CFLAGS = DEVICE + ' --c99 --apcs=interwork'
69    AFLAGS = DEVICE
70    LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-apollo2.map --scatter rtthread.sct'
71
72    LFLAGS += ' --keep *.o(.rti_fn.*)   --keep *.o(FSymTab) --keep *.o(VSymTab)'
73
74    EXEC_PATH += '/ARM/ARMCC/bin'
75
76    if BUILD == 'debug':
77        CFLAGS += ' -g -O0'
78        AFLAGS += ' -g'
79    else:
80        CFLAGS += ' -O2'
81
82    POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'
83