Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-sdk-tools by
make.py@32:8ea194f6145b, 2017-01-04 (annotated)
- Committer:
- The Other Jimmy
- Date:
- Wed Jan 04 11:58:24 2017 -0600
- Revision:
- 32:8ea194f6145b
- Parent:
- 24:25bff2709c20
Update tools to follow mbed-os tools release 5.3.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:66f3b5499f7f | 1 | #! /usr/bin/env python2 |
screamer | 0:66f3b5499f7f | 2 | """ |
screamer | 0:66f3b5499f7f | 3 | mbed SDK |
screamer | 0:66f3b5499f7f | 4 | Copyright (c) 2011-2013 ARM Limited |
screamer | 0:66f3b5499f7f | 5 | |
screamer | 0:66f3b5499f7f | 6 | Licensed under the Apache License, Version 2.0 (the "License"); |
screamer | 0:66f3b5499f7f | 7 | you may not use this file except in compliance with the License. |
screamer | 0:66f3b5499f7f | 8 | You may obtain a copy of the License at |
screamer | 0:66f3b5499f7f | 9 | |
screamer | 0:66f3b5499f7f | 10 | http://www.apache.org/licenses/LICENSE-2.0 |
screamer | 0:66f3b5499f7f | 11 | |
screamer | 0:66f3b5499f7f | 12 | Unless required by applicable law or agreed to in writing, software |
screamer | 0:66f3b5499f7f | 13 | distributed under the License is distributed on an "AS IS" BASIS, |
screamer | 0:66f3b5499f7f | 14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
screamer | 0:66f3b5499f7f | 15 | See the License for the specific language governing permissions and |
screamer | 0:66f3b5499f7f | 16 | limitations under the License. |
screamer | 0:66f3b5499f7f | 17 | |
screamer | 0:66f3b5499f7f | 18 | |
screamer | 0:66f3b5499f7f | 19 | TEST BUILD & RUN |
screamer | 0:66f3b5499f7f | 20 | """ |
screamer | 0:66f3b5499f7f | 21 | import sys |
The Other Jimmy |
32:8ea194f6145b | 22 | import json |
screamer | 0:66f3b5499f7f | 23 | from time import sleep |
screamer | 0:66f3b5499f7f | 24 | from shutil import copy |
The Other Jimmy |
32:8ea194f6145b | 25 | from os.path import join, abspath, dirname |
screamer | 0:66f3b5499f7f | 26 | |
screamer | 0:66f3b5499f7f | 27 | # Be sure that the tools directory is in the search path |
screamer | 0:66f3b5499f7f | 28 | ROOT = abspath(join(dirname(__file__), "..")) |
screamer | 0:66f3b5499f7f | 29 | sys.path.insert(0, ROOT) |
screamer | 0:66f3b5499f7f | 30 | |
screamer | 0:66f3b5499f7f | 31 | from tools.utils import args_error |
The Other Jimmy |
32:8ea194f6145b | 32 | from tools.utils import NotSupportedException |
screamer | 0:66f3b5499f7f | 33 | from tools.paths import BUILD_DIR |
The Other Jimmy |
32:8ea194f6145b | 34 | from tools.paths import MBED_LIBRARIES |
screamer | 0:66f3b5499f7f | 35 | from tools.paths import RTOS_LIBRARIES |
screamer | 0:66f3b5499f7f | 36 | from tools.paths import RPC_LIBRARY |
screamer | 0:66f3b5499f7f | 37 | from tools.paths import ETH_LIBRARY |
screamer | 0:66f3b5499f7f | 38 | from tools.paths import USB_HOST_LIBRARIES, USB_LIBRARIES |
screamer | 0:66f3b5499f7f | 39 | from tools.paths import DSP_LIBRARIES |
screamer | 0:66f3b5499f7f | 40 | from tools.paths import FS_LIBRARY |
screamer | 0:66f3b5499f7f | 41 | from tools.paths import UBLOX_LIBRARY |
screamer | 0:66f3b5499f7f | 42 | from tools.tests import TESTS, Test, TEST_MAP |
screamer | 0:66f3b5499f7f | 43 | from tools.tests import TEST_MBED_LIB |
screamer | 22:9e85236d8716 | 44 | from tools.tests import test_known, test_name_known |
screamer | 0:66f3b5499f7f | 45 | from tools.targets import TARGET_MAP |
screamer | 0:66f3b5499f7f | 46 | from tools.options import get_default_options_parser |
The Other Jimmy |
32:8ea194f6145b | 47 | from tools.options import extract_profile |
screamer | 0:66f3b5499f7f | 48 | from tools.build_api import build_project |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 49 | from tools.build_api import mcu_toolchain_matrix |
screamer | 22:9e85236d8716 | 50 | from utils import argparse_filestring_type |
screamer | 22:9e85236d8716 | 51 | from utils import argparse_many |
screamer | 24:25bff2709c20 | 52 | from utils import argparse_dir_not_parent |
The Other Jimmy |
32:8ea194f6145b | 53 | from tools.toolchains import mbedToolchain, TOOLCHAIN_CLASSES, TOOLCHAIN_PATHS |
screamer | 22:9e85236d8716 | 54 | from tools.settings import CLI_COLOR_MAP |
screamer | 0:66f3b5499f7f | 55 | |
screamer | 0:66f3b5499f7f | 56 | if __name__ == '__main__': |
screamer | 0:66f3b5499f7f | 57 | # Parse Options |
The Other Jimmy |
32:8ea194f6145b | 58 | parser = get_default_options_parser(add_app_config=True) |
screamer | 22:9e85236d8716 | 59 | group = parser.add_mutually_exclusive_group(required=False) |
screamer | 22:9e85236d8716 | 60 | group.add_argument("-p", |
screamer | 22:9e85236d8716 | 61 | type=argparse_many(test_known), |
screamer | 0:66f3b5499f7f | 62 | dest="program", |
screamer | 0:66f3b5499f7f | 63 | help="The index of the desired test program: [0-%d]" % (len(TESTS)-1)) |
screamer | 0:66f3b5499f7f | 64 | |
screamer | 22:9e85236d8716 | 65 | group.add_argument("-n", |
screamer | 22:9e85236d8716 | 66 | type=argparse_many(test_name_known), |
screamer | 22:9e85236d8716 | 67 | dest="program", |
screamer | 0:66f3b5499f7f | 68 | help="The name of the desired test program") |
screamer | 0:66f3b5499f7f | 69 | |
screamer | 22:9e85236d8716 | 70 | parser.add_argument("-j", "--jobs", |
screamer | 22:9e85236d8716 | 71 | type=int, |
screamer | 0:66f3b5499f7f | 72 | dest="jobs", |
screamer | 0:66f3b5499f7f | 73 | default=0, |
screamer | 0:66f3b5499f7f | 74 | help="Number of concurrent jobs. Default: 0/auto (based on host machine's number of CPUs)") |
screamer | 0:66f3b5499f7f | 75 | |
screamer | 22:9e85236d8716 | 76 | parser.add_argument("-v", "--verbose", |
screamer | 0:66f3b5499f7f | 77 | action="store_true", |
screamer | 0:66f3b5499f7f | 78 | dest="verbose", |
screamer | 0:66f3b5499f7f | 79 | default=False, |
screamer | 0:66f3b5499f7f | 80 | help="Verbose diagnostic output") |
screamer | 0:66f3b5499f7f | 81 | |
screamer | 22:9e85236d8716 | 82 | parser.add_argument("--silent", |
screamer | 0:66f3b5499f7f | 83 | action="store_true", |
screamer | 0:66f3b5499f7f | 84 | dest="silent", |
screamer | 0:66f3b5499f7f | 85 | default=False, |
screamer | 0:66f3b5499f7f | 86 | help="Silent diagnostic output (no copy, compile notification)") |
screamer | 0:66f3b5499f7f | 87 | |
screamer | 22:9e85236d8716 | 88 | parser.add_argument("-D", |
screamer | 0:66f3b5499f7f | 89 | action="append", |
screamer | 0:66f3b5499f7f | 90 | dest="macros", |
screamer | 0:66f3b5499f7f | 91 | help="Add a macro definition") |
screamer | 0:66f3b5499f7f | 92 | |
screamer | 22:9e85236d8716 | 93 | group.add_argument("-S", "--supported-toolchains", |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 94 | action="store_true", |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 95 | dest="supported_toolchains", |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 96 | default=False, |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 97 | help="Displays supported matrix of MCUs and toolchains") |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 98 | |
screamer | 22:9e85236d8716 | 99 | parser.add_argument('-f', '--filter', |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 100 | dest='general_filter_regex', |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 101 | default=None, |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 102 | help='For some commands you can use filter to filter out results') |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 103 | |
screamer | 0:66f3b5499f7f | 104 | # Local run |
screamer | 22:9e85236d8716 | 105 | parser.add_argument("--automated", action="store_true", dest="automated", |
screamer | 0:66f3b5499f7f | 106 | default=False, help="Automated test") |
screamer | 22:9e85236d8716 | 107 | parser.add_argument("--host", dest="host_test", |
screamer | 0:66f3b5499f7f | 108 | default=None, help="Host test") |
screamer | 22:9e85236d8716 | 109 | parser.add_argument("--extra", dest="extra", |
screamer | 0:66f3b5499f7f | 110 | default=None, help="Extra files") |
screamer | 22:9e85236d8716 | 111 | parser.add_argument("--peripherals", dest="peripherals", |
screamer | 0:66f3b5499f7f | 112 | default=None, help="Required peripherals") |
screamer | 22:9e85236d8716 | 113 | parser.add_argument("--dep", dest="dependencies", |
screamer | 0:66f3b5499f7f | 114 | default=None, help="Dependencies") |
screamer | 22:9e85236d8716 | 115 | parser.add_argument("--source", dest="source_dir", type=argparse_filestring_type, |
screamer | 22:9e85236d8716 | 116 | default=None, help="The source (input) directory", action="append") |
screamer | 22:9e85236d8716 | 117 | parser.add_argument("--duration", type=int, dest="duration", |
screamer | 0:66f3b5499f7f | 118 | default=None, help="Duration of the test") |
screamer | 24:25bff2709c20 | 119 | parser.add_argument("--build", dest="build_dir", type=argparse_dir_not_parent(ROOT), |
screamer | 0:66f3b5499f7f | 120 | default=None, help="The build (output) directory") |
screamer | 22:9e85236d8716 | 121 | parser.add_argument("-N", "--artifact-name", dest="artifact_name", |
screamer | 0:66f3b5499f7f | 122 | default=None, help="The built project's name") |
screamer | 22:9e85236d8716 | 123 | parser.add_argument("-d", "--disk", dest="disk", |
screamer | 0:66f3b5499f7f | 124 | default=None, help="The mbed disk") |
screamer | 22:9e85236d8716 | 125 | parser.add_argument("-s", "--serial", dest="serial", |
screamer | 0:66f3b5499f7f | 126 | default=None, help="The mbed serial port") |
screamer | 22:9e85236d8716 | 127 | parser.add_argument("-b", "--baud", type=int, dest="baud", |
screamer | 0:66f3b5499f7f | 128 | default=None, help="The mbed serial baud rate") |
screamer | 22:9e85236d8716 | 129 | group.add_argument("-L", "--list-tests", action="store_true", dest="list_tests", |
screamer | 0:66f3b5499f7f | 130 | default=False, help="List available tests in order and exit") |
screamer | 0:66f3b5499f7f | 131 | |
screamer | 0:66f3b5499f7f | 132 | # Ideally, all the tests with a single "main" thread can be run with, or |
screamer | 0:66f3b5499f7f | 133 | # without the rtos, eth, usb_host, usb, dsp, fat, ublox |
screamer | 22:9e85236d8716 | 134 | parser.add_argument("--rtos", |
screamer | 0:66f3b5499f7f | 135 | action="store_true", dest="rtos", |
screamer | 0:66f3b5499f7f | 136 | default=False, help="Link with RTOS library") |
screamer | 0:66f3b5499f7f | 137 | |
screamer | 22:9e85236d8716 | 138 | parser.add_argument("--rpc", |
screamer | 0:66f3b5499f7f | 139 | action="store_true", dest="rpc", |
screamer | 0:66f3b5499f7f | 140 | default=False, help="Link with RPC library") |
screamer | 0:66f3b5499f7f | 141 | |
screamer | 22:9e85236d8716 | 142 | parser.add_argument("--eth", |
screamer | 0:66f3b5499f7f | 143 | action="store_true", dest="eth", |
screamer | 0:66f3b5499f7f | 144 | default=False, |
screamer | 0:66f3b5499f7f | 145 | help="Link with Ethernet library") |
screamer | 0:66f3b5499f7f | 146 | |
screamer | 22:9e85236d8716 | 147 | parser.add_argument("--usb_host", |
screamer | 0:66f3b5499f7f | 148 | action="store_true", |
screamer | 0:66f3b5499f7f | 149 | dest="usb_host", |
screamer | 0:66f3b5499f7f | 150 | default=False, |
screamer | 0:66f3b5499f7f | 151 | help="Link with USB Host library") |
screamer | 0:66f3b5499f7f | 152 | |
screamer | 22:9e85236d8716 | 153 | parser.add_argument("--usb", |
screamer | 0:66f3b5499f7f | 154 | action="store_true", |
screamer | 0:66f3b5499f7f | 155 | dest="usb", |
screamer | 0:66f3b5499f7f | 156 | default=False, |
screamer | 0:66f3b5499f7f | 157 | help="Link with USB Device library") |
screamer | 0:66f3b5499f7f | 158 | |
screamer | 22:9e85236d8716 | 159 | parser.add_argument("--dsp", |
screamer | 0:66f3b5499f7f | 160 | action="store_true", |
screamer | 0:66f3b5499f7f | 161 | dest="dsp", |
screamer | 0:66f3b5499f7f | 162 | default=False, |
screamer | 0:66f3b5499f7f | 163 | help="Link with DSP library") |
screamer | 0:66f3b5499f7f | 164 | |
screamer | 22:9e85236d8716 | 165 | parser.add_argument("--fat", |
screamer | 0:66f3b5499f7f | 166 | action="store_true", |
screamer | 0:66f3b5499f7f | 167 | dest="fat", |
screamer | 0:66f3b5499f7f | 168 | default=False, |
screamer | 0:66f3b5499f7f | 169 | help="Link with FS ad SD card file system library") |
screamer | 0:66f3b5499f7f | 170 | |
screamer | 22:9e85236d8716 | 171 | parser.add_argument("--ublox", |
screamer | 0:66f3b5499f7f | 172 | action="store_true", |
screamer | 0:66f3b5499f7f | 173 | dest="ublox", |
screamer | 0:66f3b5499f7f | 174 | default=False, |
screamer | 0:66f3b5499f7f | 175 | help="Link with U-Blox library") |
screamer | 0:66f3b5499f7f | 176 | |
screamer | 22:9e85236d8716 | 177 | parser.add_argument("--testlib", |
screamer | 0:66f3b5499f7f | 178 | action="store_true", |
screamer | 0:66f3b5499f7f | 179 | dest="testlib", |
screamer | 0:66f3b5499f7f | 180 | default=False, |
screamer | 0:66f3b5499f7f | 181 | help="Link with mbed test library") |
screamer | 0:66f3b5499f7f | 182 | |
screamer | 0:66f3b5499f7f | 183 | # Specify a different linker script |
screamer | 22:9e85236d8716 | 184 | parser.add_argument("-l", "--linker", dest="linker_script", |
screamer | 22:9e85236d8716 | 185 | type=argparse_filestring_type, |
screamer | 0:66f3b5499f7f | 186 | default=None, help="use the specified linker script") |
screamer | 0:66f3b5499f7f | 187 | |
screamer | 22:9e85236d8716 | 188 | options = parser.parse_args() |
screamer | 0:66f3b5499f7f | 189 | |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 190 | # Only prints matrix of supported toolchains |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 191 | if options.supported_toolchains: |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 192 | print mcu_toolchain_matrix(platform_filter=options.general_filter_regex) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 193 | exit(0) |
Screamer@Y5070-M.virtuoso | 9:2d27d77ada5c | 194 | |
screamer | 0:66f3b5499f7f | 195 | # Print available tests in order and exit |
screamer | 0:66f3b5499f7f | 196 | if options.list_tests is True: |
screamer | 0:66f3b5499f7f | 197 | print '\n'.join(map(str, sorted(TEST_MAP.values()))) |
screamer | 0:66f3b5499f7f | 198 | sys.exit() |
screamer | 0:66f3b5499f7f | 199 | |
screamer | 0:66f3b5499f7f | 200 | # force program to "0" if a source dir is specified |
screamer | 0:66f3b5499f7f | 201 | if options.source_dir is not None: |
screamer | 0:66f3b5499f7f | 202 | p = 0 |
screamer | 0:66f3b5499f7f | 203 | else: |
screamer | 0:66f3b5499f7f | 204 | # Program Number or name |
screamer | 22:9e85236d8716 | 205 | p = options.program |
screamer | 0:66f3b5499f7f | 206 | |
screamer | 0:66f3b5499f7f | 207 | # If 'p' was set via -n to list of numbers make this a single element integer list |
screamer | 0:66f3b5499f7f | 208 | if type(p) != type([]): |
screamer | 0:66f3b5499f7f | 209 | p = [p] |
screamer | 0:66f3b5499f7f | 210 | |
screamer | 0:66f3b5499f7f | 211 | # Target |
screamer | 0:66f3b5499f7f | 212 | if options.mcu is None : |
The Other Jimmy |
32:8ea194f6145b | 213 | args_error(parser, "argument -m/--mcu is required") |
screamer | 22:9e85236d8716 | 214 | mcu = options.mcu[0] |
screamer | 0:66f3b5499f7f | 215 | |
screamer | 0:66f3b5499f7f | 216 | # Toolchain |
screamer | 0:66f3b5499f7f | 217 | if options.tool is None: |
The Other Jimmy |
32:8ea194f6145b | 218 | args_error(parser, "argument -t/--tool is required") |
screamer | 22:9e85236d8716 | 219 | toolchain = options.tool[0] |
screamer | 22:9e85236d8716 | 220 | |
The Other Jimmy |
32:8ea194f6145b | 221 | if (options.program is None) and (not options.source_dir): |
The Other Jimmy |
32:8ea194f6145b | 222 | args_error(parser, "one of -p, -n, or --source is required") |
The Other Jimmy |
32:8ea194f6145b | 223 | |
The Other Jimmy |
32:8ea194f6145b | 224 | if options.source_dir and not options.build_dir: |
The Other Jimmy |
32:8ea194f6145b | 225 | args_error(parser, "argument --build is required when argument --source is provided") |
The Other Jimmy |
32:8ea194f6145b | 226 | |
The Other Jimmy |
32:8ea194f6145b | 227 | |
screamer | 22:9e85236d8716 | 228 | if options.color: |
screamer | 22:9e85236d8716 | 229 | # This import happens late to prevent initializing colorization when we don't need it |
screamer | 22:9e85236d8716 | 230 | import colorize |
screamer | 22:9e85236d8716 | 231 | if options.verbose: |
screamer | 22:9e85236d8716 | 232 | notify = mbedToolchain.print_notify_verbose |
screamer | 22:9e85236d8716 | 233 | else: |
screamer | 22:9e85236d8716 | 234 | notify = mbedToolchain.print_notify |
screamer | 22:9e85236d8716 | 235 | notify = colorize.print_in_color_notifier(CLI_COLOR_MAP, notify) |
screamer | 22:9e85236d8716 | 236 | else: |
screamer | 22:9e85236d8716 | 237 | notify = None |
screamer | 0:66f3b5499f7f | 238 | |
The Other Jimmy |
32:8ea194f6145b | 239 | if not TOOLCHAIN_CLASSES[toolchain].check_executable(): |
The Other Jimmy |
32:8ea194f6145b | 240 | search_path = TOOLCHAIN_PATHS[toolchain] or "No path set" |
The Other Jimmy |
32:8ea194f6145b | 241 | args_error(parser, "Could not find executable for %s.\n" |
The Other Jimmy |
32:8ea194f6145b | 242 | "Currently set search path: %s" |
The Other Jimmy |
32:8ea194f6145b | 243 | %(toolchain,search_path)) |
The Other Jimmy |
32:8ea194f6145b | 244 | |
screamer | 0:66f3b5499f7f | 245 | # Test |
screamer | 0:66f3b5499f7f | 246 | for test_no in p: |
screamer | 0:66f3b5499f7f | 247 | test = Test(test_no) |
screamer | 0:66f3b5499f7f | 248 | if options.automated is not None: test.automated = options.automated |
screamer | 0:66f3b5499f7f | 249 | if options.dependencies is not None: test.dependencies = options.dependencies |
screamer | 0:66f3b5499f7f | 250 | if options.host_test is not None: test.host_test = options.host_test; |
screamer | 0:66f3b5499f7f | 251 | if options.peripherals is not None: test.peripherals = options.peripherals; |
screamer | 0:66f3b5499f7f | 252 | if options.duration is not None: test.duration = options.duration; |
screamer | 0:66f3b5499f7f | 253 | if options.extra is not None: test.extra_files = options.extra |
screamer | 0:66f3b5499f7f | 254 | |
screamer | 0:66f3b5499f7f | 255 | if not test.is_supported(mcu, toolchain): |
screamer | 0:66f3b5499f7f | 256 | print 'The selected test is not supported on target %s with toolchain %s' % (mcu, toolchain) |
screamer | 0:66f3b5499f7f | 257 | sys.exit() |
screamer | 0:66f3b5499f7f | 258 | |
screamer | 0:66f3b5499f7f | 259 | # Linking with extra libraries |
screamer | 0:66f3b5499f7f | 260 | if options.rtos: test.dependencies.append(RTOS_LIBRARIES) |
screamer | 0:66f3b5499f7f | 261 | if options.rpc: test.dependencies.append(RPC_LIBRARY) |
screamer | 0:66f3b5499f7f | 262 | if options.eth: test.dependencies.append(ETH_LIBRARY) |
screamer | 0:66f3b5499f7f | 263 | if options.usb_host: test.dependencies.append(USB_HOST_LIBRARIES) |
screamer | 0:66f3b5499f7f | 264 | if options.usb: test.dependencies.append(USB_LIBRARIES) |
screamer | 0:66f3b5499f7f | 265 | if options.dsp: test.dependencies.append(DSP_LIBRARIES) |
screamer | 0:66f3b5499f7f | 266 | if options.fat: test.dependencies.append(FS_LIBRARY) |
screamer | 0:66f3b5499f7f | 267 | if options.ublox: test.dependencies.append(UBLOX_LIBRARY) |
screamer | 0:66f3b5499f7f | 268 | if options.testlib: test.dependencies.append(TEST_MBED_LIB) |
screamer | 0:66f3b5499f7f | 269 | |
screamer | 0:66f3b5499f7f | 270 | build_dir = join(BUILD_DIR, "test", mcu, toolchain, test.id) |
screamer | 0:66f3b5499f7f | 271 | if options.source_dir is not None: |
screamer | 0:66f3b5499f7f | 272 | test.source_dir = options.source_dir |
screamer | 0:66f3b5499f7f | 273 | build_dir = options.source_dir |
screamer | 0:66f3b5499f7f | 274 | |
screamer | 0:66f3b5499f7f | 275 | if options.build_dir is not None: |
screamer | 0:66f3b5499f7f | 276 | build_dir = options.build_dir |
screamer | 0:66f3b5499f7f | 277 | |
screamer | 0:66f3b5499f7f | 278 | try: |
The Other Jimmy |
32:8ea194f6145b | 279 | bin_file = build_project(test.source_dir, build_dir, mcu, toolchain, |
The Other Jimmy |
32:8ea194f6145b | 280 | test.dependencies, |
screamer | 0:66f3b5499f7f | 281 | linker_script=options.linker_script, |
screamer | 0:66f3b5499f7f | 282 | clean=options.clean, |
screamer | 0:66f3b5499f7f | 283 | verbose=options.verbose, |
screamer | 22:9e85236d8716 | 284 | notify=notify, |
screamer | 0:66f3b5499f7f | 285 | silent=options.silent, |
screamer | 0:66f3b5499f7f | 286 | macros=options.macros, |
screamer | 0:66f3b5499f7f | 287 | jobs=options.jobs, |
The Other Jimmy |
32:8ea194f6145b | 288 | name=options.artifact_name, |
The Other Jimmy |
32:8ea194f6145b | 289 | app_config=options.app_config, |
The Other Jimmy |
32:8ea194f6145b | 290 | inc_dirs=[dirname(MBED_LIBRARIES)], |
The Other Jimmy |
32:8ea194f6145b | 291 | build_profile=extract_profile(parser, |
The Other Jimmy |
32:8ea194f6145b | 292 | options, |
The Other Jimmy |
32:8ea194f6145b | 293 | toolchain)) |
screamer | 0:66f3b5499f7f | 294 | print 'Image: %s'% bin_file |
screamer | 0:66f3b5499f7f | 295 | |
screamer | 0:66f3b5499f7f | 296 | if options.disk: |
screamer | 0:66f3b5499f7f | 297 | # Simple copy to the mbed disk |
screamer | 0:66f3b5499f7f | 298 | copy(bin_file, options.disk) |
screamer | 0:66f3b5499f7f | 299 | |
screamer | 0:66f3b5499f7f | 300 | if options.serial: |
screamer | 0:66f3b5499f7f | 301 | # Import pyserial: https://pypi.python.org/pypi/pyserial |
screamer | 0:66f3b5499f7f | 302 | from serial import Serial |
screamer | 0:66f3b5499f7f | 303 | |
screamer | 13:ab47a20b66f0 | 304 | sleep(TARGET_MAP[mcu].program_cycle_s) |
screamer | 0:66f3b5499f7f | 305 | |
screamer | 0:66f3b5499f7f | 306 | serial = Serial(options.serial, timeout = 1) |
screamer | 0:66f3b5499f7f | 307 | if options.baud: |
screamer | 0:66f3b5499f7f | 308 | serial.setBaudrate(options.baud) |
screamer | 0:66f3b5499f7f | 309 | |
screamer | 0:66f3b5499f7f | 310 | serial.flushInput() |
screamer | 0:66f3b5499f7f | 311 | serial.flushOutput() |
screamer | 0:66f3b5499f7f | 312 | |
screamer | 0:66f3b5499f7f | 313 | try: |
screamer | 0:66f3b5499f7f | 314 | serial.sendBreak() |
screamer | 0:66f3b5499f7f | 315 | except: |
screamer | 0:66f3b5499f7f | 316 | # In linux a termios.error is raised in sendBreak and in setBreak. |
screamer | 0:66f3b5499f7f | 317 | # The following setBreak() is needed to release the reset signal on the target mcu. |
screamer | 0:66f3b5499f7f | 318 | try: |
screamer | 0:66f3b5499f7f | 319 | serial.setBreak(False) |
screamer | 0:66f3b5499f7f | 320 | except: |
screamer | 0:66f3b5499f7f | 321 | pass |
screamer | 0:66f3b5499f7f | 322 | |
screamer | 0:66f3b5499f7f | 323 | while True: |
screamer | 0:66f3b5499f7f | 324 | c = serial.read(512) |
screamer | 0:66f3b5499f7f | 325 | sys.stdout.write(c) |
screamer | 0:66f3b5499f7f | 326 | sys.stdout.flush() |
screamer | 0:66f3b5499f7f | 327 | |
screamer | 0:66f3b5499f7f | 328 | except KeyboardInterrupt, e: |
screamer | 0:66f3b5499f7f | 329 | print "\n[CTRL+c] exit" |
The Other Jimmy |
32:8ea194f6145b | 330 | except NotSupportedException, e: |
The Other Jimmy |
32:8ea194f6145b | 331 | print "\nNot supported for selected target" |
screamer | 0:66f3b5499f7f | 332 | except Exception,e: |
screamer | 0:66f3b5499f7f | 333 | if options.verbose: |
screamer | 0:66f3b5499f7f | 334 | import traceback |
screamer | 0:66f3b5499f7f | 335 | traceback.print_exc(file=sys.stdout) |
screamer | 0:66f3b5499f7f | 336 | else: |
screamer | 0:66f3b5499f7f | 337 | print "[ERROR] %s" % str(e) |
screamer | 0:66f3b5499f7f | 338 | |
screamer | 0:66f3b5499f7f | 339 | sys.exit(1) |