]> begriffs open source - cmsis/blob - CMSIS/Core/Test/lit.cfg.py
Possible bugs in MMU_MemorySection(), MMU_MemoryPage() (#219)
[cmsis] / CMSIS / Core / Test / lit.cfg.py
1 # -*- Python -*-
2
3 import os
4
5 import lit.formats
6 import lit.util
7
8 DEVICES = {
9     'CM0': {
10         'arch': 'thumbv6m',
11         'triple': 'thumbv6m',
12         'abi': 'eabi',
13         'mcpu': 'cortex-m0',
14         'mfpu': 'none',
15         'mpu': False,
16         'features': ['thumbv6m'],
17         'header': 'core_cm0.h',
18         'defines': {
19             '__CM0_REV': '0x0000U',
20             '__NVIC_PRIO_BITS': '2U',
21             '__Vendor_SysTickConfig': '0U'
22         }
23     },
24     'CM0plus': {
25         'arch': 'thumbv6m',
26         'triple': 'thumbv6m',
27         'abi': 'eabi',
28         'mcpu': 'cortex-m0plus',
29         'mfpu': 'none',
30         'mpu': True,
31         'features': ['thumbv6m'],
32         'header': 'core_cm0plus.h',
33         'defines': {
34             '__CM0PLUS_REV': '0x0000U',
35             '__MPU_PRESENT': '1U',
36             '__VTOR_PRESENT': '1U',
37             '__NVIC_PRIO_BITS': '2U',
38             '__Vendor_SysTickConfig': '0U'
39         }
40     },
41     'CM3': {
42         'arch': 'thumbv7m',
43         'triple': 'thumbv7-m',
44         'abi': 'eabi',
45         'mcpu': 'cortex-m3',
46         'mfpu': 'none',
47         'mpu': True,
48         'features': ['thumbv6m', 'thumbv7m', 'thumb-2', 'sat', 'ldrex', 'clz'],
49         'header': 'core_cm3.h',
50         'defines': {
51             '__CM3_REV': '0x0000U',
52             '__MPU_PRESENT': '1U',
53             '__VTOR_PRESENT': '1U',
54             '__NVIC_PRIO_BITS': '3U',
55             '__Vendor_SysTickConfig': '0U'
56         }
57     },
58     'CM4': {
59         'arch': 'thumbv7em',
60         'triple': 'thumbv7-em',
61         'abi': 'eabi',
62         'mcpu': 'cortex-m4',
63         'mfpu': 'none',
64         'mpu': True,
65         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
66         'header': 'core_cm4.h',
67         'defines': {
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'
74         }
75     },
76     'CM4FP': {
77         'arch': 'thumbv7em',
78         'triple': 'thumbv7-em',
79         'abi': 'eabihf',
80         'mcpu': 'cortex-m4',
81         'mfpu': 'fpv4-sp-d16',
82         'mpu': True,
83         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
84         'header': 'core_cm4.h',
85         'defines': {
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'
92         }
93     },
94     'CM7': {
95         'arch': 'thumbv7em',
96         'triple': 'thumbv7-em',
97         'abi': 'eabi',
98         'mcpu': 'cortex-m7',
99         'mfpu': 'none',
100         'mpu': True,
101         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
102         'header': 'core_cm7.h',
103         'defines': {
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'
113         }
114     },
115     'CM7SP': {
116         'arch': 'thumbv7em',
117         'triple': 'thumbv7-em',
118         'abi': 'eabi',
119         'mcpu': 'cortex-m7',
120         'mfpu': 'fpv4-sp-d16',
121         'mpu': True,
122         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
123         'header': 'core_cm7.h',
124         'defines': {
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'
134         }
135     },
136     'CM7DP': {
137         'arch': 'thumbv7em',
138         'triple': 'thumbv7-em',
139         'abi': 'eabihf',
140         'mcpu': 'cortex-m7',
141         'mfpu': 'fpv5-d16',
142         'mpu': True,
143         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumb-2', 'sat', 'ldrex', 'clz'],
144         'header': 'core_cm7.h',
145         'defines': {
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'
155         }
156     },
157     'CM23': {
158         'arch': 'thumbv8m.base',
159         'triple': 'thumbv8m',
160         'abi': 'eabi',
161         'mcpu': 'cortex-m23',
162         'mfpu': 'none',
163         'mpu': True,
164         'features': ['thumbv6m', 'thumbv7m', 'thumbv8m.base', 'ldrex'],
165         'header': 'core_cm23.h',
166         'defines': {
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'
174         }
175     },
176     'CM23S': {
177         'arch': 'thumbv8m.base',
178         'triple': 'thumbv8m',
179         'abi': 'eabi',
180         'mcpu': 'cortex-m23',
181         'mfpu': 'none',
182         'mpu': True,
183         'features': ['thumbv6m', 'thumbv7m', 'thumbv8m.base', 'ldrex'],
184         'header': 'core_cm23.h',
185         'defines': {
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'
193         }
194     },
195     'CM23NS': {
196         'arch': 'thumbv8m.base',
197         'triple': 'thumbv8m',
198         'abi': 'eabi',
199         'mcpu': 'cortex-m23',
200         'mfpu': 'none',
201         'mpu': True,
202         'features': ['thumbv6m', 'thumbv7m', 'thumbv8m.base', 'ldrex'],
203         'header': 'core_cm23.h',
204         'defines': {
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'
212         }
213     },
214     'CM33': {
215         'arch': 'thumbv8m.main',
216         'triple': 'thumbv8m',
217         'abi': 'eabihf',
218         'mcpu': 'cortex-m33',
219         'mfpu': 'fpv5-d16',
220         'mpu': True,
221         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
222         'header': 'core_cm33.h',
223         'defines': {
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'
231         }
232     },
233     'CM33S': {
234         'arch': 'thumbv8m.main',
235         'triple': 'thumbv8m',
236         'abi': 'eabihf',
237         'mcpu': 'cortex-m33',
238         'mfpu': 'fpv5-d16',
239         'mpu': True,
240         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
241         'header': 'core_cm33.h',
242         'defines': {
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'
250         }
251     },
252     'CM33NS': {
253         'arch': 'thumbv8m.main',
254         'triple': 'thumbv8m',
255         'abi': 'eabihf',
256         'mcpu': 'cortex-m33',
257         'mfpu': 'fpv5-d16',
258         'mpu': True,
259         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
260         'header': 'core_cm33.h',
261         'defines': {
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'
269         }
270     },
271     'CM35P': {
272         'arch': 'thumbv8m.main',
273         'triple': 'thumbv8m',
274         'abi': 'eabihf',
275         'mcpu': 'cortex-m35p',
276         'mfpu': 'fpv5-d16',
277         'mpu': True,
278         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
279         'header': 'core_cm35p.h',
280         'defines': {
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'
288         }
289     },
290     'CM35PS': {
291         'arch': 'thumbv8m.main',
292         'triple': 'thumbv8m',
293         'abi': 'eabihf',
294         'mcpu': 'cortex-m35p',
295         'mfpu': 'fpv5-d16',
296         'mpu': True,
297         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
298         'header': 'core_cm35p.h',
299         'defines': {
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'
307         }
308     },
309     'CM35PNS': {
310         'arch': 'thumbv8m.main',
311         'triple': 'thumbv8m',
312         'abi': 'eabihf',
313         'mcpu': 'cortex-m35p',
314         'mfpu': 'fpv5-d16',
315         'mpu': True,
316         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
317         'header': 'core_cm35p.h',
318         'defines': {
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'
326         }
327     },
328     'CM52': {
329         'arch': 'thumbv8.1m.main',
330         'triple': 'thumbv8m',
331         'abi': 'eabihf',
332         'mcpu': 'cortex-m52',
333         'mfpu': 'fpv5-d16',
334         'mpu': True,
335         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
336         'header': 'core_cm52.h',
337         'defines': {
338             '__CM52_REV': '0x0000U',
339             '__FPU_PRESENT': '1U',
340             '__FPU_DP': '1U',
341             '__MPU_PRESENT': '1U',
342             '__ICACHE_PRESENT': '1U',
343             '__DCACHE_PRESENT': '1U',
344             '__UCACHE_PRESENT': '1U',
345             '__SAUREGION_PRESENT': '8U',
346             '__DSP_PRESENT': '1U',
347             '__VTOR_PRESENT': '1U',
348             '__PMU_PRESENT': '1U',
349             '__PMU_NUM_EVENTCNT': '8U',
350             '__NVIC_PRIO_BITS': '3U',
351             '__Vendor_SysTickConfig': '0U'
352         }
353     },
354     'CM52S': {
355         'arch': 'thumbv8.1m.main',
356         'triple': 'thumbv8m',
357         'abi': 'eabihf',
358         'mcpu': 'cortex-m52',
359         'mfpu': 'fpv5-d16',
360         'mpu': True,
361         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
362         'header': 'core_cm52.h',
363         'defines': {
364             '__CM52_REV': '0x0000U',
365             '__FPU_PRESENT': '1U',
366             '__FPU_DP': '1U',
367             '__MPU_PRESENT': '1U',
368             '__ICACHE_PRESENT': '1U',
369             '__DCACHE_PRESENT': '1U',
370             '__UCACHE_PRESENT': '1U',
371             '__SAUREGION_PRESENT': '8U',
372             '__DSP_PRESENT': '1U',
373             '__VTOR_PRESENT': '1U',
374             '__PMU_PRESENT': '1U',
375             '__PMU_NUM_EVENTCNT': '8U',
376             '__NVIC_PRIO_BITS': '3U',
377             '__Vendor_SysTickConfig': '0U'
378         }
379     },
380     'CM52NS': {
381         'arch': 'thumbv8.1m.main',
382         'triple': 'thumbv8m',
383         'abi': 'eabihf',
384         'mcpu': 'cortex-m52',
385         'mfpu': 'fpv5-d16',
386         'mpu': True,
387         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
388         'header': 'core_cm52.h',
389         'defines': {
390             '__CM52_REV': '0x0000U',
391             '__FPU_PRESENT': '1U',
392             '__FPU_DP': '1U',
393             '__MPU_PRESENT': '1U',
394             '__ICACHE_PRESENT': '1U',
395             '__DCACHE_PRESENT': '1U',
396             '__UCACHE_PRESENT': '1U',
397             '__SAUREGION_PRESENT': '8U',
398             '__DSP_PRESENT': '1U',
399             '__VTOR_PRESENT': '1U',
400             '__PMU_PRESENT': '1U',
401             '__PMU_NUM_EVENTCNT': '8U',
402             '__NVIC_PRIO_BITS': '3U',
403             '__Vendor_SysTickConfig': '0U'
404         }
405     },    
406     'CM55': {
407         'arch': 'thumbv8.1m.main',
408         'triple': 'thumbv8m',
409         'abi': 'eabihf',
410         'mcpu': 'cortex-m55',
411         'mfpu': 'fpv5-d16',
412         'mpu': True,
413         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
414         'header': 'core_cm55.h',
415         'defines': {
416             '__CM55_REV': '0x0000U',
417             '__FPU_PRESENT': '1U',
418             '__FPU_DP': '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             '__NVIC_PRIO_BITS': '3U',
428             '__Vendor_SysTickConfig': '0U'
429         }
430     },
431     'CM55S': {
432         'arch': 'thumbv8.1m.main',
433         'triple': 'thumbv8m',
434         'abi': 'eabihf',
435         'mcpu': 'cortex-m55',
436         'mfpu': 'fpv5-d16',
437         'mpu': True,
438         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
439         'header': 'core_cm55.h',
440         'defines': {
441             '__CM55_REV': '0x0000U',
442             '__FPU_PRESENT': '1U',
443             '__FPU_DP': '1U',
444             '__MPU_PRESENT': '1U',
445             '__ICACHE_PRESENT': '1U',
446             '__DCACHE_PRESENT': '1U',
447             '__SAUREGION_PRESENT': '8U',
448             '__DSP_PRESENT': '1U',
449             '__VTOR_PRESENT': '1U',
450             '__PMU_PRESENT': '1U',
451             '__PMU_NUM_EVENTCNT': '8U',
452             '__NVIC_PRIO_BITS': '3U',
453             '__Vendor_SysTickConfig': '0U'
454         }
455     },
456     'CM55NS': {
457         'arch': 'thumbv8.1m.main',
458         'triple': 'thumbv8m',
459         'abi': 'eabihf',
460         'mcpu': 'cortex-m55',
461         'mfpu': 'fpv5-d16',
462         'mpu': True,
463         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
464         'header': 'core_cm55.h',
465         'defines': {
466             '__CM55_REV': '0x0000U',
467             '__FPU_PRESENT': '1U',
468             '__FPU_DP': '1U',
469             '__MPU_PRESENT': '1U',
470             '__ICACHE_PRESENT': '1U',
471             '__DCACHE_PRESENT': '1U',
472             '__SAUREGION_PRESENT': '8U',
473             '__DSP_PRESENT': '1U',
474             '__VTOR_PRESENT': '1U',
475             '__PMU_PRESENT': '1U',
476             '__PMU_NUM_EVENTCNT': '8U',
477             '__NVIC_PRIO_BITS': '3U',
478             '__Vendor_SysTickConfig': '0U'
479         }
480     },
481     'CM85': {
482         'arch': 'thumbv8.1m.main',
483         'triple': 'thumbv8m',
484         'abi': 'eabihf',
485         'mcpu': 'cortex-m85',
486         'mfpu': 'fpv5-d16',
487         'mpu': True,
488         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
489         'header': 'core_cm85.h',
490         'defines': {
491             '__CM85_REV': '0x0000U',
492             '__FPU_PRESENT': '1U',
493             '__FPU_DP': '1U',
494             '__MPU_PRESENT': '1U',
495             '__ICACHE_PRESENT': '1U',
496             '__DCACHE_PRESENT': '1U',
497             '__SAUREGION_PRESENT': '8U',
498             '__DSP_PRESENT': '1U',
499             '__VTOR_PRESENT': '1U',
500             '__PMU_PRESENT': '1U',
501             '__PMU_NUM_EVENTCNT': '8U',
502             '__NVIC_PRIO_BITS': '3U',
503             '__Vendor_SysTickConfig': '0U'
504         }
505     },
506     'CM85S': {
507         'arch': 'thumbv8.1m.main',
508         'triple': 'thumbv8m',
509         'abi': 'eabihf',
510         'mcpu': 'cortex-m85',
511         'mfpu': 'fpv5-d16',
512         'mpu': True,
513         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
514         'header': 'core_cm85.h',
515         'defines': {
516             '__CM85_REV': '0x0000U',
517             '__FPU_PRESENT': '1U',
518             '__FPU_DP': '1U',
519             '__MPU_PRESENT': '1U',
520             '__ICACHE_PRESENT': '1U',
521             '__DCACHE_PRESENT': '1U',
522             '__SAUREGION_PRESENT': '8U',
523             '__DSP_PRESENT': '1U',
524             '__VTOR_PRESENT': '1U',
525             '__PMU_PRESENT': '1U',
526             '__PMU_NUM_EVENTCNT': '8U',
527             '__NVIC_PRIO_BITS': '3U',
528             '__Vendor_SysTickConfig': '0U'
529         }
530     },
531     'CM85NS': {
532         'arch': 'thumbv8.1m.main',
533         'triple': 'thumbv8m',
534         'abi': 'eabihf',
535         'mcpu': 'cortex-m85',
536         'mfpu': 'fpv5-d16',
537         'mpu': True,
538         'features': ['thumbv6m', 'thumbv7m', 'dsp', 'thumbv8m.base', 'thumbv8m.main', 'thumbv8.1m.main', 'thumb-2', 'sat', 'ldrex', 'clz'],
539         'header': 'core_cm85.h',
540         'defines': {
541             '__CM85_REV': '0x0000U',
542             '__FPU_PRESENT': '1U',
543             '__FPU_DP': '1U',
544             '__MPU_PRESENT': '1U',
545             '__ICACHE_PRESENT': '1U',
546             '__DCACHE_PRESENT': '1U',
547             '__SAUREGION_PRESENT': '8U',
548             '__DSP_PRESENT': '1U',
549             '__VTOR_PRESENT': '1U',
550             '__PMU_PRESENT': '1U',
551             '__PMU_NUM_EVENTCNT': '8U',
552             '__NVIC_PRIO_BITS': '3U',
553             '__Vendor_SysTickConfig': '0U'
554         }
555     },
556     'CA5': {
557         'arch': 'armv7a',
558         'triple': 'armv7-a',
559         'abi': 'eabi',
560         'mcpu': 'cortex-a5',
561         'mfpu': 'none',
562         'mpu': True,
563         'features': ['armv7a', 'thumb-2', 'sat', 'clz'],
564         'header': 'core_ca.h',
565         'defines': {
566             '__CORTEX_A': '7',
567             '__CA_REV': '0x0000U',
568             '__FPU_PRESENT': '0U',
569             '__GIC_PRESENT': '1U',
570             '__TIM_PRESENT': '1U',
571             '__L2C_PRESENT': '1U',
572             'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
573             'GIC_INTERFACE_BASE': '0x2C000100UL',
574             'TIMER_BASE': '0x2C000600UL',
575             'L2C_310_BASE': '0x2C0F0000UL',
576             'IRQn_Type': 'int'
577         }
578     },
579     'CA5neon': {
580         'arch': 'armv7a',
581         'triple': 'armv7-a',
582         'abi': 'eabihf',
583         'mcpu': 'cortex-a5',
584         'mfpu': 'neon-vfpv4',
585         'mpu': True,
586         'features': ['armv7a', 'thumb-2', 'sat', 'dsp', 'clz'],
587         'header': 'core_ca.h',
588         'defines': {
589             '__CORTEX_A': '7',
590             '__CA_REV': '0x0000U',
591             '__FPU_PRESENT': '1U',
592             '__GIC_PRESENT': '1U',
593             '__TIM_PRESENT': '1U',
594             '__L2C_PRESENT': '1U',
595             'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
596             'GIC_INTERFACE_BASE': '0x2C000100UL',
597             'TIMER_BASE': '0x2C000600UL',
598             'L2C_310_BASE': '0x2C0F0000UL',
599             'IRQn_Type': 'int'
600         }
601     },
602     'CA7': {
603         'arch': 'armv7a',
604         'triple': 'armv7-a',
605         'abi': 'eabi',
606         'mcpu': 'cortex-a7',
607         'mfpu': 'none',
608         'mpu': True,
609         'features': ['armv7a', 'thumb-2', 'sat', 'clz'],
610         'header': 'core_ca.h',
611         'defines': {
612             '__CORTEX_A': '7',
613             '__CA_REV': '0x0000U',
614             '__FPU_PRESENT': '0U',
615             '__GIC_PRESENT': '1U',
616             '__TIM_PRESENT': '1U',
617             '__L2C_PRESENT': '1U',
618             'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
619             'GIC_INTERFACE_BASE': '0x2C000100UL',
620             'TIMER_BASE': '0x2C000600UL',
621             'L2C_310_BASE': '0x2C0F0000UL',
622             'IRQn_Type': 'int'
623         }
624     },
625     'CA7neon': {
626         'arch': 'armv7a',
627         'triple': 'armv7-a',
628         'abi': 'eabihf',
629         'mcpu': 'cortex-a7',
630         'mfpu': 'neon-vfpv4',
631         'mpu': True,
632         'features': ['armv7a', 'thumb-2', 'sat', 'dsp', 'clz'],
633         'header': 'core_ca.h',
634         'defines': {
635             '__CORTEX_A': '7',
636             '__CA_REV': '0x0000U',
637             '__FPU_PRESENT': '1U',
638             '__GIC_PRESENT': '1U',
639             '__TIM_PRESENT': '1U',
640             '__L2C_PRESENT': '1U',
641             'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
642             'GIC_INTERFACE_BASE': '0x2C000100UL',
643             'TIMER_BASE': '0x2C000600UL',
644             'L2C_310_BASE': '0x2C0F0000UL',
645             'IRQn_Type': 'int'
646         }
647     },
648     'CA9': {
649         'arch': 'armv7a',
650         'triple': 'armv7-a',
651         'abi': 'eabi',
652         'mcpu': 'cortex-a9',
653         'mfpu': 'none',
654         'mpu': True,
655         'features': ['armv7a', 'thumb-2', 'sat', 'clz'],
656         'header': 'core_ca.h',
657         'defines': {
658             '__CORTEX_A': '7',
659             '__CA_REV': '0x0000U',
660             '__FPU_PRESENT': '0U',
661             '__GIC_PRESENT': '1U',
662             '__TIM_PRESENT': '1U',
663             '__L2C_PRESENT': '1U',
664             'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
665             'GIC_INTERFACE_BASE': '0x2C000100UL',
666             'TIMER_BASE': '0x2C000600UL',
667             'L2C_310_BASE': '0x2C0F0000UL',
668             'IRQn_Type': 'int'
669         }
670     },
671     'CA9neon': {
672         'arch': 'armv7a',
673         'triple': 'armv7-a',
674         'abi': 'eabihf',
675         'mcpu': 'cortex-a9',
676         'mfpu': 'neon-vfpv3',
677         'mpu': True,
678         'features': ['armv7a', 'thumb-2', 'sat', 'dsp', 'ldrex', 'clz'],
679         'header': 'core_ca.h',
680         'defines': {
681             '__CORTEX_A': '7',
682             '__CA_REV': '0x0000U',
683             '__FPU_PRESENT': '1U',
684             '__GIC_PRESENT': '1U',
685             '__TIM_PRESENT': '1U',
686             '__L2C_PRESENT': '1U',
687             'GIC_DISTRIBUTOR_BASE': '0x2C001000UL',
688             'GIC_INTERFACE_BASE': '0x2C000100UL',
689             'TIMER_BASE': '0x2C000600UL',
690             'L2C_310_BASE': '0x2C0F0000UL',
691             'IRQn_Type': 'int'
692         }
693     }
694 }
695
696 # Configuration file for the 'lit' test runner.
697
698 # name: The name of this test suite.
699 config.name = "CMSIS-Core"
700
701 # testFormat: The test format to use to interpret tests.
702 #
703 # For now we require '&&' between commands, until they get globally killed and
704 # the test runner updated.
705 config.test_format = lit.formats.ShTest()
706
707 # suffixes: A list of file extensions to treat as test files.
708 config.suffixes = [
709     ".c"
710 ]
711
712 # test_source_root: The root path where tests are located.
713 config.test_source_root = os.path.dirname(__file__)
714
715
716 # clang_path = get_toolchain_from_env('CLANG')
717
718 toolchain = lit_config.params.get("toolchain", "AC6")
719 device = lit_config.params.get("device", "ARMCM3")
720 optimize = lit_config.params.get("optimize", "none")
721
722 class Toolchain:
723     def __init__(self, toolchain, device, optimize):
724         self._toolchain = toolchain
725         self.device = device
726         self.optimize = optimize
727
728     def get_root_from_env(self):
729         keys = sorted((k for k in os.environ.keys() if k.startswith(f'{self._toolchain}_TOOLCHAIN_')), reverse=True)
730         if not keys:
731             print(f"Toolchain '{self._toolchain}' not registered!")
732             return None
733         return os.environ.get(keys[0])
734
735     def get_root(self):
736         return self.get_root_from_env()
737
738
739 class Toolchain_AC6(Toolchain):
740     OPTIMIZE = {
741         'none': '-O1',
742         'balanced': '-O3',
743         'speed': '-Os',
744         'size': '-Oz'
745     }
746
747     def __init__(self, **args):
748         super().__init__('AC6', **args)
749
750     def get_cc(self):
751         return os.path.join(self.get_root(), 'armclang')
752
753     def get_ccflags(self):
754         ccflags = [
755             '--target=arm-arm-none-eabi', f'-mcpu={DEVICES[self.device]["mcpu"]}', f'-mfpu={DEVICES[self.device]["mfpu"]}', 
756             self.OPTIMIZE[self.optimize], '-I', os.path.abspath('../Include'), '-c', '-D', f'CORE_HEADER="{DEVICES[device]["header"]}"']
757         if device.endswith('S') and not device.endswith('NS'):
758             ccflags += ["-mcmse"]
759         ccflags += list(sum([('-D', f'{define}={value}') for (define, value) in DEVICES[self.device]['defines'].items()], ()))
760         return ccflags
761
762
763 class Toolchain_GCC(Toolchain):
764     OPTIMIZE = {
765         'none': '-O1',
766         'balanced': '-O3',
767         'speed': '-Os',
768         'size': '-Oz'
769     }
770
771     def __init__(self, **args):
772         super().__init__('GCC', **args)
773
774     def get_cc(self):
775         return os.path.join(self.get_root(), 'arm-none-eabi-gcc')
776
777     def get_ccflags(self):
778         floatabi='soft'
779         if DEVICES[self.device]["mfpu"] != 'none':
780             floatabi='hard'
781         ccflags = [
782             f'-mcpu={DEVICES[self.device]["mcpu"]}', f'-mfloat-abi={floatabi}', 
783             self.OPTIMIZE[self.optimize], '-I', os.path.abspath('../Include'), 
784             '-D', f'CORE_HEADER="{DEVICES[device]["header"]}"', '-c']
785         if DEVICES[self.device]["mfpu"] != "none":
786             ccflags += [f'-mfpu={DEVICES[self.device]["mfpu"]}']
787         if device.endswith('S') and not device.endswith('NS'):
788             ccflags += ["-mcmse"]
789         ccflags += list(sum([('-D', f'{define}={value}') for (define, value) in DEVICES[self.device]['defines'].items()], ()))
790         return ccflags
791
792 class Toolchain_Clang(Toolchain):
793     TARGET = {
794         'CM0': 'thumbv6m-none-eabi',
795         'CM0plus': 'thumbv6m-none-eabi',
796         'CM3': 'thumbv7m-none-eabi',
797         'CM4': 'thumbv7em-none-eabi',
798         'CM4FP': 'thumbv7em-none-eabihf',
799         'CM7': 'thumbv7em-none-eabi',
800         'CM7SP': 'thumbv7em-none-eabihf',
801         'CM7DP': 'thumbv7em-none-eabihf',
802         'CM23': 'thumbv8m.base-none-eabi',
803         'CM23S': 'thumbv8m.base-none-eabi',
804         'CM23NS': 'thumbv8m.base-none-eabi',
805         'CM33': 'thumbv8m.main-none-eabihf',
806         'CM33S': 'thumbv8m.main-none-eabihf',
807         'CM33NS': 'thumbv8m.main-none-eabihf',
808         'CM35P': 'thumbv8m.main-none-eabihf',
809         'CM35PS': 'thumbv8m.main-none-eabihf',
810         'CM35PNS': 'thumbv8m.main-none-eabihf',
811         'CM52': 'thumbv8.1m.main-none-eabihf',
812         'CM52S': 'thumbv8.1m.main-none-eabihf',
813         'CM52NS': 'thumbv8.1m.main-none-eabihf',
814         'CM55': 'thumbv8.1m.main-none-eabihf',
815         'CM55S': 'thumbv8.1m.main-none-eabihf',
816         'CM55NS': 'thumbv8.1m.main-none-eabihf',
817         'CM85': 'thumbv8.1m.main-none-eabihf',
818         'CM85S': 'thumbv8.1m.main-none-eabihf',
819         'CM85NS': 'thumbv8.1m.main-none-eabihf',
820         'CA5': 'armv7-none-eabi',
821         'CA5neon': 'armv7-none-eabihf',
822         'CA7': 'armv7-none-eabi',
823         'CA7neon': 'armv7-none-eabihf',
824         'CA9': 'armv7-none-eabi',
825         'CA9neon': 'armv7-none-eabihf'
826     }
827     OPTIMIZE = {
828         'none': '-O1',
829         'balanced': '-O3',
830         'speed': '-Os',
831         'size': '-Oz'
832     }
833     def __init__(self, **args):
834         super().__init__('CLANG', **args)
835
836     def get_cc(self):
837         return os.path.join(self.get_root(), 'clang')
838
839     def get_ccflags(self):
840         ccflags = [
841             f'--target={self.TARGET[self.device]}', self.OPTIMIZE[self.optimize], 
842             f'-mcpu={DEVICES[self.device]["mcpu"]}', f'-mfpu={DEVICES[self.device]["mfpu"]}', 
843             '-I', os.path.abspath('../Include'), '-c', '-D', f'CORE_HEADER="{DEVICES[device]["header"]}"']
844         if device.endswith('S') and not device.endswith('NS'):
845             ccflags += ["-mcmse"]
846         ccflags += list(sum([('-D', f'{define}={value}') for (define, value) in DEVICES[self.device]['defines'].items()], ()))
847
848         return ccflags
849     
850 tc = None
851 if toolchain == 'AC6':
852     tc = Toolchain_AC6(device=device, optimize=optimize)
853 elif toolchain == 'GCC':
854     tc = Toolchain_GCC(device=device, optimize=optimize)
855 elif toolchain == 'Clang':
856     tc = Toolchain_Clang(device=device, optimize=optimize)
857
858 prefixes = ['CHECK']
859 if device.endswith('NS'):
860     prefixes += ['CHECK-NS']
861 elif device.endswith('S'):
862     prefixes += ['CHECK-S']
863 if DEVICES[device]['arch'].startswith('thumb'):
864     prefixes += ['CHECK-THUMB']       
865 elif DEVICES[device]['arch'].startswith('arm'):
866     prefixes += ['CHECK-ARM']
867
868 if DEVICES[device]["mfpu"] != 'none':
869     config.available_features.add('fpu')
870 for feature in DEVICES[device]['features']:
871     config.available_features.add(feature)
872
873 objdump = os.path.join(Toolchain("CLANG", "none", "none").get_root(), 'llvm-objdump')
874 config.substitutions.append(("llvm-objdump", objdump))
875
876 config.substitutions.append(("%ccout%", "-o"))
877 config.substitutions.append(("%cc%", tc.get_cc()))
878 config.substitutions.append(("%ccflags%", ' '.join(tc.get_ccflags())))
879 config.substitutions.append(("%prefixes%", ','.join(prefixes)))
880 config.substitutions.append(("%triple%", DEVICES[device]['triple']))
881 config.substitutions.append(("%mcpu%", DEVICES[device]['mcpu']))