@@ -117,8 +117,6 @@ class Uvision(Exporter):
117
117
project file (.uvprojx).
118
118
The needed information can be viewed in uvision.tmpl
119
119
"""
120
- NAME = 'uvision5'
121
- TOOLCHAIN = 'ARM'
122
120
123
121
POST_BINARY_WHITELIST = set ([
124
122
"MCU_NRF51Code.binary_hook" ,
@@ -130,12 +128,6 @@ class Uvision(Exporter):
130
128
"NCS36510TargetCode.ncs36510_addfib"
131
129
])
132
130
133
- @classmethod
134
- def is_target_supported (cls , target_name ):
135
- target = TARGET_MAP [target_name ]
136
- return apply_supported_whitelist (
137
- cls .TOOLCHAIN , cls .POST_BINARY_WHITELIST , target ) and \
138
- DeviceCMSIS .check_supported (target_name )
139
131
140
132
#File associations within .uvprojx file
141
133
file_types = {'.cpp' : 8 , '.c' : 1 , '.s' : 2 ,
@@ -166,22 +158,25 @@ def uv_files(self, files):
166
158
def format_flags (self ):
167
159
"""Format toolchain flags for Uvision"""
168
160
flags = copy .deepcopy (self .flags )
169
- # to be preprocessed with armcc
170
161
asm_flag_string = (
171
162
'--cpreproc --cpreproc_opts=-D__ASSERT_MSG,' +
172
163
"," .join (filter (lambda f : f .startswith ("-D" ), flags ['asm_flags' ])))
173
164
flags ['asm_flags' ] = asm_flag_string
174
- # All non-asm flags are in one template field
175
- c_flags = list (set (flags ['c_flags' ] + flags ['cxx_flags' ] + flags ['common_flags' ]))
176
- ld_flags = list (set (flags ['ld_flags' ] ))
177
- # These flags are in template to be set by user i n IDE
178
- template = ["--no_vla" , "--cpp" , "--c99" ]
179
- # Flag is invalid if set in template
180
- # Optimizations are also set in the template
181
- invalid_flag = lambda x : x in template or re .match ("-O(\d|time)" , x )
182
- flags ['c_flags' ] = [flag .replace ('"' ,'\\ "' ) for flag in c_flags if not invalid_flag (flag )]
183
- flags ['c_flags' ] = " " .join (flags ['c_flags' ])
184
- flags ['ld_flags' ] = " " .join (flags ['ld_flags' ])
165
+
166
+ c_flags = set (flags ['c_flags' ] + flags ['cxx_flags' ] + flags ['common_flags' ])
167
+ in_template = set (["--no_vla" , "--cpp" , "--c99" , "-std=gnu99" ,
168
+ "-std=g++98" ] + self .toolchain .get_config_option (
169
+ self .toolchain .get_config_header ()))
170
+
171
+ valid_flag = lambda x : x not in in_template or not x .startswith ("-O" )
172
+ is_define = lambda s : s .startswith ("-D" )
173
+
174
+ flags ['c_flags' ] = " " .join (f .replace ('"' ,'\\ "' ) for f in c_flags
175
+ if (valid_flag (f ) and not is_define (f )))
176
+ flags ['c_flags' ] += " " .join (self .toolchain .get_config_option (
177
+ self .toolchain .get_config_header ()))
178
+ flags ['c_defines' ] = " " .join (f [2 :] for f in c_flags if is_define (f ))
179
+ flags ['ld_flags' ] = " " .join (set (flags ['ld_flags' ]))
185
180
return flags
186
181
187
182
def format_src (self , srcs ):
@@ -232,6 +227,8 @@ def generate(self):
232
227
else :
233
228
ctx ['fpu_setting' ] = 1
234
229
ctx ['fputype' ] = self .format_fpu (core )
230
+ ctx ['armc6' ] = int (self .TOOLCHAIN is 'ARMC6' )
231
+ ctx ['toolchain_name' ] = self .TOOLCHAIN_NAME
235
232
ctx .update (self .format_flags ())
236
233
self .gen_file ('uvision/uvision.tmpl' , ctx , self .project_name + ".uvprojx" )
237
234
self .gen_file ('uvision/uvision_debug.tmpl' , ctx , self .project_name + ".uvoptx" )
@@ -269,3 +266,29 @@ def build(project_name, log_name='build_log.txt', cleanup=True):
269
266
return - 1
270
267
else :
271
268
return 0
269
+
270
+ class UvisionArmc5 (Uvision ):
271
+ NAME = 'uvision5-armc5'
272
+ TOOLCHAIN = 'ARM'
273
+ TOOLCHAIN_NAME = ''
274
+
275
+ @classmethod
276
+ def is_target_supported (cls , target_name ):
277
+ target = TARGET_MAP [target_name ]
278
+ return apply_supported_whitelist (
279
+ cls .TOOLCHAIN , cls .POST_BINARY_WHITELIST , target ) and \
280
+ DeviceCMSIS .check_supported (target_name )
281
+
282
+ class UvisionArmc6 (Uvision ):
283
+ NAME = 'uvision5-armc6'
284
+ TOOLCHAIN = 'ARMC6'
285
+ TOOLCHAIN_NAME = '6070000::V6.7::.\ARMCLANG'
286
+
287
+ @classmethod
288
+ def is_target_supported (cls , target_name ):
289
+ target = TARGET_MAP [target_name ]
290
+ return (apply_supported_whitelist (
291
+ cls .TOOLCHAIN , cls .POST_BINARY_WHITELIST , target ) or
292
+ apply_supported_whitelist (
293
+ 'ARM' , Uvision .POST_BINARY_WHITELIST , target )) and \
294
+ DeviceCMSIS .check_supported (target_name )
0 commit comments