16 'features': ['thumbv6m'],
17 'header': 'core_cm0.h',
19 '__CM0_REV': '0x0000U',
20 '__NVIC_PRIO_BITS': '2U',
21 '__Vendor_SysTickConfig': '0U'
28 'mcpu': 'cortex-m0plus',
31 'features': ['thumbv6m'],
32 'header': 'core_cm0plus.h',
34 '__CM0PLUS_REV': '0x0000U',
35 '__MPU_PRESENT': '1U',
36 '__VTOR_PRESENT': '1U',
37 '__NVIC_PRIO_BITS': '2U',
38 '__Vendor_SysTickConfig': '0U'
43 'triple': 'thumbv7-m',
48 'features': ['thumbv6m', 'thumbv7m', 'thumb-2', 'sat', 'ldrex', 'clz'],
49 'header': 'core_cm3.h',
51 '__CM3_REV': '0x0000U',
52 '__MPU_PRESENT': '1U',
53 '__VTOR_PRESENT': '1U',
54 '__NVIC_PRIO_BITS': '3U',
55 '__Vendor_SysTickConfig': '0U'
60 'triple': 'thumbv7-em',
65 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
66 'header': 'core_cm4.h',
68 '__CM4_REV': '0x0000U',
69 '__FPU_PRESENT': '0U',
70 '__MPU_PRESENT': '1U',
71 '__VTOR_PRESENT': '1U',
72 '__NVIC_PRIO_BITS': '3U',
73 '__Vendor_SysTickConfig': '0U'
78 'triple': 'thumbv7-em',
81 'mfpu': 'fpv4-sp-d16',
83 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
84 'header': 'core_cm4.h',
86 '__CM4_REV': '0x0000U',
87 '__FPU_PRESENT': '1U',
88 '__MPU_PRESENT': '1U',
89 '__VTOR_PRESENT': '1U',
90 '__NVIC_PRIO_BITS': '3U',
91 '__Vendor_SysTickConfig': '0U'
96 'triple': 'thumbv7-em',
101 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
102 'header': 'core_cm7.h',
104 '__CM7_REV': '0x0000U',
105 '__FPU_PRESENT': '0U',
106 '__MPU_PRESENT': '1U',
107 '__ICACHE_PRESENT': '1U',
108 '__DCACHE_PRESENT': '1U',
109 '__DTCM_PRESENT': '1U',
110 '__VTOR_PRESENT': '1U',
111 '__NVIC_PRIO_BITS': '3U',
112 '__Vendor_SysTickConfig': '0U'
117 'triple': 'thumbv7-em',
120 'mfpu': 'fpv4-sp-d16',
122 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
123 'header': 'core_cm7.h',
125 '__CM7_REV': '0x0000U',
126 '__FPU_PRESENT': '1U',
127 '__MPU_PRESENT': '1U',
128 '__ICACHE_PRESENT': '1U',
129 '__DCACHE_PRESENT': '1U',
130 '__DTCM_PRESENT': '1U',
131 '__VTOR_PRESENT': '1U',
132 '__NVIC_PRIO_BITS': '3U',
133 '__Vendor_SysTickConfig': '0U'
138 'triple': 'thumbv7-em',
143 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
144 'header': 'core_cm7.h',
146 '__CM7_REV': '0x0000U',
147 '__FPU_PRESENT': '1U',
148 '__MPU_PRESENT': '1U',
149 '__ICACHE_PRESENT': '1U',
150 '__DCACHE_PRESENT': '1U',
151 '__DTCM_PRESENT': '1U',
152 '__VTOR_PRESENT': '1U',
153 '__NVIC_PRIO_BITS': '3U',
154 '__Vendor_SysTickConfig': '0U'
158 'arch': 'thumbv8m.base',
159 'triple': 'thumbv8m',
161 'mcpu': 'cortex-m23',
164 'features': ['thumbv6m', 'thumbv7m', 'thumbv8m.base', 'ldrex'],
165 'header': 'core_cm23.h',
167 '__CM23_REV': '0x0000U',
168 '__FPU_PRESENT': '0U',
169 '__MPU_PRESENT': '1U',
170 '__SAUREGION_PRESENT': '8U',
171 '__VTOR_PRESENT': '1U',
172 '__NVIC_PRIO_BITS': '3U',
173 '__Vendor_SysTickConfig': '0U'
177 'arch': 'thumbv8m.base',
178 'triple': 'thumbv8m',
180 'mcpu': 'cortex-m23',
183 'features': ['thumbv6m', 'thumbv7m', 'thumbv8m.base', 'ldrex'],
184 'header': 'core_cm23.h',
186 '__CM23_REV': '0x0000U',
187 '__FPU_PRESENT': '0U',
188 '__MPU_PRESENT': '1U',
189 '__SAUREGION_PRESENT': '8U',
190 '__VTOR_PRESENT': '1U',
191 '__NVIC_PRIO_BITS': '3U',
192 '__Vendor_SysTickConfig': '0U'
196 'arch': 'thumbv8m.base',
197 'triple': 'thumbv8m',
199 'mcpu': 'cortex-m23',
202 'features': ['thumbv6m', 'thumbv7m', 'thumbv8m.base', 'ldrex'],
203 'header': 'core_cm23.h',
205 '__CM23_REV': '0x0000U',
206 '__FPU_PRESENT': '0U',
207 '__MPU_PRESENT': '1U',
208 '__SAUREGION_PRESENT': '8U',
209 '__VTOR_PRESENT': '1U',
210 '__NVIC_PRIO_BITS': '3U',
211 '__Vendor_SysTickConfig': '0U'
215 'arch': 'thumbv8m.main',
216 'triple': 'thumbv8m',
218 'mcpu': 'cortex-m33',
221 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
222 'header': 'core_cm33.h',
224 '__CM33_REV': '0x0000U',
225 '__FPU_PRESENT': '1U',
226 '__MPU_PRESENT': '1U',
227 '__SAUREGION_PRESENT': '8U',
228 '__VTOR_PRESENT': '1U',
229 '__NVIC_PRIO_BITS': '3U',
230 '__Vendor_SysTickConfig': '0U'
234 'arch': 'thumbv8m.main',
235 'triple': 'thumbv8m',
237 'mcpu': 'cortex-m33',
240 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
241 'header': 'core_cm33.h',
243 '__CM33_REV': '0x0000U',
244 '__FPU_PRESENT': '1U',
245 '__MPU_PRESENT': '1U',
246 '__SAUREGION_PRESENT': '8U',
247 '__VTOR_PRESENT': '1U',
248 '__NVIC_PRIO_BITS': '3U',
249 '__Vendor_SysTickConfig': '0U'
253 'arch': 'thumbv8m.main',
254 'triple': 'thumbv8m',
256 'mcpu': 'cortex-m33',
259 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
260 'header': 'core_cm33.h',
262 '__CM33_REV': '0x0000U',
263 '__FPU_PRESENT': '1U',
264 '__MPU_PRESENT': '1U',
265 '__SAUREGION_PRESENT': '8U',
266 '__VTOR_PRESENT': '1U',
267 '__NVIC_PRIO_BITS': '3U',
268 '__Vendor_SysTickConfig': '0U'
272 'arch': 'thumbv8m.main',
273 'triple': 'thumbv8m',
275 'mcpu': 'cortex-m35p',
278 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
279 'header': 'core_cm35p.h',
281 '__CM35P_REV': '0x0000U',
282 '__FPU_PRESENT': '1U',
283 '__MPU_PRESENT': '1U',
284 '__SAUREGION_PRESENT': '8U',
285 '__VTOR_PRESENT': '1U',
286 '__NVIC_PRIO_BITS': '3U',
287 '__Vendor_SysTickConfig': '0U'
291 'arch': 'thumbv8m.main',
292 'triple': 'thumbv8m',
294 'mcpu': 'cortex-m35p',
297 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
298 'header': 'core_cm35p.h',
300 '__CM35P_REV': '0x0000U',
301 '__FPU_PRESENT': '1U',
302 '__MPU_PRESENT': '1U',
303 '__SAUREGION_PRESENT': '8U',
304 '__VTOR_PRESENT': '1U',
305 '__NVIC_PRIO_BITS': '3U',
306 '__Vendor_SysTickConfig': '0U'
310 'arch': 'thumbv8m.main',
311 'triple': 'thumbv8m',
313 'mcpu': 'cortex-m35p',
316 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
317 'header': 'core_cm35p.h',
319 '__CM35P_REV': '0x0000U',
320 '__FPU_PRESENT': '1U',
321 '__MPU_PRESENT': '1U',
322 '__SAUREGION_PRESENT': '8U',
323 '__VTOR_PRESENT': '1U',
324 '__NVIC_PRIO_BITS': '3U',
325 '__Vendor_SysTickConfig': '0U'
329 'arch': 'thumbv8.1m.main',
330 'triple': 'thumbv8m',
332 'mcpu': 'cortex-m55',
335 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
336 'header': 'core_cm55.h',
338 '__CM55_REV': '0x0000U',
339 '__FPU_PRESENT': '1U',
341 '__MPU_PRESENT': '1U',
342 '__ICACHE_PRESENT': '1U',
343 '__DCACHE_PRESENT': '1U',
344 '__SAUREGION_PRESENT': '8U',
345 '__DSP_PRESENT': '1U',
346 '__VTOR_PRESENT': '1U',
347 '__PMU_PRESENT': '1U',
348 '__PMU_NUM_EVENTCNT': '8U',
349 '__DSP_PRESENT': '1U',
350 '__NVIC_PRIO_BITS': '3U',
351 '__Vendor_SysTickConfig': '0U'
355 'arch': 'thumbv8.1m.main',
356 'triple': 'thumbv8m',
358 'mcpu': 'cortex-m55',
361 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
362 'header': 'core_cm55.h',
364 '__CM55_REV': '0x0000U',
365 '__FPU_PRESENT': '1U',
367 '__MPU_PRESENT': '1U',
368 '__ICACHE_PRESENT': '1U',
369 '__DCACHE_PRESENT': '1U',
370 '__SAUREGION_PRESENT': '8U',
371 '__DSP_PRESENT': '1U',
372 '__VTOR_PRESENT': '1U',
373 '__PMU_PRESENT': '1U',
374 '__PMU_NUM_EVENTCNT': '8U',
375 '__DSP_PRESENT': '1U',
376 '__NVIC_PRIO_BITS': '3U',
377 '__Vendor_SysTickConfig': '0U'
381 'arch': 'thumbv8.1m.main',
382 'triple': 'thumbv8m',
384 'mcpu': 'cortex-m55',
387 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
388 'header': 'core_cm55.h',
390 '__CM55_REV': '0x0000U',
391 '__FPU_PRESENT': '1U',
393 '__MPU_PRESENT': '1U',
394 '__ICACHE_PRESENT': '1U',
395 '__DCACHE_PRESENT': '1U',
396 '__SAUREGION_PRESENT': '8U',
397 '__DSP_PRESENT': '1U',
398 '__VTOR_PRESENT': '1U',
399 '__PMU_PRESENT': '1U',
400 '__PMU_NUM_EVENTCNT': '8U',
401 '__DSP_PRESENT': '1U',
402 '__NVIC_PRIO_BITS': '3U',
403 '__Vendor_SysTickConfig': '0U'
407 'arch': 'thumbv8.1m.main',
408 'triple': 'thumbv8m',
410 'mcpu': 'cortex-m85',
413 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
414 'header': 'core_cm85.h',
416 '__CM85_REV': '0x0000U',
417 '__FPU_PRESENT': '1U',
419 '__MPU_PRESENT': '1U',
420 '__ICACHE_PRESENT': '1U',
421 '__DCACHE_PRESENT': '1U',
422 '__SAUREGION_PRESENT': '8U',
423 '__DSP_PRESENT': '1U',
424 '__VTOR_PRESENT': '1U',
425 '__PMU_PRESENT': '1U',
426 '__PMU_NUM_EVENTCNT': '8U',
427 '__DSP_PRESENT': '1U',
428 '__NVIC_PRIO_BITS': '3U',
429 '__Vendor_SysTickConfig': '0U'
433 'arch': 'thumbv8.1m.main',
434 'triple': 'thumbv8m',
436 'mcpu': 'cortex-m85',
439 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
440 'header': 'core_cm85.h',
442 '__CM85_REV': '0x0000U',
443 '__FPU_PRESENT': '1U',
445 '__MPU_PRESENT': '1U',
446 '__ICACHE_PRESENT': '1U',
447 '__DCACHE_PRESENT': '1U',
448 '__SAUREGION_PRESENT': '8U',
449 '__DSP_PRESENT': '1U',
450 '__VTOR_PRESENT': '1U',
451 '__PMU_PRESENT': '1U',
452 '__PMU_NUM_EVENTCNT': '8U',
453 '__DSP_PRESENT': '1U',
454 '__NVIC_PRIO_BITS': '3U',
455 '__Vendor_SysTickConfig': '0U'
459 'arch': 'thumbv8.1m.main',
460 'triple': 'thumbv8m',
462 'mcpu': 'cortex-m85',
465 'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
466 'header': 'core_cm85.h',
468 '__CM85_REV': '0x0000U',
469 '__FPU_PRESENT': '1U',
471 '__MPU_PRESENT': '1U',
472 '__ICACHE_PRESENT': '1U',
473 '__DCACHE_PRESENT': '1U',
474 '__SAUREGION_PRESENT': '8U',
475 '__DSP_PRESENT': '1U',
476 '__VTOR_PRESENT': '1U',
477 '__PMU_PRESENT': '1U',
478 '__PMU_NUM_EVENTCNT': '8U',
479 '__DSP_PRESENT': '1U',
480 '__NVIC_PRIO_BITS': '3U',
481 '__Vendor_SysTickConfig': '0U'
491 'features': ['armv7a', 'thumb-2', 'sat', 'clz'],
492 'header': 'core_ca.h',
495 '__CA_REV': '0x0000U',
496 '__FPU_PRESENT': '0U',
497 '__GIC_PRESENT': '1U',
498 '__TIM_PRESENT': '1U',
499 '__L2C_PRESENT': '1U',
500 'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
501 'GIC_INTERFACE_BASE': '0x2C000100UL',
502 'TIMER_BASE': '0x2C000600UL',
503 'L2C_310_BASE': '0x2C0F0000UL',
512 'mfpu': 'neon-vfpv4',
514 'features': ['armv7a', 'thumb-2', 'sat', 'dsp', 'clz'],
515 'header': 'core_ca.h',
518 '__CA_REV': '0x0000U',
519 '__FPU_PRESENT': '1U',
520 '__GIC_PRESENT': '1U',
521 '__TIM_PRESENT': '1U',
522 '__L2C_PRESENT': '1U',
523 'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
524 'GIC_INTERFACE_BASE': '0x2C000100UL',
525 'TIMER_BASE': '0x2C000600UL',
526 'L2C_310_BASE': '0x2C0F0000UL',
537 'features': ['armv7a', 'thumb-2', 'sat', 'clz'],
538 'header': 'core_ca.h',
541 '__CA_REV': '0x0000U',
542 '__FPU_PRESENT': '0U',
543 '__GIC_PRESENT': '1U',
544 '__TIM_PRESENT': '1U',
545 '__L2C_PRESENT': '1U',
546 'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
547 'GIC_INTERFACE_BASE': '0x2C000100UL',
548 'TIMER_BASE': '0x2C000600UL',
549 'L2C_310_BASE': '0x2C0F0000UL',
558 'mfpu': 'neon-vfpv4',
560 'features': ['armv7a', 'thumb-2', 'sat', 'dsp', 'clz'],
561 'header': 'core_ca.h',
564 '__CA_REV': '0x0000U',
565 '__FPU_PRESENT': '1U',
566 '__GIC_PRESENT': '1U',
567 '__TIM_PRESENT': '1U',
568 '__L2C_PRESENT': '1U',
569 'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
570 'GIC_INTERFACE_BASE': '0x2C000100UL',
571 'TIMER_BASE': '0x2C000600UL',
572 'L2C_310_BASE': '0x2C0F0000UL',
583 'features': ['armv7a', 'thumb-2', 'sat', 'clz'],
584 'header': 'core_ca.h',
587 '__CA_REV': '0x0000U',
588 '__FPU_PRESENT': '0U',
589 '__GIC_PRESENT': '1U',
590 '__TIM_PRESENT': '1U',
591 '__L2C_PRESENT': '1U',
592 'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
593 'GIC_INTERFACE_BASE': '0x2C000100UL',
594 'TIMER_BASE': '0x2C000600UL',
595 'L2C_310_BASE': '0x2C0F0000UL',
604 'mfpu': 'neon-vfpv3',
606 'features': ['armv7a', 'thumb-2', 'sat', 'dsp', 'ldrex', 'clz'],
607 'header': 'core_ca.h',
610 '__CA_REV': '0x0000U',
611 '__FPU_PRESENT': '1U',
612 '__GIC_PRESENT': '1U',
613 '__TIM_PRESENT': '1U',
614 '__L2C_PRESENT': '1U',
615 'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
616 'GIC_INTERFACE_BASE': '0x2C000100UL',
617 'TIMER_BASE': '0x2C000600UL',
618 'L2C_310_BASE': '0x2C0F0000UL',
624 # Configuration file for the 'lit' test runner.
626 # name: The name of this test suite.
627 config.name = "CMSIS-Core"
629 # testFormat: The test format to use to interpret tests.
631 # For now we require '&&' between commands, until they get globally killed and
632 # the test runner updated.
633 config.test_format = lit.formats.ShTest()
635 # suffixes: A list of file extensions to treat as test files.
640 # test_source_root: The root path where tests are located.
641 config.test_source_root = os.path.dirname(__file__)
644 # clang_path = get_toolchain_from_env('CLANG')
646 toolchain = lit_config.params.get("toolchain", "AC6")
647 device = lit_config.params.get("device", "ARMCM3")
648 optimize = lit_config.params.get("optimize", "none")
651 def __init__(self, toolchain, device, optimize):
652 self._toolchain = toolchain
654 self.optimize = optimize
656 def get_root_from_env(self):
657 keys = sorted((k for k in os.environ.keys() if k.startswith(f'{self._toolchain}_TOOLCHAIN_')), reverse=True)
659 print(f"Toolchain '{self._toolchain}' not registered!")
661 return os.environ.get(keys[0])
664 return self.get_root_from_env()
667 class Toolchain_AC6(Toolchain):
675 def __init__(self, **args):
676 super().__init__('AC6', **args)
679 return os.path.join(self.get_root(), 'armclang')
681 def get_ccflags(self):
683 '--target=arm-arm-none-eabi', f'-mcpu={DEVICES[self.device]["mcpu"]}', f'-mfpu={DEVICES[self.device]["mfpu"]}',
684 self.OPTIMIZE[self.optimize], '-I', os.path.abspath('../Include'), '-c', '-D', f'CORE_HEADER=\\"{DEVICES[device]["header"]}\\"']
685 if device.endswith('S') and not device.endswith('NS'):
686 ccflags += ["-mcmse"]
687 ccflags += list(sum([('-D', f'{define}={value}') for (define, value) in DEVICES[self.device]['defines'].items()], ()))
691 class Toolchain_GCC(Toolchain):
699 def __init__(self, **args):
700 super().__init__('GCC', **args)
703 return os.path.join(self.get_root(), 'arm-none-eabi-gcc')
705 def get_ccflags(self):
707 if DEVICES[self.device]["mfpu"] != 'none':
710 f'-mcpu={DEVICES[self.device]["mcpu"]}', f'-mfloat-abi={floatabi}',
711 self.OPTIMIZE[self.optimize], '-I', os.path.abspath('../Include'),
712 '-D', f'CORE_HEADER=\\"{DEVICES[device]["header"]}\\"', '-c']
713 if DEVICES[self.device]["mfpu"] != "none":
714 ccflags += [f'-mfpu={DEVICES[self.device]["mfpu"]}']
715 if device.endswith('S') and not device.endswith('NS'):
716 ccflags += ["-mcmse"]
717 ccflags += list(sum([('-D', f'{define}={value}') for (define, value) in DEVICES[self.device]['defines'].items()], ()))
720 class Toolchain_Clang(Toolchain):
722 'CM0': 'thumbv6m-none-unknown-eabi',
723 'CM0plus': 'thumbv6m-none-unknown-eabi',
724 'CM3': 'thumbv7m-none-unknown-eabi',
725 'CM4': 'thumbv7em-none-unknown-eabi',
726 'CM4FP': 'thumbv7em-none-unknown-eabihf',
727 'CM7': 'thumbv7em-none-unknown-eabi',
728 'CM7SP': 'thumbv7em-none-unknown-eabihf',
729 'CM7DP': 'thumbv7em-none-unknown-eabihf',
730 'CM23': 'thumbv8m.base-none-unknown-eabi',
731 'CM23S': 'thumbv8m.base-none-unknown-eabi',
732 'CM23NS': 'thumbv8m.base-none-unknown-eabi',
733 'CM33': 'thumbv8m.main-none-unknown-eabihf',
734 'CM33S': 'thumbv8m.main-none-unknown-eabihf',
735 'CM33NS': 'thumbv8m.main-none-unknown-eabihf',
736 'CM35P': 'thumbv8m.main-none-unknown-eabihf',
737 'CM35PS': 'thumbv8m.main-none-unknown-eabihf',
738 'CM35PNS': 'thumbv8m.main-none-unknown-eabihf',
739 'CM55': 'thumbv8.1m.main-none-unknown-eabihf',
740 'CM55S': 'thumbv8.1m.main-none-unknown-eabihf',
741 'CM55NS': 'thumbv8.1m.main-none-unknown-eabihf',
742 'CM85': 'thumbv8.1m.main-none-unknown-eabihf',
743 'CM85S': 'thumbv8.1m.main-none-unknown-eabihf',
744 'CM85NS': 'thumbv8.1m.main-none-unknown-eabihf',
745 'CA5': 'armv7-none-unknown-eabi',
746 'CA5neon': 'armv7-none-unknown-eabihf',
747 'CA7': 'armv7-none-unknown-eabi',
748 'CA7neon': 'armv7-none-unknown-eabihf',
749 'CA9': 'armv7-none-unknown-eabi',
750 'CA9neon': 'armv7-none-unknown-eabihf'
758 def __init__(self, **args):
759 super().__init__('CLANG', **args)
762 return os.path.join(self.get_root(), 'clang')
764 def get_ccflags(self):
766 f'--target={self.TARGET[self.device]}', self.OPTIMIZE[self.optimize],
767 f'-mcpu={DEVICES[self.device]["mcpu"]}', f'-mfpu={DEVICES[self.device]["mfpu"]}',
768 '-I', os.path.abspath('../Include'), '-c', '-D', f'CORE_HEADER=\\"{DEVICES[device]["header"]}\\"']
769 if device.endswith('S') and not device.endswith('NS'):
770 ccflags += ["-mcmse"]
771 ccflags += list(sum([('-D', f'{define}={value}') for (define, value) in DEVICES[self.device]['defines'].items()], ()))
776 if toolchain == 'AC6':
777 tc = Toolchain_AC6(device=device, optimize=optimize)
778 elif toolchain == 'GCC':
779 tc = Toolchain_GCC(device=device, optimize=optimize)
780 elif toolchain == 'Clang':
781 tc = Toolchain_Clang(device=device, optimize=optimize)
784 if device.endswith('NS'):
785 prefixes += ['CHECK-NS']
786 elif device.endswith('S'):
787 prefixes += ['CHECK-S']
788 if DEVICES[device]['arch'].startswith('thumb'):
789 prefixes += ['CHECK-THUMB']
790 elif DEVICES[device]['arch'].startswith('arm'):
791 prefixes += ['CHECK-ARM']
793 if DEVICES[device]["mfpu"] != 'none':
794 config.available_features.add('fpu')
795 for feature in DEVICES[device]['features']:
796 config.available_features.add(feature)
798 objdump = os.path.join(Toolchain("CLANG", "none", "none").get_root(), 'llvm-objdump')
799 config.substitutions.append(("llvm-objdump", objdump))
801 config.substitutions.append(("%ccout%", "-o"))
802 config.substitutions.append(("%cc%", tc.get_cc()))
803 config.substitutions.append(("%ccflags%", ' '.join(tc.get_ccflags())))
804 config.substitutions.append(("%prefixes%", ','.join(prefixes)))
805 config.substitutions.append(("%triple%", DEVICES[device]['triple']))
806 config.substitutions.append(("%mcpu%", DEVICES[device]['mcpu']))