Skip to content

Commit e43d196

Browse files
committed
Front-end scripts now use the ARM toolchain fallback.
Some unused imports were removed as well as some general clean up.
1 parent b006144 commit e43d196

File tree

3 files changed

+97
-66
lines changed

3 files changed

+97
-66
lines changed

tools/build.py

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,24 @@
2929
sys.path.insert(0, ROOT)
3030

3131

32-
from tools.toolchains import TOOLCHAINS, TOOLCHAIN_CLASSES, TOOLCHAIN_PATHS
33-
from tools.toolchains import mbedToolchain
34-
from tools.targets import TARGET_NAMES, TARGET_MAP, Target
32+
from tools.toolchains import TOOLCHAINS
33+
from tools.targets import TARGET_NAMES, Target
3534
from tools.options import get_default_options_parser
3635
from tools.options import extract_profile
3736
from tools.options import extract_mcus
3837
from tools.build_api import build_library, build_mbed_libs, build_lib
3938
from tools.build_api import mcu_toolchain_matrix
4039
from tools.build_api import print_build_results
41-
from tools.build_api import get_toolchain_name
42-
from tools.settings import CPPCHECK_CMD, CPPCHECK_MSG_FORMAT
43-
from tools.settings import CPPCHECK_CMD, CPPCHECK_MSG_FORMAT, CLI_COLOR_MAP
40+
from tools.build_api import target_supports_toolchain
41+
from tools.build_api import find_valid_toolchain
4442
from tools.notifier.term import TerminalNotifier
4543
from tools.utils import argparse_filestring_type, args_error, argparse_many
46-
from tools.utils import argparse_filestring_type, argparse_dir_not_parent
44+
from tools.utils import argparse_dir_not_parent
45+
from tools.utils import NoValidToolchainException
46+
from tools.utils import print_end_warnings
4747
from tools.paths import is_relative_to_root
4848

49-
if __name__ == '__main__':
49+
def main():
5050
start = time()
5151

5252
# Parse Options
@@ -169,40 +169,37 @@
169169
failures = []
170170
successes = []
171171
skipped = []
172+
end_warnings = []
172173

173-
toolchain_names = set()
174174
for toolchain in toolchains:
175175
for target_name in targets:
176176
target = Target.get_target(target_name)
177-
toolchain_names.add(get_toolchain_name(target, toolchain))
178177

179-
for toolchain_name in toolchain_names:
180-
if not TOOLCHAIN_CLASSES[toolchain_name].check_executable():
181-
search_path = TOOLCHAIN_PATHS[toolchain_name] or "No path set"
182-
args_error(parser, "Could not find executable for %s.\n"
183-
"Currently set search path: %s"
184-
% (toolchain_name, search_path))
178+
try:
179+
toolchain_name, internal_tc_name, end_warnings = find_valid_toolchain(
180+
target, toolchain
181+
)
182+
except NoValidToolchainException as e:
183+
print_end_warnings(e.end_warnings)
184+
args_error(parser, str(e))
185185

186-
for toolchain in toolchains:
187-
for target in targets:
188-
tt_id = "%s::%s" % (toolchain, target)
189-
if toolchain not in TARGET_MAP[target].supported_toolchains:
186+
tt_id = "%s::%s" % (internal_tc_name, target_name)
187+
if not target_supports_toolchain(target, toolchain):
190188
# Log this later
191189
print("%s skipped: toolchain not supported" % tt_id)
192190
skipped.append(tt_id)
193191
else:
194192
try:
195193
notifier = TerminalNotifier(options.verbose, options.silent)
196-
mcu = TARGET_MAP[target]
197-
profile = extract_profile(parser, options, toolchain)
194+
profile = extract_profile(parser, options, internal_tc_name)
198195

199-
if mcu.is_PSA_secure_target and \
196+
if target.is_PSA_secure_target and \
200197
not is_relative_to_root(options.source_dir):
201198
options.source_dir = ROOT
202199

203200
if options.source_dir:
204201
lib_build_res = build_library(
205-
options.source_dir, options.build_dir, mcu, toolchain,
202+
options.source_dir, options.build_dir, target, toolchain_name,
206203
jobs=options.jobs,
207204
clean=options.clean,
208205
archive=(not options.no_archive),
@@ -214,7 +211,7 @@
214211
)
215212
else:
216213
lib_build_res = build_mbed_libs(
217-
mcu, toolchain,
214+
target, toolchain_name,
218215
jobs=options.jobs,
219216
clean=options.clean,
220217
macros=options.macros,
@@ -225,7 +222,7 @@
225222

226223
for lib_id in libraries:
227224
build_lib(
228-
lib_id, mcu, toolchain,
225+
lib_id, target, toolchain_name,
229226
clean=options.clean,
230227
macros=options.macros,
231228
jobs=options.jobs,
@@ -236,10 +233,15 @@
236233
successes.append(tt_id)
237234
else:
238235
skipped.append(tt_id)
236+
except KeyboardInterrupt as e:
237+
print("\n[CTRL+c] exit")
238+
print_end_warnings(end_warnings)
239+
sys.exit(0)
239240
except Exception as e:
240241
if options.verbose:
241242
import traceback
242243
traceback.print_exc(file=sys.stdout)
244+
print_end_warnings(end_warnings)
243245
sys.exit(1)
244246
failures.append(tt_id)
245247
print(e)
@@ -254,5 +256,10 @@
254256
if report:
255257
print(print_build_results(report, report_name))
256258

259+
print_end_warnings(end_warnings)
257260
if failures:
258261
sys.exit(1)
262+
263+
264+
if __name__ == '__main__':
265+
main()

tools/make.py

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,12 @@
4747
from tools.build_api import mcu_toolchain_list
4848
from tools.build_api import mcu_target_list
4949
from tools.build_api import merge_build_data
50-
from tools.build_api import get_toolchain_name
51-
from utils import argparse_filestring_type
52-
from utils import argparse_many
53-
from utils import argparse_dir_not_parent
54-
from tools.toolchains import TOOLCHAIN_CLASSES, TOOLCHAIN_PATHS
50+
from tools.build_api import find_valid_toolchain
51+
from tools.utils import argparse_filestring_type
52+
from tools.utils import argparse_many
53+
from tools.utils import argparse_dir_not_parent
54+
from tools.utils import NoValidToolchainException
55+
from tools.utils import print_end_warnings
5556
from tools.settings import ROOT
5657
from tools.targets import Target
5758

@@ -68,8 +69,8 @@ def default_args_dict(options):
6869
ignore=options.ignore
6970
)
7071

71-
72-
def wrapped_build_project(src_dir, build_dir, mcu, *args, **kwargs):
72+
def wrapped_build_project(src_dir, build_dir, mcu, end_warnings, options, *args, **kwargs):
73+
error = False
7374
try:
7475
bin_file, update_file = build_project(
7576
src_dir, build_dir, mcu, *args, **kwargs
@@ -80,17 +81,22 @@ def wrapped_build_project(src_dir, build_dir, mcu, *args, **kwargs):
8081
except KeyboardInterrupt as e:
8182
print("\n[CTRL+c] exit")
8283
except NotSupportedException as e:
83-
print("\nCould not compile for %s: %s" % (mcu, str(e)))
84+
print("\nCould not compile for {}: {}".format(mcu, str(e)))
85+
error = True
8486
except Exception as e:
8587
if options.verbose:
8688
import traceback
8789
traceback.print_exc(file=sys.stdout)
8890
else:
89-
print("[ERROR] %s" % str(e))
90-
sys.exit(1)
91+
print("[ERROR] {}".format(str(e)))
9192

93+
error = True
9294

93-
if __name__ == '__main__':
95+
print_end_warnings(end_warnings)
96+
if error:
97+
sys.exit(1)
98+
99+
def main():
94100
# Parse Options
95101
parser = get_default_options_parser(add_app_config=True)
96102

@@ -282,6 +288,8 @@ def wrapped_build_project(src_dir, build_dir, mcu, *args, **kwargs):
282288
)
283289
options = parser.parse_args()
284290

291+
end_warnings = []
292+
285293
if options.supported_toolchains:
286294
if options.supported_toolchains == "matrix":
287295
print(mcu_toolchain_matrix(
@@ -323,21 +331,24 @@ def wrapped_build_project(src_dir, build_dir, mcu, *args, **kwargs):
323331

324332
notify = TerminalNotifier(options.verbose, options.silent, options.color)
325333

326-
toolchain_name = get_toolchain_name(target, toolchain)
327-
if not TOOLCHAIN_CLASSES[toolchain_name].check_executable():
328-
search_path = TOOLCHAIN_PATHS[toolchain_name] or "No path set"
329-
args_error(parser, "Could not find executable for %s.\n"
330-
"Currently set search path: %s"
331-
%(toolchain_name, search_path))
334+
try:
335+
toolchain_name, internal_tc_name, end_warnings = find_valid_toolchain(
336+
target, toolchain
337+
)
338+
except NoValidToolchainException as e:
339+
print_end_warnings(e.end_warnings)
340+
args_error(parser, str(e))
332341

333342
if options.source_dir is not None:
334343
wrapped_build_project(
335344
options.source_dir,
336345
options.build_dir,
337346
mcu,
338-
toolchain,
347+
end_warnings,
348+
options,
349+
toolchain_name,
339350
notify=notify,
340-
build_profile=extract_profile(parser, options, toolchain),
351+
build_profile=extract_profile(parser, options, internal_tc_name),
341352
**default_args_dict(options)
342353
)
343354
else:
@@ -389,13 +400,18 @@ def wrapped_build_project(src_dir, build_dir, mcu, *args, **kwargs):
389400
test.source_dir,
390401
build_dir,
391402
mcu,
392-
toolchain,
403+
end_warnings,
404+
options,
405+
toolchain_name,
393406
set(test.dependencies),
394407
notify=notify,
395408
report=build_data_blob,
396409
inc_dirs=[dirname(MBED_LIBRARIES)],
397-
build_profile=extract_profile(parser, options, toolchain),
410+
build_profile=extract_profile(parser, options, internal_tc_name),
398411
**default_args_dict(options)
399412
)
400413
if options.build_data:
401414
merge_build_data(options.build_data, build_data_blob, "application")
415+
416+
if __name__ == '__main__':
417+
main()

tools/test.py

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,25 @@
2828

2929
from tools.config import ConfigException, Config
3030
from tools.test_configs import get_default_config
31-
from tools.config import ConfigException
3231
from tools.test_api import find_tests, get_test_config, print_tests, build_tests, test_spec_from_test_builds
33-
import tools.test_configs as TestConfig
3432
from tools.options import get_default_options_parser, extract_profile, extract_mcus
35-
from tools.build_api import build_project, build_library
33+
from tools.build_api import build_library
3634
from tools.build_api import print_build_memory_usage
3735
from tools.build_api import merge_build_data
38-
from tools.build_api import get_toolchain_name
39-
from tools.targets import TARGET_MAP
36+
from tools.build_api import find_valid_toolchain
4037
from tools.notifier.term import TerminalNotifier
41-
from tools.utils import mkdir, ToolException, NotSupportedException, args_error, write_json_to_file
38+
from tools.utils import ToolException, NotSupportedException, args_error, write_json_to_file
39+
from tools.utils import NoValidToolchainException
4240
from tools.test_exporters import ReportExporter, ResultExporterType
4341
from tools.utils import argparse_filestring_type, argparse_lowercase_type, argparse_many
4442
from tools.utils import argparse_dir_not_parent
45-
from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS, TOOLCHAIN_CLASSES
46-
from tools.settings import CLI_COLOR_MAP
43+
from tools.utils import print_end_warnings
4744
from tools.settings import ROOT
4845
from tools.targets import Target
4946
from tools.paths import is_relative_to_root
5047

51-
if __name__ == '__main__':
48+
def main():
49+
error = False
5250
try:
5351
# Parse Options
5452
parser = get_default_options_parser(add_app_config=True)
@@ -140,6 +138,7 @@
140138

141139
all_tests = {}
142140
tests = {}
141+
end_warnings = []
143142

144143
# As default both test tools are enabled
145144
if not (options.greentea or options.icetea):
@@ -158,12 +157,13 @@
158157
args_error(parser, "argument -t/--tool is required")
159158
toolchain = options.tool[0]
160159

161-
toolchain_name = get_toolchain_name(target, toolchain)
162-
if not TOOLCHAIN_CLASSES[toolchain_name].check_executable():
163-
search_path = TOOLCHAIN_PATHS[toolchain_name] or "No path set"
164-
args_error(parser, "Could not find executable for %s.\n"
165-
"Currently set search path: %s"
166-
% (toolchain_name, search_path))
160+
try:
161+
toolchain_name, internal_tc_name, end_warnings = find_valid_toolchain(
162+
target, toolchain
163+
)
164+
except NoValidToolchainException as e:
165+
print_end_warnings(e.end_warnings)
166+
args_error(parser, str(e))
167167

168168
# Assign config file. Precedence: test_config>app_config
169169
# TODO: merge configs if both given
@@ -185,7 +185,7 @@
185185
all_tests.update(find_tests(
186186
base_dir=path,
187187
target_name=mcu,
188-
toolchain_name=toolchain,
188+
toolchain_name=toolchain_name,
189189
icetea=options.icetea,
190190
greentea=options.greentea,
191191
app_config=config))
@@ -229,12 +229,12 @@
229229
build_properties = {}
230230

231231
library_build_success = False
232-
profile = extract_profile(parser, options, toolchain)
232+
profile = extract_profile(parser, options, internal_tc_name)
233233
try:
234234
# Build sources
235235
notify = TerminalNotifier(options.verbose)
236236
build_library(base_source_paths, options.build_dir, mcu,
237-
toolchain, jobs=options.jobs,
237+
toolchain_name, jobs=options.jobs,
238238
clean=options.clean, report=build_report,
239239
properties=build_properties, name="mbed-build",
240240
macros=options.macros,
@@ -267,7 +267,7 @@
267267
[os.path.relpath(options.build_dir)],
268268
options.build_dir,
269269
mcu,
270-
toolchain,
270+
toolchain_name,
271271
clean=options.clean,
272272
report=build_report,
273273
properties=build_properties,
@@ -310,8 +310,16 @@
310310
except ConfigException as e:
311311
# Catching ConfigException here to prevent a traceback
312312
print("[ERROR] %s" % str(e))
313+
error = True
313314
except Exception as e:
314315
import traceback
315316
traceback.print_exc(file=sys.stdout)
316317
print("[ERROR] %s" % str(e))
318+
error = True
319+
320+
print_end_warnings(end_warnings)
321+
if error:
317322
sys.exit(1)
323+
324+
if __name__ == '__main__':
325+
main()

0 commit comments

Comments
 (0)