@@ -60,7 +60,7 @@ def _psa_backend(target):
60
60
return 'TFM' if 'TFM' in Target .get_target (target ).labels else 'MBED_SPM'
61
61
62
62
63
- def _get_target_info (target ):
63
+ def _get_target_info (target , toolchain ):
64
64
"""
65
65
Creates a PSA target tuple with default toolchain and
66
66
artifact delivery directory.
@@ -74,7 +74,14 @@ def _get_target_info(target):
74
74
if not os .path .exists (delivery_dir ):
75
75
raise Exception ("{} does not have delivery_dir" .format (target ))
76
76
77
- return tuple ([TARGET_MAP [target ].name ,
77
+ if toolchain :
78
+ if toolchain not in TARGET_MAP [target ].supported_toolchains :
79
+ raise Exception ("Toolchain {} is not supported by {}" .format (toolchain , TARGET_MAP [target ].name ))
80
+ return tuple ([TARGET_MAP [target ].name ,
81
+ toolchain ,
82
+ delivery_dir ])
83
+ else :
84
+ return tuple ([TARGET_MAP [target ].name ,
78
85
TARGET_MAP [target ].default_toolchain ,
79
86
delivery_dir ])
80
87
@@ -105,7 +112,7 @@ def verbose_check_call(cmd, check_call=True):
105
112
return subprocess .call (cmd , stdout = subprocess_output , stderr = subprocess_err )
106
113
107
114
108
- def get_mbed_official_psa_release (target = None ):
115
+ def get_mbed_official_psa_release (target = None , toolchain = None ):
109
116
"""
110
117
Creates a list of PSA targets with default toolchain and
111
118
artifact delivery directory.
@@ -117,9 +124,9 @@ def get_mbed_official_psa_release(target=None):
117
124
logger .debug ("Found the following PSA targets: {}" .format (
118
125
', ' .join (psa_secure_targets )))
119
126
if target is not None :
120
- return [_get_target_info (target )]
127
+ return [_get_target_info (target , toolchain )]
121
128
122
- return [_get_target_info (t ) for t in psa_secure_targets ]
129
+ return [_get_target_info (t , toolchain ) for t in psa_secure_targets ]
123
130
124
131
125
132
def create_mbed_ignore (build_dir ):
@@ -142,6 +149,11 @@ def build_tests(target, toolchain, profile, args):
142
149
:param profile: build profile.
143
150
:param args: list of extra arguments.
144
151
"""
152
+ build_dir = os .path .join (ROOT , 'BUILD' , 'tests' , target )
153
+ if os .path .exists (build_dir ):
154
+ logger .info ("BUILD directory deleted: {}" .format (build_dir ))
155
+ shutil .rmtree (build_dir )
156
+
145
157
for test in PSA_TESTS .keys ():
146
158
logger .info (
147
159
"Building tests image({}) for {} using {} with {} profile" .format (
@@ -155,11 +167,9 @@ def build_tests(target, toolchain, profile, args):
155
167
'-t' , toolchain ,
156
168
'-m' , target ,
157
169
'--source' , ROOT ,
158
- '--build' , os .path .join (ROOT , 'BUILD' , 'tests' , target ),
159
- '--test-spec' , os .path .join (ROOT , 'BUILD' , 'tests' ,
160
- target , 'test_spec.json' ),
161
- '--build-data' , os .path .join (ROOT , 'BUILD' , 'tests' ,
162
- target , 'build_data.json' ),
170
+ '--build' , build_dir ,
171
+ '--test-spec' , os .path .join (build_dir , 'test_spec.json' ),
172
+ '--build-data' , os .path .join (build_dir , 'build_data.json' ),
163
173
'-n' , test ] + test_defines + args
164
174
165
175
if _psa_backend (target ) is 'TFM' :
@@ -182,13 +192,18 @@ def build_default_image(target, toolchain, profile, args):
182
192
logger .info ("Building default image for {} using {} with {} profile" .format (
183
193
target , toolchain , profile ))
184
194
195
+ build_dir = os .path .join (ROOT , 'BUILD' , target )
196
+ if os .path .exists (build_dir ):
197
+ logger .info ("BUILD directory deleted: {}" .format (build_dir ))
198
+ shutil .rmtree (build_dir )
199
+
185
200
cmd = [
186
201
sys .executable , MAKE_PY_LOCATTION ,
187
202
'-t' , toolchain ,
188
203
'-m' , target ,
189
204
'--profile' , profile ,
190
205
'--source' , ROOT ,
191
- '--build' , os . path . join ( ROOT , 'BUILD' , target ) ] + args
206
+ '--build' , build_dir ] + args
192
207
193
208
if _psa_backend (target ) is 'TFM' :
194
209
cmd += ['--app-config' , TFM_MBED_APP ]
@@ -200,7 +215,7 @@ def build_default_image(target, toolchain, profile, args):
200
215
"Finished building default image for {} successfully" .format (target ))
201
216
202
217
203
- def commit_binaries (target , delivery_dir ):
218
+ def commit_binaries (target , delivery_dir , toolchain ):
204
219
"""
205
220
Commits changes in secure binaries.
206
221
@@ -222,8 +237,8 @@ def commit_binaries(target, delivery_dir):
222
237
'add' , os .path .relpath (delivery_dir , ROOT )])
223
238
224
239
logger .info ("Committing images for {}" .format (target ))
225
- commit_message = '--message="Update secure binaries for {}"' . format (
226
- target )
240
+ commit_message = '--message="Update secure binaries for %s (%s)"' % (
241
+ target , toolchain )
227
242
verbose_check_call ([
228
243
'git' ,
229
244
'-C' , ROOT ,
@@ -252,7 +267,7 @@ def build_psa_platform(target, toolchain, delivery_dir, debug, git_commit,
252
267
253
268
build_default_image (target , toolchain , profile , args )
254
269
if git_commit :
255
- commit_binaries (target , delivery_dir )
270
+ commit_binaries (target , delivery_dir , toolchain )
256
271
257
272
258
273
def get_parser ():
@@ -263,6 +278,10 @@ def get_parser():
263
278
choices = _get_psa_secure_targets_list (),
264
279
metavar = "MCU" )
265
280
281
+ parser .add_argument ("-t" , "--tc" ,
282
+ help = "build for the given tool chain (default is default_toolchain)" ,
283
+ default = None )
284
+
266
285
parser .add_argument ("-d" , "--debug" ,
267
286
help = "set build profile to debug" ,
268
287
action = "store_true" ,
@@ -298,16 +317,10 @@ def get_parser():
298
317
299
318
300
319
def prep_build_dir ():
301
- """
302
- Creates a clean BUILD directory
303
- """
304
320
build_dir = os .path .join (ROOT , 'BUILD' )
305
- if os .path .exists (build_dir ):
306
- logger .debug ("BUILD directory already exists... Deleting" )
307
- shutil .rmtree (build_dir )
308
-
309
- os .makedirs (build_dir )
310
- logger .info ("BUILD directory created in {}" .format (build_dir ))
321
+ if not os .path .exists (build_dir ):
322
+ logger .info ("BUILD directory created in {}" .format (build_dir ))
323
+ os .makedirs (build_dir )
311
324
create_mbed_ignore (build_dir )
312
325
313
326
@@ -326,7 +339,7 @@ def main():
326
339
return
327
340
328
341
prep_build_dir ()
329
- psa_platforms_list = get_mbed_official_psa_release (options .mcu )
342
+ psa_platforms_list = get_mbed_official_psa_release (options .mcu , options . tc )
330
343
logger .info ("Building the following platforms: {}" .format (
331
344
', ' .join ([t [0 ] for t in psa_platforms_list ])))
332
345
0 commit comments