Clone of official tools

Committer:
screamer
Date:
Thu Aug 04 10:32:55 2016 +0100
Revision:
26:ed5e0d4e691e
Child:
31:8ea194f6145b
Add missing python modules

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 26:ed5e0d4e691e 1 import sys
screamer 26:ed5e0d4e691e 2 from os.path import join, abspath, dirname, exists, basename
screamer 26:ed5e0d4e691e 3 ROOT = abspath(join(dirname(__file__), ".."))
screamer 26:ed5e0d4e691e 4 sys.path.insert(0, ROOT)
screamer 26:ed5e0d4e691e 5
screamer 26:ed5e0d4e691e 6 from tools.paths import EXPORT_WORKSPACE, EXPORT_TMP
screamer 26:ed5e0d4e691e 7 from tools.paths import MBED_BASE, MBED_LIBRARIES
screamer 26:ed5e0d4e691e 8 from tools.export import export, setup_user_prj
screamer 26:ed5e0d4e691e 9 from tools.utils import mkdir
screamer 26:ed5e0d4e691e 10 from tools.tests import Test, TEST_MAP, TESTS
screamer 26:ed5e0d4e691e 11 from tools.libraries import LIBRARIES
screamer 26:ed5e0d4e691e 12
screamer 26:ed5e0d4e691e 13 try:
screamer 26:ed5e0d4e691e 14 import tools.private_settings as ps
screamer 26:ed5e0d4e691e 15 except:
screamer 26:ed5e0d4e691e 16 ps = object()
screamer 26:ed5e0d4e691e 17
screamer 26:ed5e0d4e691e 18
screamer 26:ed5e0d4e691e 19 def get_program(n):
screamer 26:ed5e0d4e691e 20 p = TEST_MAP[n].n
screamer 26:ed5e0d4e691e 21 return p
screamer 26:ed5e0d4e691e 22
screamer 26:ed5e0d4e691e 23
screamer 26:ed5e0d4e691e 24 def get_test(p):
screamer 26:ed5e0d4e691e 25 return Test(p)
screamer 26:ed5e0d4e691e 26
screamer 26:ed5e0d4e691e 27
screamer 26:ed5e0d4e691e 28 def get_test_from_name(n):
screamer 26:ed5e0d4e691e 29 if not n in TEST_MAP.keys():
screamer 26:ed5e0d4e691e 30 # Check if there is an alias for this in private_settings.py
screamer 26:ed5e0d4e691e 31 if getattr(ps, "test_alias", None) is not None:
screamer 26:ed5e0d4e691e 32 alias = ps.test_alias.get(n, "")
screamer 26:ed5e0d4e691e 33 if not alias in TEST_MAP.keys():
screamer 26:ed5e0d4e691e 34 return None
screamer 26:ed5e0d4e691e 35 else:
screamer 26:ed5e0d4e691e 36 n = alias
screamer 26:ed5e0d4e691e 37 else:
screamer 26:ed5e0d4e691e 38 return None
screamer 26:ed5e0d4e691e 39 return get_program(n)
screamer 26:ed5e0d4e691e 40
screamer 26:ed5e0d4e691e 41
screamer 26:ed5e0d4e691e 42 def get_lib_symbols(macros, src, program):
screamer 26:ed5e0d4e691e 43 # Some libraries have extra macros (called by exporter symbols) to we need to pass
screamer 26:ed5e0d4e691e 44 # them to maintain compilation macros integrity between compiled library and
screamer 26:ed5e0d4e691e 45 # header files we might use with it
screamer 26:ed5e0d4e691e 46 lib_symbols = []
screamer 26:ed5e0d4e691e 47 if macros:
screamer 26:ed5e0d4e691e 48 lib_symbols += macros
screamer 26:ed5e0d4e691e 49 if src:
screamer 26:ed5e0d4e691e 50 return lib_symbols
screamer 26:ed5e0d4e691e 51 test = get_test(program)
screamer 26:ed5e0d4e691e 52 for lib in LIBRARIES:
screamer 26:ed5e0d4e691e 53 if lib['build_dir'] in test.dependencies:
screamer 26:ed5e0d4e691e 54 lib_macros = lib.get('macros', None)
screamer 26:ed5e0d4e691e 55 if lib_macros is not None:
screamer 26:ed5e0d4e691e 56 lib_symbols.extend(lib_macros)
screamer 26:ed5e0d4e691e 57
screamer 26:ed5e0d4e691e 58
screamer 26:ed5e0d4e691e 59 def setup_project(mcu, ide, program=None, source_dir=None, build=None):
screamer 26:ed5e0d4e691e 60
screamer 26:ed5e0d4e691e 61 # Some libraries have extra macros (called by exporter symbols) to we need to pass
screamer 26:ed5e0d4e691e 62 # them to maintain compilation macros integrity between compiled library and
screamer 26:ed5e0d4e691e 63 # header files we might use with it
screamer 26:ed5e0d4e691e 64 if source_dir:
screamer 26:ed5e0d4e691e 65 # --source is used to generate IDE files to toolchain directly in the source tree and doesn't generate zip file
screamer 26:ed5e0d4e691e 66 project_dir = source_dir
screamer 26:ed5e0d4e691e 67 project_name = TESTS[program] if program else "Unnamed_Project"
screamer 26:ed5e0d4e691e 68 project_temp = join(source_dir[0], 'projectfiles', '%s_%s' % (ide, mcu))
screamer 26:ed5e0d4e691e 69 mkdir(project_temp)
screamer 26:ed5e0d4e691e 70 else:
screamer 26:ed5e0d4e691e 71 test = get_test(program)
screamer 26:ed5e0d4e691e 72 if not build:
screamer 26:ed5e0d4e691e 73 # Substitute the library builds with the sources
screamer 26:ed5e0d4e691e 74 # TODO: Substitute also the other library build paths
screamer 26:ed5e0d4e691e 75 if MBED_LIBRARIES in test.dependencies:
screamer 26:ed5e0d4e691e 76 test.dependencies.remove(MBED_LIBRARIES)
screamer 26:ed5e0d4e691e 77 test.dependencies.append(MBED_BASE)
screamer 26:ed5e0d4e691e 78
screamer 26:ed5e0d4e691e 79 # Build the project with the same directory structure of the mbed online IDE
screamer 26:ed5e0d4e691e 80 project_name = test.id
screamer 26:ed5e0d4e691e 81 project_dir = [join(EXPORT_WORKSPACE, project_name)]
screamer 26:ed5e0d4e691e 82 project_temp = EXPORT_TMP
screamer 26:ed5e0d4e691e 83 setup_user_prj(project_dir[0], test.source_dir, test.dependencies)
screamer 26:ed5e0d4e691e 84
screamer 26:ed5e0d4e691e 85 return project_dir, project_name, project_temp
screamer 26:ed5e0d4e691e 86
screamer 26:ed5e0d4e691e 87
screamer 26:ed5e0d4e691e 88 def perform_export(dir, name, ide, mcu, temp, clean=False, zip=False, lib_symbols='',
screamer 26:ed5e0d4e691e 89 sources_relative=False, progen_build=False):
screamer 26:ed5e0d4e691e 90
screamer 26:ed5e0d4e691e 91 tmp_path, report = export(dir, name, ide, mcu, dir[0], temp, clean=clean,
screamer 26:ed5e0d4e691e 92 make_zip=zip, extra_symbols=lib_symbols, sources_relative=sources_relative,
screamer 26:ed5e0d4e691e 93 progen_build=progen_build)
screamer 26:ed5e0d4e691e 94 return tmp_path, report
screamer 26:ed5e0d4e691e 95
screamer 26:ed5e0d4e691e 96
screamer 26:ed5e0d4e691e 97 def print_results(successes, failures, skips = []):
screamer 26:ed5e0d4e691e 98 print
screamer 26:ed5e0d4e691e 99 if len(successes) > 0:
screamer 26:ed5e0d4e691e 100 print "Successful: "
screamer 26:ed5e0d4e691e 101 for success in successes:
screamer 26:ed5e0d4e691e 102 print " * %s" % success
screamer 26:ed5e0d4e691e 103 if len(failures) > 0:
screamer 26:ed5e0d4e691e 104 print "Failed: "
screamer 26:ed5e0d4e691e 105 for failure in failures:
screamer 26:ed5e0d4e691e 106 print " * %s" % failure
screamer 26:ed5e0d4e691e 107 if len(skips) > 0:
screamer 26:ed5e0d4e691e 108 print "Skipped: "
screamer 26:ed5e0d4e691e 109 for skip in skips:
screamer 26:ed5e0d4e691e 110 print " * %s" % skip
screamer 26:ed5e0d4e691e 111