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.
mbed-os/tools/test/toolchains/api_test.py@3:f3764f852aa8, 2018-10-11 (annotated)
- Committer:
- kadonotakashi
- Date:
- Thu Oct 11 02:27:46 2018 +0000
- Revision:
- 3:f3764f852aa8
- Parent:
- 0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| kadonotakashi | 0:8fdf9a60065b | 1 | """Tests for the toolchain sub-system""" |
| kadonotakashi | 0:8fdf9a60065b | 2 | import sys |
| kadonotakashi | 0:8fdf9a60065b | 3 | import os |
| kadonotakashi | 0:8fdf9a60065b | 4 | from string import printable |
| kadonotakashi | 0:8fdf9a60065b | 5 | from copy import deepcopy |
| kadonotakashi | 0:8fdf9a60065b | 6 | from mock import MagicMock, patch |
| kadonotakashi | 0:8fdf9a60065b | 7 | from hypothesis import given, settings |
| kadonotakashi | 0:8fdf9a60065b | 8 | from hypothesis.strategies import text, lists, fixed_dictionaries, booleans |
| kadonotakashi | 0:8fdf9a60065b | 9 | |
| kadonotakashi | 0:8fdf9a60065b | 10 | ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", |
| kadonotakashi | 0:8fdf9a60065b | 11 | "..")) |
| kadonotakashi | 0:8fdf9a60065b | 12 | sys.path.insert(0, ROOT) |
| kadonotakashi | 0:8fdf9a60065b | 13 | |
| kadonotakashi | 0:8fdf9a60065b | 14 | from tools.toolchains import ( |
| kadonotakashi | 0:8fdf9a60065b | 15 | TOOLCHAIN_CLASSES, |
| kadonotakashi | 0:8fdf9a60065b | 16 | TOOLCHAIN_PATHS, |
| kadonotakashi | 0:8fdf9a60065b | 17 | mbedToolchain, |
| kadonotakashi | 0:8fdf9a60065b | 18 | ) |
| kadonotakashi | 0:8fdf9a60065b | 19 | from tools.resources import LEGACY_TOOLCHAIN_NAMES, Resources, FileType |
| kadonotakashi | 0:8fdf9a60065b | 20 | from tools.targets import TARGET_MAP, set_targets_json_location |
| kadonotakashi | 0:8fdf9a60065b | 21 | from tools.notifier.mock import MockNotifier |
| kadonotakashi | 0:8fdf9a60065b | 22 | |
| kadonotakashi | 0:8fdf9a60065b | 23 | ALPHABET = [char for char in printable if char not in [u'.', u'/', u'\\']] |
| kadonotakashi | 0:8fdf9a60065b | 24 | |
| kadonotakashi | 0:8fdf9a60065b | 25 | |
| kadonotakashi | 0:8fdf9a60065b | 26 | @patch('tools.toolchains.arm.run_cmd') |
| kadonotakashi | 0:8fdf9a60065b | 27 | def test_arm_version_check(_run_cmd): |
| kadonotakashi | 0:8fdf9a60065b | 28 | set_targets_json_location() |
| kadonotakashi | 0:8fdf9a60065b | 29 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 30 | Product: ARM Compiler 5.06 |
| kadonotakashi | 0:8fdf9a60065b | 31 | Component: ARM Compiler 5.06 update 5 (build 528) |
| kadonotakashi | 0:8fdf9a60065b | 32 | Tool: armcc [4d3621] |
| kadonotakashi | 0:8fdf9a60065b | 33 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 34 | notifier = MockNotifier() |
| kadonotakashi | 0:8fdf9a60065b | 35 | toolchain = TOOLCHAIN_CLASSES["ARM"](TARGET_MAP["K64F"], notify=notifier) |
| kadonotakashi | 0:8fdf9a60065b | 36 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 37 | assert notifier.messages == [] |
| kadonotakashi | 0:8fdf9a60065b | 38 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 39 | Product: MDK Professional 5.22 |
| kadonotakashi | 0:8fdf9a60065b | 40 | Component: ARM Compiler 5.06 update 5 (build 528) |
| kadonotakashi | 0:8fdf9a60065b | 41 | Tool: armcc [4d3621] |
| kadonotakashi | 0:8fdf9a60065b | 42 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 43 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 44 | assert notifier.messages == [] |
| kadonotakashi | 0:8fdf9a60065b | 45 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 46 | Product: ARM Compiler |
| kadonotakashi | 0:8fdf9a60065b | 47 | Component: ARM Compiler |
| kadonotakashi | 0:8fdf9a60065b | 48 | Tool: armcc [4d3621] |
| kadonotakashi | 0:8fdf9a60065b | 49 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 50 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 51 | assert len(notifier.messages) == 1 |
| kadonotakashi | 0:8fdf9a60065b | 52 | |
| kadonotakashi | 0:8fdf9a60065b | 53 | |
| kadonotakashi | 0:8fdf9a60065b | 54 | @patch('tools.toolchains.iar.run_cmd') |
| kadonotakashi | 0:8fdf9a60065b | 55 | def test_iar_version_check(_run_cmd): |
| kadonotakashi | 0:8fdf9a60065b | 56 | set_targets_json_location() |
| kadonotakashi | 0:8fdf9a60065b | 57 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 58 | IAR ANSI C/C++ Compiler V7.80.1.28/LNX for ARM |
| kadonotakashi | 0:8fdf9a60065b | 59 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 60 | notifier = MockNotifier() |
| kadonotakashi | 0:8fdf9a60065b | 61 | toolchain = TOOLCHAIN_CLASSES["IAR"](TARGET_MAP["K64F"], notify=notifier) |
| kadonotakashi | 0:8fdf9a60065b | 62 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 63 | assert notifier.messages == [] |
| kadonotakashi | 0:8fdf9a60065b | 64 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 65 | IAR ANSI C/C++ Compiler V/LNX for ARM |
| kadonotakashi | 0:8fdf9a60065b | 66 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 67 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 68 | assert len(notifier.messages) == 1 |
| kadonotakashi | 0:8fdf9a60065b | 69 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 70 | IAR ANSI C/C++ Compiler V/8.80LNX for ARM |
| kadonotakashi | 0:8fdf9a60065b | 71 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 72 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 73 | assert len(notifier.messages) == 2 |
| kadonotakashi | 0:8fdf9a60065b | 74 | |
| kadonotakashi | 0:8fdf9a60065b | 75 | |
| kadonotakashi | 0:8fdf9a60065b | 76 | @patch('tools.toolchains.gcc.run_cmd') |
| kadonotakashi | 0:8fdf9a60065b | 77 | def test_gcc_version_check(_run_cmd): |
| kadonotakashi | 0:8fdf9a60065b | 78 | set_targets_json_location() |
| kadonotakashi | 0:8fdf9a60065b | 79 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 80 | arm-none-eabi-gcc (Arch Repository) 6.4.4 |
| kadonotakashi | 0:8fdf9a60065b | 81 | Copyright (C) 2018 Free Software Foundation, Inc. |
| kadonotakashi | 0:8fdf9a60065b | 82 | This is free software; see the source for copying conditions. There is NO |
| kadonotakashi | 0:8fdf9a60065b | 83 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| kadonotakashi | 0:8fdf9a60065b | 84 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 85 | notifier = MockNotifier() |
| kadonotakashi | 0:8fdf9a60065b | 86 | toolchain = TOOLCHAIN_CLASSES["GCC_ARM"]( |
| kadonotakashi | 0:8fdf9a60065b | 87 | TARGET_MAP["K64F"], notify=notifier) |
| kadonotakashi | 0:8fdf9a60065b | 88 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 89 | assert notifier.messages == [] |
| kadonotakashi | 0:8fdf9a60065b | 90 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 91 | arm-none-eabi-gcc (Arch Repository) 8.1.0 |
| kadonotakashi | 0:8fdf9a60065b | 92 | Copyright (C) 2018 Free Software Foundation, Inc. |
| kadonotakashi | 0:8fdf9a60065b | 93 | This is free software; see the source for copying conditions. There is NO |
| kadonotakashi | 0:8fdf9a60065b | 94 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| kadonotakashi | 0:8fdf9a60065b | 95 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 96 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 97 | assert len(notifier.messages) == 1 |
| kadonotakashi | 0:8fdf9a60065b | 98 | _run_cmd.return_value = (""" |
| kadonotakashi | 0:8fdf9a60065b | 99 | arm-none-eabi-gcc (Arch Repository) |
| kadonotakashi | 0:8fdf9a60065b | 100 | Copyright (C) 2018 Free Software Foundation, Inc. |
| kadonotakashi | 0:8fdf9a60065b | 101 | This is free software; see the source for copying conditions. There is NO |
| kadonotakashi | 0:8fdf9a60065b | 102 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| kadonotakashi | 0:8fdf9a60065b | 103 | """, "", 0) |
| kadonotakashi | 0:8fdf9a60065b | 104 | toolchain.version_check() |
| kadonotakashi | 0:8fdf9a60065b | 105 | assert len(notifier.messages) == 2 |
| kadonotakashi | 0:8fdf9a60065b | 106 | |
| kadonotakashi | 0:8fdf9a60065b | 107 | |
| kadonotakashi | 0:8fdf9a60065b | 108 | @given(fixed_dictionaries({ |
| kadonotakashi | 0:8fdf9a60065b | 109 | 'common': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 110 | 'c': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 111 | 'cxx': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 112 | 'asm': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 113 | 'ld': lists(text())}), |
| kadonotakashi | 0:8fdf9a60065b | 114 | lists(text(min_size=1, alphabet=ALPHABET), min_size=1)) |
| kadonotakashi | 0:8fdf9a60065b | 115 | def test_toolchain_profile_c(profile, source_file): |
| kadonotakashi | 0:8fdf9a60065b | 116 | """Test that the appropriate profile parameters are passed to the |
| kadonotakashi | 0:8fdf9a60065b | 117 | C compiler""" |
| kadonotakashi | 0:8fdf9a60065b | 118 | filename = deepcopy(source_file) |
| kadonotakashi | 0:8fdf9a60065b | 119 | filename[-1] += ".c" |
| kadonotakashi | 0:8fdf9a60065b | 120 | to_compile = os.path.join(*filename) |
| kadonotakashi | 0:8fdf9a60065b | 121 | set_targets_json_location() |
| kadonotakashi | 0:8fdf9a60065b | 122 | with patch('os.mkdir') as _mkdir: |
| kadonotakashi | 0:8fdf9a60065b | 123 | for _, tc_class in TOOLCHAIN_CLASSES.items(): |
| kadonotakashi | 0:8fdf9a60065b | 124 | toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile, |
| kadonotakashi | 0:8fdf9a60065b | 125 | notify=MockNotifier()) |
| kadonotakashi | 0:8fdf9a60065b | 126 | toolchain.inc_md5 = "" |
| kadonotakashi | 0:8fdf9a60065b | 127 | toolchain.build_dir = "" |
| kadonotakashi | 0:8fdf9a60065b | 128 | toolchain.config = MagicMock(app_config_location=None) |
| kadonotakashi | 0:8fdf9a60065b | 129 | for parameter in profile['c'] + profile['common']: |
| kadonotakashi | 0:8fdf9a60065b | 130 | assert any(parameter in cmd for cmd in toolchain.cc), \ |
| kadonotakashi | 0:8fdf9a60065b | 131 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 132 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 133 | compile_command = toolchain.compile_command(to_compile, |
| kadonotakashi | 0:8fdf9a60065b | 134 | to_compile + ".o", []) |
| kadonotakashi | 0:8fdf9a60065b | 135 | for parameter in profile['c'] + profile['common']: |
| kadonotakashi | 0:8fdf9a60065b | 136 | assert any(parameter in cmd for cmd in compile_command), \ |
| kadonotakashi | 0:8fdf9a60065b | 137 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 138 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 139 | |
| kadonotakashi | 0:8fdf9a60065b | 140 | @given(fixed_dictionaries({ |
| kadonotakashi | 0:8fdf9a60065b | 141 | 'common': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 142 | 'c': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 143 | 'cxx': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 144 | 'asm': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 145 | 'ld': lists(text())}), |
| kadonotakashi | 0:8fdf9a60065b | 146 | lists(text(min_size=1, alphabet=ALPHABET), min_size=1)) |
| kadonotakashi | 0:8fdf9a60065b | 147 | def test_toolchain_profile_cpp(profile, source_file): |
| kadonotakashi | 0:8fdf9a60065b | 148 | """Test that the appropriate profile parameters are passed to the |
| kadonotakashi | 0:8fdf9a60065b | 149 | C++ compiler""" |
| kadonotakashi | 0:8fdf9a60065b | 150 | filename = deepcopy(source_file) |
| kadonotakashi | 0:8fdf9a60065b | 151 | filename[-1] += ".cpp" |
| kadonotakashi | 0:8fdf9a60065b | 152 | to_compile = os.path.join(*filename) |
| kadonotakashi | 0:8fdf9a60065b | 153 | with patch('os.mkdir') as _mkdir: |
| kadonotakashi | 0:8fdf9a60065b | 154 | for _, tc_class in TOOLCHAIN_CLASSES.items(): |
| kadonotakashi | 0:8fdf9a60065b | 155 | toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile, |
| kadonotakashi | 0:8fdf9a60065b | 156 | notify=MockNotifier()) |
| kadonotakashi | 0:8fdf9a60065b | 157 | toolchain.inc_md5 = "" |
| kadonotakashi | 0:8fdf9a60065b | 158 | toolchain.build_dir = "" |
| kadonotakashi | 0:8fdf9a60065b | 159 | toolchain.config = MagicMock(app_config_location=None) |
| kadonotakashi | 0:8fdf9a60065b | 160 | for parameter in profile['cxx'] + profile['common']: |
| kadonotakashi | 0:8fdf9a60065b | 161 | assert any(parameter in cmd for cmd in toolchain.cppc), \ |
| kadonotakashi | 0:8fdf9a60065b | 162 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 163 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 164 | compile_command = toolchain.compile_command(to_compile, |
| kadonotakashi | 0:8fdf9a60065b | 165 | to_compile + ".o", []) |
| kadonotakashi | 0:8fdf9a60065b | 166 | for parameter in profile['cxx'] + profile['common']: |
| kadonotakashi | 0:8fdf9a60065b | 167 | assert any(parameter in cmd for cmd in compile_command), \ |
| kadonotakashi | 0:8fdf9a60065b | 168 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 169 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 170 | |
| kadonotakashi | 0:8fdf9a60065b | 171 | @given(fixed_dictionaries({ |
| kadonotakashi | 0:8fdf9a60065b | 172 | 'common': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 173 | 'c': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 174 | 'cxx': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 175 | 'asm': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 176 | 'ld': lists(text())}), |
| kadonotakashi | 0:8fdf9a60065b | 177 | lists(text(min_size=1, alphabet=ALPHABET), min_size=1)) |
| kadonotakashi | 0:8fdf9a60065b | 178 | def test_toolchain_profile_asm(profile, source_file): |
| kadonotakashi | 0:8fdf9a60065b | 179 | """Test that the appropriate profile parameters are passed to the |
| kadonotakashi | 0:8fdf9a60065b | 180 | Assembler""" |
| kadonotakashi | 0:8fdf9a60065b | 181 | filename = deepcopy(source_file) |
| kadonotakashi | 0:8fdf9a60065b | 182 | filename[-1] += ".s" |
| kadonotakashi | 0:8fdf9a60065b | 183 | to_compile = os.path.join(*filename) |
| kadonotakashi | 0:8fdf9a60065b | 184 | with patch('os.mkdir') as _mkdir: |
| kadonotakashi | 0:8fdf9a60065b | 185 | for _, tc_class in TOOLCHAIN_CLASSES.items(): |
| kadonotakashi | 0:8fdf9a60065b | 186 | toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile, |
| kadonotakashi | 0:8fdf9a60065b | 187 | notify=MockNotifier()) |
| kadonotakashi | 0:8fdf9a60065b | 188 | toolchain.inc_md5 = "" |
| kadonotakashi | 0:8fdf9a60065b | 189 | toolchain.build_dir = "" |
| kadonotakashi | 0:8fdf9a60065b | 190 | toolchain.config = MagicMock() |
| kadonotakashi | 0:8fdf9a60065b | 191 | toolchain.config.get_config_data_macros.return_value = [] |
| kadonotakashi | 0:8fdf9a60065b | 192 | for parameter in profile['asm']: |
| kadonotakashi | 0:8fdf9a60065b | 193 | assert any(parameter in cmd for cmd in toolchain.asm), \ |
| kadonotakashi | 0:8fdf9a60065b | 194 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 195 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 196 | compile_command = toolchain.compile_command(to_compile, |
| kadonotakashi | 0:8fdf9a60065b | 197 | to_compile + ".o", []) |
| kadonotakashi | 0:8fdf9a60065b | 198 | if not compile_command: |
| kadonotakashi | 0:8fdf9a60065b | 199 | assert compile_command, to_compile |
| kadonotakashi | 0:8fdf9a60065b | 200 | for parameter in profile['asm']: |
| kadonotakashi | 0:8fdf9a60065b | 201 | assert any(parameter in cmd for cmd in compile_command), \ |
| kadonotakashi | 0:8fdf9a60065b | 202 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 203 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 204 | |
| kadonotakashi | 0:8fdf9a60065b | 205 | for name, Class in TOOLCHAIN_CLASSES.items(): |
| kadonotakashi | 0:8fdf9a60065b | 206 | CLS = Class(TARGET_MAP["K64F"], notify=MockNotifier()) |
| kadonotakashi | 0:8fdf9a60065b | 207 | assert name == CLS.name or name == LEGACY_TOOLCHAIN_NAMES[CLS.name] |
| kadonotakashi | 0:8fdf9a60065b | 208 | |
| kadonotakashi | 0:8fdf9a60065b | 209 | @given(fixed_dictionaries({ |
| kadonotakashi | 0:8fdf9a60065b | 210 | 'common': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 211 | 'c': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 212 | 'cxx': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 213 | 'asm': lists(text()), |
| kadonotakashi | 0:8fdf9a60065b | 214 | 'ld': lists(text(min_size=1))}), |
| kadonotakashi | 0:8fdf9a60065b | 215 | lists(text(min_size=1, alphabet=ALPHABET), min_size=1)) |
| kadonotakashi | 0:8fdf9a60065b | 216 | def test_toolchain_profile_ld(profile, source_file): |
| kadonotakashi | 0:8fdf9a60065b | 217 | """Test that the appropriate profile parameters are passed to the |
| kadonotakashi | 0:8fdf9a60065b | 218 | Linker""" |
| kadonotakashi | 0:8fdf9a60065b | 219 | filename = deepcopy(source_file) |
| kadonotakashi | 0:8fdf9a60065b | 220 | filename[-1] += ".o" |
| kadonotakashi | 0:8fdf9a60065b | 221 | to_compile = os.path.join(*filename) |
| kadonotakashi | 0:8fdf9a60065b | 222 | with patch('os.mkdir') as _mkdir,\ |
| kadonotakashi | 0:8fdf9a60065b | 223 | patch('tools.toolchains.mbedToolchain.default_cmd') as _dflt_cmd: |
| kadonotakashi | 0:8fdf9a60065b | 224 | for _, tc_class in TOOLCHAIN_CLASSES.items(): |
| kadonotakashi | 0:8fdf9a60065b | 225 | toolchain = tc_class(TARGET_MAP["K64F"], build_profile=profile, |
| kadonotakashi | 0:8fdf9a60065b | 226 | notify=MockNotifier()) |
| kadonotakashi | 0:8fdf9a60065b | 227 | toolchain.RESPONSE_FILES = False |
| kadonotakashi | 0:8fdf9a60065b | 228 | toolchain.inc_md5 = "" |
| kadonotakashi | 0:8fdf9a60065b | 229 | toolchain.build_dir = "" |
| kadonotakashi | 0:8fdf9a60065b | 230 | for parameter in profile['ld']: |
| kadonotakashi | 0:8fdf9a60065b | 231 | assert any(parameter in cmd for cmd in toolchain.ld), \ |
| kadonotakashi | 0:8fdf9a60065b | 232 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 233 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 234 | toolchain.link(to_compile + ".elf", [to_compile], [], [], None) |
| kadonotakashi | 0:8fdf9a60065b | 235 | compile_cmd = _dflt_cmd.call_args_list |
| kadonotakashi | 0:8fdf9a60065b | 236 | if not compile_cmd: |
| kadonotakashi | 0:8fdf9a60065b | 237 | assert compile_cmd, to_compile |
| kadonotakashi | 0:8fdf9a60065b | 238 | for parameter in profile['ld']: |
| kadonotakashi | 0:8fdf9a60065b | 239 | assert any(parameter in cmd[0][0] for cmd in compile_cmd), \ |
| kadonotakashi | 0:8fdf9a60065b | 240 | "Toolchain %s did not propagate arg %s" % (toolchain.name, |
| kadonotakashi | 0:8fdf9a60065b | 241 | parameter) |
| kadonotakashi | 0:8fdf9a60065b | 242 | |
| kadonotakashi | 0:8fdf9a60065b | 243 | for name, Class in TOOLCHAIN_CLASSES.items(): |
| kadonotakashi | 0:8fdf9a60065b | 244 | CLS = Class(TARGET_MAP["K64F"], notify=MockNotifier()) |
| kadonotakashi | 0:8fdf9a60065b | 245 | assert name == CLS.name or name == LEGACY_TOOLCHAIN_NAMES[CLS.name] |
| kadonotakashi | 0:8fdf9a60065b | 246 | |
| kadonotakashi | 0:8fdf9a60065b | 247 | |
| kadonotakashi | 0:8fdf9a60065b | 248 | @given(lists(text(alphabet=ALPHABET, min_size=1), min_size=1)) |
| kadonotakashi | 0:8fdf9a60065b | 249 | def test_detect_duplicates(filenames): |
| kadonotakashi | 0:8fdf9a60065b | 250 | c_sources = [os.path.join(name, "dupe.c") for name in filenames] |
| kadonotakashi | 0:8fdf9a60065b | 251 | s_sources = [os.path.join(name, "dupe.s") for name in filenames] |
| kadonotakashi | 0:8fdf9a60065b | 252 | cpp_sources = [os.path.join(name, "dupe.cpp") for name in filenames] |
| kadonotakashi | 0:8fdf9a60065b | 253 | notify = MockNotifier() |
| kadonotakashi | 0:8fdf9a60065b | 254 | res = Resources(notify) |
| kadonotakashi | 0:8fdf9a60065b | 255 | res.add_files_to_type(FileType.C_SRC, c_sources) |
| kadonotakashi | 0:8fdf9a60065b | 256 | res.add_files_to_type(FileType.ASM_SRC, s_sources) |
| kadonotakashi | 0:8fdf9a60065b | 257 | res.add_files_to_type(FileType.CPP_SRC, cpp_sources) |
| kadonotakashi | 0:8fdf9a60065b | 258 | assert res.detect_duplicates() == 1,\ |
| kadonotakashi | 0:8fdf9a60065b | 259 | "Not Enough duplicates found" |
| kadonotakashi | 0:8fdf9a60065b | 260 | |
| kadonotakashi | 0:8fdf9a60065b | 261 | notification = notify.messages[0] |
| kadonotakashi | 0:8fdf9a60065b | 262 | assert "dupe.o" in notification["message"] |
| kadonotakashi | 0:8fdf9a60065b | 263 | assert "dupe.s" in notification["message"] |
| kadonotakashi | 0:8fdf9a60065b | 264 | assert "dupe.c" in notification["message"] |
| kadonotakashi | 0:8fdf9a60065b | 265 | assert "dupe.cpp" in notification["message"] |
| kadonotakashi | 0:8fdf9a60065b | 266 | |
| kadonotakashi | 0:8fdf9a60065b | 267 | @given(text(alphabet=ALPHABET + [os.sep], min_size=1)) |
| kadonotakashi | 0:8fdf9a60065b | 268 | @given(booleans()) |
| kadonotakashi | 0:8fdf9a60065b | 269 | @given(booleans()) |
| kadonotakashi | 0:8fdf9a60065b | 270 | @settings(max_examples=20) |
| kadonotakashi | 0:8fdf9a60065b | 271 | def test_path_specified_gcc(gcc_loc, exists_at_loc, exists_in_path): |
| kadonotakashi | 0:8fdf9a60065b | 272 | with patch('tools.toolchains.gcc.exists') as _exists: |
| kadonotakashi | 0:8fdf9a60065b | 273 | with patch('tools.toolchains.gcc.find_executable') as _find: |
| kadonotakashi | 0:8fdf9a60065b | 274 | _exists.return_value = exists_at_loc |
| kadonotakashi | 0:8fdf9a60065b | 275 | _find.return_value = exists_in_path |
| kadonotakashi | 0:8fdf9a60065b | 276 | TOOLCHAIN_PATHS['GCC_ARM'] = gcc_loc |
| kadonotakashi | 0:8fdf9a60065b | 277 | toolchain_class = TOOLCHAIN_CLASSES["GCC_ARM"] |
| kadonotakashi | 0:8fdf9a60065b | 278 | found_p = toolchain_class.check_executable() |
| kadonotakashi | 0:8fdf9a60065b | 279 | assert found_p == (exists_at_loc or exists_in_path) |
| kadonotakashi | 0:8fdf9a60065b | 280 | if exists_at_loc: |
| kadonotakashi | 0:8fdf9a60065b | 281 | assert TOOLCHAIN_PATHS['GCC_ARM'] == gcc_loc |
| kadonotakashi | 0:8fdf9a60065b | 282 | elif exists_in_path: |
| kadonotakashi | 0:8fdf9a60065b | 283 | assert TOOLCHAIN_PATHS['GCC_ARM'] == '' |