From 1fe4406f374291ab2e86e95a97341fd9c475fcb8 Mon Sep 17 00:00:00 2001 From: Jun Wako Date: Fri, 24 Apr 2015 16:26:14 +0900 Subject: Squashed 'tmk_core/' changes from 7967731..b9e0ea0 b9e0ea0 Merge commit '7fa9d8bdea3773d1195b04d98fcf27cf48ddd81d' as 'tool/mbed/mbed-sdk' 7fa9d8b Squashed 'tool/mbed/mbed-sdk/' content from commit 7c21ce5 git-subtree-dir: tmk_core git-subtree-split: b9e0ea08cb940de20b3610ecdda18e9d8cd7c552 --- tool/mbed/mbed-sdk/workspace_tools/project.py | 196 ++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 tool/mbed/mbed-sdk/workspace_tools/project.py (limited to 'tool/mbed/mbed-sdk/workspace_tools/project.py') diff --git a/tool/mbed/mbed-sdk/workspace_tools/project.py b/tool/mbed/mbed-sdk/workspace_tools/project.py new file mode 100644 index 0000000000..7bf165b0bd --- /dev/null +++ b/tool/mbed/mbed-sdk/workspace_tools/project.py @@ -0,0 +1,196 @@ +import sys +from os.path import join, abspath, dirname, exists +ROOT = abspath(join(dirname(__file__), "..")) +sys.path.insert(0, ROOT) + +from shutil import move, rmtree +from optparse import OptionParser + +from workspace_tools.paths import EXPORT_DIR, EXPORT_WORKSPACE, EXPORT_TMP +from workspace_tools.paths import MBED_BASE, MBED_LIBRARIES +from workspace_tools.export import export, setup_user_prj, EXPORTERS, mcu_ide_matrix +from workspace_tools.utils import args_error +from workspace_tools.tests import TESTS, Test, TEST_MAP +from workspace_tools.targets import TARGET_NAMES +from workspace_tools.libraries import LIBRARIES + +try: + import workspace_tools.private_settings as ps +except: + ps = object() + + +if __name__ == '__main__': + # Parse Options + parser = OptionParser() + + targetnames = TARGET_NAMES + targetnames.sort() + toolchainlist = EXPORTERS.keys() + toolchainlist.sort() + + parser.add_option("-m", "--mcu", + metavar="MCU", + default='LPC1768', + help="generate project for the given MCU (%s)"% ', '.join(targetnames)) + + parser.add_option("-i", + dest="ide", + default='uvision', + help="The target IDE: %s"% str(toolchainlist)) + + parser.add_option("-c", "--clean", + action="store_true", + default=False, + help="clean the export directory") + + parser.add_option("-p", + type="int", + dest="program", + help="The index of the desired test program: [0-%d]"% (len(TESTS)-1)) + + parser.add_option("-n", + dest="program_name", + help="The name of the desired test program") + + parser.add_option("-b", + dest="build", + action="store_true", + default=False, + help="use the mbed library build, instead of the sources") + + parser.add_option("-L", "--list-tests", + action="store_true", + dest="list_tests", + default=False, + help="list available programs in order and exit") + + parser.add_option("-S", "--list-matrix", + action="store_true", + dest="supported_ides", + default=False, + help="displays supported matrix of MCUs and IDEs") + + parser.add_option("-E", + action="store_true", + dest="supported_ides_html", + default=False, + help="writes workspace_tools/export/README.md") + + (options, args) = parser.parse_args() + + # Print available tests in order and exit + if options.list_tests is True: + print '\n'.join(map(str, sorted(TEST_MAP.values()))) + sys.exit() + + # Only prints matrix of supported IDEs + if options.supported_ides: + print mcu_ide_matrix() + exit(0) + + # Only prints matrix of supported IDEs + if options.supported_ides_html: + html = mcu_ide_matrix(verbose_html=True) + try: + with open("./export/README.md","w") as f: + f.write("Exporter IDE/Platform Support\n") + f.write("-----------------------------------\n") + f.write("\n") + f.write(html) + except IOError as e: + print "I/O error({0}): {1}".format(e.errno, e.strerror) + except: + print "Unexpected error:", sys.exc_info()[0] + raise + exit(0) + + # Clean Export Directory + if options.clean: + if exists(EXPORT_DIR): + rmtree(EXPORT_DIR) + + # Target + if options.mcu is None : + args_error(parser, "[ERROR] You should specify an MCU") + mcus = options.mcu + + # IDE + if options.ide is None: + args_error(parser, "[ERROR] You should specify an IDE") + ide = options.ide + + # Export results + successes = [] + failures = [] + + for mcu in mcus.split(','): + # Program Number or name + p, n = options.program, options.program_name + + if n is not None and p is not None: + args_error(parser, "[ERROR] specify either '-n' or '-p', not both") + if n: + if not n in TEST_MAP.keys(): + # Check if there is an alias for this in private_settings.py + if getattr(ps, "test_alias", None) is not None: + alias = ps.test_alias.get(n, "") + if not alias in TEST_MAP.keys(): + args_error(parser, "[ERROR] Program with name '%s' not found" % n) + else: + n = alias + else: + args_error(parser, "[ERROR] Program with name '%s' not found" % n) + p = TEST_MAP[n].n + if p is None or (p < 0) or (p > (len(TESTS)-1)): + message = "[ERROR] You have to specify one of the following tests:\n" + message += '\n'.join(map(str, sorted(TEST_MAP.values()))) + args_error(parser, message) + + # Project + if p is None or (p < 0) or (p > (len(TESTS)-1)): + message = "[ERROR] You have to specify one of the following tests:\n" + message += '\n'.join(map(str, sorted(TEST_MAP.values()))) + args_error(parser, message) + test = Test(p) + + # Some libraries have extra macros (called by exporter symbols) to we need to pass + # them to maintain compilation macros integrity between compiled library and + # header files we might use with it + lib_symbols = [] + for lib in LIBRARIES: + if lib['build_dir'] in test.dependencies: + lib_macros = lib.get('macros', None) + if lib_macros is not None: + lib_symbols.extend(lib_macros) + + if not options.build: + # Substitute the library builds with the sources + # TODO: Substitute also the other library build paths + if MBED_LIBRARIES in test.dependencies: + test.dependencies.remove(MBED_LIBRARIES) + test.dependencies.append(MBED_BASE) + + # Build the project with the same directory structure of the mbed online IDE + project_dir = join(EXPORT_WORKSPACE, test.id) + setup_user_prj(project_dir, test.source_dir, test.dependencies) + + # Export to selected toolchain + tmp_path, report = export(project_dir, test.id, ide, mcu, EXPORT_WORKSPACE, EXPORT_TMP, extra_symbols=lib_symbols) + if report['success']: + zip_path = join(EXPORT_DIR, "%s_%s_%s.zip" % (test.id, ide, mcu)) + move(tmp_path, zip_path) + successes.append("%s::%s\t%s"% (mcu, ide, zip_path)) + else: + failures.append("%s::%s\t%s"% (mcu, ide, report['errormsg'])) + + # Prints export results + print + if len(successes) > 0: + print "Successful exports:" + for success in successes: + print " * %s"% success + if len(failures) > 0: + print "Failed exports:" + for failure in failures: + print " * %s"% failure -- cgit v1.2.3