1import os
2import sys
3# toolchains options
4CROSS_TOOL = 'gcc'
5
6if os.getenv('RTT_CC'):
7    CROSS_TOOL = os.getenv('RTT_CC')
8# device options
9ARCH = 'arm'
10CPU = 'cortex-m4'
11CROSS_TOOL = 'keil'
12
13# cross_tool provides the cross compiler
14# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
15if CROSS_TOOL == 'gcc':
16    PLATFORM = 'gcc'
17    EXEC_PATH = '/Users/zhangyihong/.env/gcc-arm-none-eabi-5_4-2016q3/bin'
18elif CROSS_TOOL == 'keil':
19    PLATFORM = 'armcc'
20    EXEC_PATH = r'D:/Keil/Keil_v5'
21elif CROSS_TOOL == 'iar':
22    PLATFORM = 'iccarm'
23    EXEC_PATH = 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 7.2'
24
25if os.getenv('RTT_EXEC_PATH'):
26    EXEC_PATH = os.getenv('RTT_EXEC_PATH')
27
28BUILD = 'debug'
29#BUILD = 'release'
30
31if PLATFORM == 'gcc':
32    PREFIX = 'arm-none-eabi-'
33    CC = PREFIX + 'gcc'
34    CXX = PREFIX + 'g++'
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-m3 -mthumb -ffunction-sections -fdata-sections -Wall'
44    CFLAGS = DEVICE + ' -std=c99'
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 drivers/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    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
58elif PLATFORM == 'armcc':
59    # toolchains
60    # CC = 'armcc'
61    # CXX = 'armcc'
62    # AS = 'armasm'
63    # AR = 'armar'
64    # LINK = 'armlink'
65    # TARGET_EXT = 'axf'
66
67    # DEVICE = ' --cpu Cortex-M4.fp.sp'
68    # CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99'
69    # AFLAGS = DEVICE + ' --apcs=interwork '
70    # LFLAGS = DEVICE + ' --scatter "drivers/linker_scripts/link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict'
71
72    # CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include'
73    # LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib'
74
75    # CFLAGS += ' -D__MICROLIB '
76    # AFLAGS += ' --pd "__MICROLIB SETA 1" '
77    # LFLAGS += ' --library_type=microlib '
78    # EXEC_PATH += '/ARM/ARMCC/bin/'
79
80    # if BUILD == 'debug':
81    #     CFLAGS += ' -g -O0'
82    #     AFLAGS += ' -g'
83    # else:
84    #     CFLAGS += ' -O2'
85
86    # POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'
87
88    CC = 'armcc'
89    CXX = 'armcc'
90    AS = 'armasm'
91    AR = 'armar'
92    LINK = 'armlink'
93    TARGET_EXT = 'axf'
94
95    DEVICE = ' --cpu Cortex-M4.fp.sp --li'
96    CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99'
97    AFLAGS = DEVICE + ' --apcs=interwork '
98    LFLAGS = DEVICE + ' --scatter "drivers/linker_scripts/link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict'
99    CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include'
100    CFLAGS += ' -I' + EXEC_PATH + '../Arm/Packs/ARM/CMSIS/5.7.0/Device/ARM/ARMCM4/Include'
101    LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib'
102
103    # CFLAGS += ' -D__MICROLIB '
104    CFLAGS += ' -DARMCM4_FP '
105    AFLAGS += ' --pd "__MICROLIB SETA 1" '
106    # LFLAGS += ' --library_type=microlib '
107    EXEC_PATH += '/ARM/ARMCC/bin/'
108
109    if BUILD == 'debug':
110        CFLAGS += ' -g -O0'
111        AFLAGS += ' -g'
112    else:
113        CFLAGS += ' -O2'
114
115    CXXFLAGS = CFLAGS
116    # CFLAGS += ' -std=c99'
117
118    POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'
119
120
121elif PLATFORM == 'iccarm':
122    # toolchains
123    CC = 'iccarm'
124    AS = 'iasmarm'
125    AR = 'iarchive'
126    LINK = 'ilinkarm'
127    TARGET_EXT = 'out'
128
129    DEVICE = '-Dewarm' # + ' -D' + PART_TYPE
130
131    CFLAGS = DEVICE
132    CFLAGS += ' --diag_suppress Pa050'
133    CFLAGS += ' --no_cse'
134    CFLAGS += ' --no_unroll'
135    CFLAGS += ' --no_inline'
136    CFLAGS += ' --no_code_motion'
137    CFLAGS += ' --no_tbaa'
138    CFLAGS += ' --no_clustering'
139    CFLAGS += ' --no_scheduling'
140
141    CFLAGS += ' --endian=little'
142    CFLAGS += ' --cpu=Cortex-M3'
143    CFLAGS += ' -e'
144
145    CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"'
146    CFLAGS += ' --silent'
147
148    AFLAGS = DEVICE
149    AFLAGS += ' -s+'
150    AFLAGS += ' -w+'
151    AFLAGS += ' -r'
152    AFLAGS += ' --cpu ' + CPU
153
154    AFLAGS += ' -S'
155
156    if BUILD == 'debug':
157        CFLAGS += ' --debug'
158        CFLAGS += ' -On'
159    else:
160        CFLAGS += ' -Oh'
161
162    LFLAGS = ' --config "drivers/linker_scripts/link.icf"'
163    LFLAGS += ' --entry __iar_program_start'
164    #LFLAGS += ' --silent'
165
166    EXEC_PATH = EXEC_PATH + '/arm/bin/'
167    POST_ACTION = ''
168