nkjnm

Dependencies:   MAX44000 nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Revision:
1:55a6170b404f
diff -r b86eda0e990d -r 55a6170b404f mbd_os/tools/test/examples/examples.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbd_os/tools/test/examples/examples.py	Sat Sep 17 16:32:05 2016 +0000
@@ -0,0 +1,102 @@
+""" import and bulid a bunch of example programs """
+
+from argparse import ArgumentParser
+import os
+from os.path import dirname, abspath, basename
+import os.path
+import sys
+import subprocess
+import json
+
+ROOT = abspath(dirname(dirname(dirname(dirname(__file__)))))
+sys.path.insert(0, ROOT)
+
+from tools.build_api import get_mbed_official_release
+from tools.targets import TARGET_MAP
+from tools.utils import argparse_force_uppercase_type
+
+
+EXAMPLES = json.load(open(os.path.join(os.path.dirname(__file__),
+                                       "examples.json")))
+
+def print_stuff(name, lst):
+    if lst:
+        print("#"*80)
+        print("# {} example combinations".format(name))
+        print("#")
+    for thing in lst:
+        print(thing)
+
+
+SUPPORTED_TOOLCHAINS = ["ARM", "IAR", "GCC_ARM"]
+
+
+def target_cross_toolchain(allowed_toolchains,
+                           features=[], targets=TARGET_MAP.keys()):
+    """Generate pairs of target and toolchains
+
+    Args:
+    allowed_toolchains - a list of all possible toolchains
+
+    Kwargs:
+    features - the features that must be in the features array of a
+               target
+    targets - a list of available targets
+    """
+    for target, toolchains in get_mbed_official_release("5"):
+        for toolchain in toolchains:
+            if (toolchain in allowed_toolchains and
+                target in targets and
+                all(feature in TARGET_MAP[target].features
+                    for feature in features)):
+                yield target, toolchain
+
+
+def main():
+    """Entry point"""
+    parser = ArgumentParser()
+    subparsers = parser.add_subparsers()
+    import_cmd = subparsers.add_parser("import")
+    import_cmd.set_defaults(fn=do_import)
+    compile_cmd = subparsers.add_parser("compile")
+    compile_cmd.set_defaults(fn=do_compile)
+    compile_cmd.add_argument(
+        "toolchains", nargs="*", default=SUPPORTED_TOOLCHAINS,
+        type=argparse_force_uppercase_type(SUPPORTED_TOOLCHAINS,
+                                           "toolchain"))
+    args = parser.parse_args()
+    return args.fn(args)
+
+
+def do_import(_):
+    """Do the import step of this process"""
+    for example, _ in EXAMPLES.iteritems():
+        subprocess.call(["mbed-cli", "import", example])
+    return 0
+
+
+def do_compile(args):
+    """Do the compile step"""
+    failures = []
+    sucesses = []
+    for example, requirements in EXAMPLES.iteritems():
+        os.chdir(basename(example))
+        for target, toolchain in target_cross_toolchain(args.toolchains,
+                                                        **requirements):
+            proc = subprocess.Popen(["mbed-cli", "compile", "-t", toolchain,
+                                     "-m", target, "--silent"])
+            proc.wait()
+            example_name = "{} {} {}".format(basename(example), target,
+                                             toolchain)
+            if proc.returncode:
+                failures.append(example_name)
+            else:
+                sucesses.append(example_name)
+        os.chdir("..")
+
+    print_stuff("Passed", sucesses)
+    print_stuff("Failed", failures)
+    return len(failures)
+
+if __name__ == "__main__":
+    sys.exit(main())