]> begriffs open source - freertos/blob - portable/CMakeLists.txt
FreeRTOS MPU: Remove MPU region number check (#1261)
[freertos] / portable / CMakeLists.txt
1 if( FREERTOS_PORT STREQUAL "GCC_RISC_V_GENERIC" )
2     include( GCC/RISC-V/chip_extensions.cmake )
3 endif()
4
5 if( FREERTOS_PORT STREQUAL "IAR_RISC_V_GENERIC" )
6     include( IAR/RISC-V/chip_extensions.cmake )
7 endif()
8
9 # FreeRTOS internal cmake file. Do not use it in user top-level project
10
11 if (FREERTOS_PORT STREQUAL "A_CUSTOM_PORT")
12     message(STATUS "Using a custom FREERTOS_PORT.")
13     return()
14 endif()
15
16 # FreeRTOS internal cmake file. Do not use it in user top-level project
17
18 add_library(freertos_kernel_port OBJECT
19     # TEMPLATE Port
20     $<$<STREQUAL:${FREERTOS_PORT},TEMPLATE>:
21         template/port.c>
22
23         # 16-Bit DOS ports for BCC
24     $<$<STREQUAL:${FREERTOS_PORT},BCC_16BIT_DOS_FLSH186>:
25         BCC/16BitDOS/common/portcomn.c
26         BCC/16BitDOS/Flsh186/port.c>
27
28     $<$<STREQUAL:${FREERTOS_PORT},BCC_16BIT_DOS_PC>:
29         BCC/16BitDOS/common/portcomn.c
30         BCC/16BitDOS/PC/port.c>
31
32     # ARMv7-M port for Texas Instruments Code Composer Studio
33     $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CM3>:
34         CCS/ARM_CM3/port.c
35         CCS/ARM_CM3/portasm.asm>
36
37     # ARMv7E-M port for Texas Instruments Code Composer Studio
38     $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CM4F>:
39         CCS/ARM_CM4F/port.c
40         CCS/ARM_CM4F/portasm.asm>
41
42     # ARMv7-R port for Texas Instruments Code Composer Studio
43     $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CR4>:
44         CCS/ARM_Cortex-R4/port.c
45         CCS/ARM_Cortex-R4/portASM.asm>
46
47     # Texas Instruments MSP430 port for Texas Instruments Code Composer Studio
48     $<$<STREQUAL:${FREERTOS_PORT},CCS_MSP430X>:
49         CCS/MSP430X/port.c
50         CCS/MSP430X/portext.asm>
51
52     # NXP (formerly Motorola, Freescale) Cold Fire and 68HCS12 ports for Code Warrior
53     $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_COLDFIRE_V1>:
54         CodeWarrior/ColdFire_V1/port.c
55         CodeWarrior/ColdFire_V1/portasm.S>
56
57     $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_COLDFIRE_V2>:
58         CodeWarrior/ColdFire_V2/port.c
59         CodeWarrior/ColdFire_V2/portasm.S>
60
61     $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_HCS12>:
62         CodeWarrior/HCS12/port.c>
63
64     # ARMv7-A port for GCC
65     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CA9>:
66         GCC/ARM_CA9/port.c
67         GCC/ARM_CA9/portASM.S>
68
69     # ARMv8-A ports for GCC
70     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_AARCH64>:
71         GCC/ARM_AARCH64/port.c
72         GCC/ARM_AARCH64/portASM.S>
73
74     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_AARCH64_SRE>:
75         GCC/ARM_AARCH64_SRE/port.c
76         GCC/ARM_AARCH64_SRE/portASM.S>
77
78     # ARMv6-M port for GCC
79     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM0>:
80         GCC/ARM_CM0/port.c
81         GCC/ARM_CM0/portasm.c
82         GCC/ARM_CM0/mpu_wrappers_v2_asm.c>
83
84     # ARMv6-M / Cortex-M0 Raspberry PI RP2040 port for GCC
85     $<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:
86         ThirdParty/GCC/RP2040/port.c>
87
88     # ARMv7-M ports for GCC
89     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM3>:
90         GCC/ARM_CM3/port.c>
91
92     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM3_MPU>:
93         GCC/ARM_CM3_MPU/port.c
94         GCC/ARM_CM3_MPU/mpu_wrappers_v2_asm.c>
95
96     # ARMv7E-M ports for GCC
97     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM4_MPU>:
98         GCC/ARM_CM4_MPU/port.c
99         GCC/ARM_CM4_MPU/mpu_wrappers_v2_asm.c>
100
101     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM4F>:
102         GCC/ARM_CM4F/port.c>
103
104     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM7>:
105         GCC/ARM_CM7/r0p1/port.c>
106
107     # ARMv8-M ports for GCC
108     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_NONSECURE>:
109         GCC/ARM_CM23/non_secure/port.c
110         GCC/ARM_CM23/non_secure/portasm.c
111         GCC/ARM_CM23/non_secure/mpu_wrappers_v2_asm.c>
112
113     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_SECURE>:
114         GCC/ARM_CM23/secure/secure_context_port.c
115         GCC/ARM_CM23/secure/secure_context.c
116         GCC/ARM_CM23/secure/secure_heap.c
117         GCC/ARM_CM23/secure/secure_init.c>
118
119     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_NTZ_NONSECURE>:
120         GCC/ARM_CM23_NTZ/non_secure/port.c
121         GCC/ARM_CM23_NTZ/non_secure/portasm.c
122         GCC/ARM_CM23_NTZ/non_secure/mpu_wrappers_v2_asm.c>
123
124     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_NONSECURE>:
125         GCC/ARM_CM33/non_secure/port.c
126         GCC/ARM_CM33/non_secure/portasm.c
127         GCC/ARM_CM33/non_secure/mpu_wrappers_v2_asm.c>
128
129     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_SECURE>:
130         GCC/ARM_CM33/secure/secure_context_port.c
131         GCC/ARM_CM33/secure/secure_context.c
132         GCC/ARM_CM33/secure/secure_heap.c
133         GCC/ARM_CM33/secure/secure_init.c>
134
135     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_NTZ_NONSECURE>:
136         GCC/ARM_CM33_NTZ/non_secure/port.c
137         GCC/ARM_CM33_NTZ/non_secure/portasm.c
138         GCC/ARM_CM33_NTZ/non_secure/mpu_wrappers_v2_asm.c>
139
140     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_TFM>:
141         GCC/ARM_CM33_NTZ/non_secure/port.c
142         GCC/ARM_CM33_NTZ/non_secure/portasm.c
143         GCC/ARM_CM33_NTZ/non_secure/mpu_wrappers_v2_asm.c
144         ThirdParty/GCC/ARM_TFM/os_wrapper_freertos.c>
145
146     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_NONSECURE>:
147         GCC/ARM_CM35P/non_secure/port.c
148         GCC/ARM_CM35P/non_secure/portasm.c
149         GCC/ARM_CM35P/non_secure/mpu_wrappers_v2_asm.c>
150
151     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_SECURE>:
152         GCC/ARM_CM35P/secure/secure_context_port.c
153         GCC/ARM_CM35P/secure/secure_context.c
154         GCC/ARM_CM35P/secure/secure_heap.c
155         GCC/ARM_CM35P/secure/secure_init.c>
156
157     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_NTZ_NONSECURE>:
158         GCC/ARM_CM35P_NTZ/non_secure/port.c
159         GCC/ARM_CM35P_NTZ/non_secure/portasm.c
160         GCC/ARM_CM35P_NTZ/non_secure/mpu_wrappers_v2_asm.c>
161
162     # ARMv8.1-M ports for GCC
163     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_NONSECURE>:
164         GCC/ARM_CM55/non_secure/port.c
165         GCC/ARM_CM55/non_secure/portasm.c
166         GCC/ARM_CM55/non_secure/mpu_wrappers_v2_asm.c>
167
168     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_SECURE>:
169         GCC/ARM_CM55/secure/secure_context_port.c
170         GCC/ARM_CM55/secure/secure_context.c
171         GCC/ARM_CM55/secure/secure_heap.c
172         GCC/ARM_CM55/secure/secure_init.c>
173
174     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_NTZ_NONSECURE>:
175         GCC/ARM_CM55_NTZ/non_secure/port.c
176         GCC/ARM_CM55_NTZ/non_secure/portasm.c
177         GCC/ARM_CM55_NTZ/non_secure/mpu_wrappers_v2_asm.c>
178
179     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_TFM>:
180         GCC/ARM_CM55_NTZ/non_secure/port.c
181         GCC/ARM_CM55_NTZ/non_secure/portasm.c
182         GCC/ARM_CM55_NTZ/non_secure/mpu_wrappers_v2_asm.c
183         ThirdParty/GCC/ARM_TFM/os_wrapper_freertos.c>
184
185     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_NONSECURE>:
186         GCC/ARM_CM85/non_secure/port.c
187         GCC/ARM_CM85/non_secure/portasm.c
188         GCC/ARM_CM85/non_secure/mpu_wrappers_v2_asm.c>
189
190     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_SECURE>:
191         GCC/ARM_CM85/secure/secure_context_port.c
192         GCC/ARM_CM85/secure/secure_context.c
193         GCC/ARM_CM85/secure/secure_heap.c
194         GCC/ARM_CM85/secure/secure_init.c>
195
196     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_NTZ_NONSECURE>:
197         GCC/ARM_CM85_NTZ/non_secure/port.c
198         GCC/ARM_CM85_NTZ/non_secure/portasm.c
199         GCC/ARM_CM85_NTZ/non_secure/mpu_wrappers_v2_asm.c>
200
201     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_TFM>:
202         GCC/ARM_CM85_NTZ/non_secure/port.c
203         GCC/ARM_CM85_NTZ/non_secure/portasm.c
204         GCC/ARM_CM85_NTZ/non_secure/mpu_wrappers_v2_asm.c
205         ThirdParty/GCC/ARM_TFM/os_wrapper_freertos.c>
206
207     # ARMv7-R ports for GCC
208     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CR5>:
209         GCC/ARM_CR5/port.c
210         GCC/ARM_CR5/portASM.S>
211
212     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CRX_MPU>:
213         GCC/ARM_CRx_MPU/port.c
214         GCC/ARM_CRx_MPU/portASM.S
215         GCC/ARM_CRx_MPU/mpu_wrappers_v2_asm.S>
216
217     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CRX_NOGIC>:
218         GCC/ARM_CRx_No_GIC/port.c
219         GCC/ARM_CRx_No_GIC/portASM.S>
220
221     # ARMv4T ARM7TDMI ports for GCC
222     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_AT91FR40008>:
223         GCC/ARM7_AT91FR40008/port.c
224         GCC/ARM7_AT91FR40008/portISR.c>
225
226     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_AT91SAM7S>:
227         GCC/ARM7_AT91SAM7S/lib_AT91SAM7X256.c
228         GCC/ARM7_AT91SAM7S/port.c
229         GCC/ARM7_AT91SAM7S/portISR.c>
230
231     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_LPC2000>:
232         GCC/ARM7_LPC2000/port.c
233         GCC/ARM7_LPC2000/portISR.c>
234
235     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_LPC23XX>:
236         GCC/ARM7_LPC23xx/port.c
237         GCC/ARM7_LPC23xx/portISR.c>
238
239     $<$<STREQUAL:${FREERTOS_PORT},GCC_STR75X>:
240         GCC/STR75x/port.c
241         GCC/STR75x/portISR.c>
242
243     # Microchip (formerly Ateml) AVR8 ports for GCC
244     $<$<STREQUAL:${FREERTOS_PORT},GCC_ATMEGA323>:
245         GCC/ATMega323/port.c>
246
247     $<$<STREQUAL:${FREERTOS_PORT},GCC_ATMEGA>:
248         ThirdParty/GCC/ATmega/port.c>
249
250     $<$<STREQUAL:${FREERTOS_PORT},GCC_AVRDX>:
251         ThirdParty/Partner-Supported-Ports/GCC/AVR_AVRDx/port.c>
252
253     $<$<STREQUAL:${FREERTOS_PORT},GCC_AVR_MEGA0>:
254         ThirdParty/Partner-Supported-Ports/GCC/AVR_Mega0/port.c>
255
256     # Microchip (formerly Ateml) AVR32 port for GCC
257     $<$<STREQUAL:${FREERTOS_PORT},GCC_AVR32_UC3>:
258         GCC/AVR32_UC3/exception.S
259         GCC/AVR32_UC3/port.c>
260
261     # NXP (formerly Motorola, Freescale) Cold Fire and 68HCS12 ports for GCC
262     $<$<STREQUAL:${FREERTOS_PORT},GCC_COLDFIRE_V2>:
263         GCC/ColdFire_V2/port.c
264         GCC/ColdFire_V2/portasm.S>
265
266     $<$<STREQUAL:${FREERTOS_PORT},GCC_HCS12>:
267         GCC/HCS12/port.c>
268
269     # Cortus APS3 soft core port for GCC
270     $<$<STREQUAL:${FREERTOS_PORT},GCC_CORTUS_APS3>:
271         GCC/CORTUS_APS3/port.c>
272
273     # Renesas (formerly Hitach) H8S port for GCC
274     $<$<STREQUAL:${FREERTOS_PORT},GCC_H8S2329>:
275         GCC/H8S2329/port.c>
276
277     # x86 / IA32 flat memory model port for GCC
278     $<$<STREQUAL:${FREERTOS_PORT},GCC_IA32_FLAT>:
279         GCC/IA32_flat/port.c
280         GCC/IA32_flat/portASM.S>
281
282     # Xilinx MicroBlaze soft core ports for GCC
283     $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE>:
284         GCC/MicroBlaze/port.c
285         GCC/MicroBlaze/portasm.s>
286
287     $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE_V8>:
288         GCC/MicroBlazeV8/port.c
289         GCC/MicroBlazeV8/port_exceptions.c
290         GCC/MicroBlazeV8/portasm.S>
291
292     $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE_V9>:
293         GCC/MicroBlazeV9/port.c
294         GCC/MicroBlazeV9/port_exceptions.c
295         GCC/MicroBlazeV9/portasm.S>
296
297     # Xilinx PCC4XX soft core ports for GCC
298     $<$<STREQUAL:${FREERTOS_PORT},GCC_PPC405_XILINX>:
299         GCC/PPC405_Xilinx/port.c
300         GCC/PPC405_Xilinx/portasm.S>
301
302     $<$<STREQUAL:${FREERTOS_PORT},GCC_PPC440_XILINX>:
303         GCC/PPC440_Xilinx/port.c
304         GCC/PPC440_Xilinx/portasm.S>
305
306      # Texas Instruments MSP430 port for GCC
307     $<$<STREQUAL:${FREERTOS_PORT},GCC_MSP430F449>:
308         GCC/MSP430F449/port.c>
309
310     # Intel (formerly Altera) NIOS II soft core port for GCC
311     $<$<STREQUAL:${FREERTOS_PORT},GCC_NIOSII>:
312         GCC/NiosII/port.c
313         GCC/NiosII/port_asm.S>
314
315     # RISC-V architecture ports for GCC
316     $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V>:
317         GCC/RISC-V/port.c
318         GCC/RISC-V/portASM.S>
319
320     $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V_PULPINO_VEGA_RV32M1RM>:
321         GCC/RISC-V/port.c
322         GCC/RISC-V/portASM.S>
323
324     $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V_GENERIC>:
325         GCC/RISC-V/port.c
326         GCC/RISC-V/portASM.S>
327
328     # Renesas RL78 port for GCC
329     $<$<STREQUAL:${FREERTOS_PORT},GCC_RL78>:
330         GCC/RL78/port.c
331         GCC/RL78/portasm.S>
332
333     # Renesas RX architecture ports for GCC
334     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX100>:
335         GCC/RX100/port.c>
336
337     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX200>:
338         GCC/RX200/port.c>
339
340     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX600>:
341         GCC/RX600/port.c>
342
343     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX600_V2>:
344         GCC/RX600v2/port.c>
345
346     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX700_V3_DPFPU>:
347         GCC/RX700v3_DPFPU/port.c>
348
349     # Infineon TriCore 1782 port for GCC
350     $<$<STREQUAL:${FREERTOS_PORT},GCC_TRICORE_1782>:
351         GCC/TriCore_1782/port.c
352         GCC/TriCore_1782/porttrap.c>
353
354     # Synopsys ARC architecture ports for GCC
355     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARC_EM_HS>:
356         ThirdParty/GCC/ARC_EM_HS/arc_freertos_exceptions.c
357         ThirdParty/GCC/ARC_EM_HS/arc_support.s
358         ThirdParty/GCC/ARC_EM_HS/freertos_tls.c
359         ThirdParty/GCC/ARC_EM_HS/port.c>
360
361     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARC_V1>:
362         ThirdParty/GCC/ARC_v1/arc_freertos_exceptions.c
363         ThirdParty/GCC/ARC_v1/arc_support.s
364         ThirdParty/GCC/ARC_v1/port.c>
365
366     # Posix Simulator port for GCC
367     $<$<STREQUAL:${FREERTOS_PORT},GCC_POSIX>:
368         ThirdParty/GCC/Posix/port.c
369         ThirdParty/GCC/Posix/utils/wait_for_event.c>
370
371     # Xtensa LX / Espressif ESP32 port for GCC
372     $<$<STREQUAL:${FREERTOS_PORT},GCC_XTENSA_ESP32>:
373         ThirdParty/GCC/Xtensa_ESP32/FreeRTOS-openocd.c
374         ThirdParty/GCC/Xtensa_ESP32/port.c
375         ThirdParty/GCC/Xtensa_ESP32/portasm.S
376         ThirdParty/GCC/Xtensa_ESP32/xtensa_context.S
377         ThirdParty/GCC/Xtensa_ESP32/xtensa_init.c
378         ThirdParty/GCC/Xtensa_ESP32/xtensa_intr_asm.S
379         ThirdParty/GCC/Xtensa_ESP32/xtensa_intr.c
380         ThirdParty/GCC/Xtensa_ESP32/xtensa_loadstore_handler.S
381         ThirdParty/GCC/Xtensa_ESP32/xtensa_overlay_os_hook.c
382         ThirdParty/GCC/Xtensa_ESP32/xtensa_vector_defaults.S
383         ThirdParty/GCC/Xtensa_ESP32/xtensa_vectors.S>
384
385     # Renesas (formerly NEC) 78K port for IAR EW78K
386     $<$<STREQUAL:${FREERTOS_PORT},IAR_78K0K>:
387         IAR/78K0R/port.c
388         IAR/78K0R/portasm.s26>
389
390     # ARMv7-A ports for IAR EWARM
391     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CA5_NOGIC>:
392         IAR/ARM_CA5_No_GIC/port.c
393         IAR/ARM_CA5_No_GIC/portASM.s>
394
395     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CA9>:
396         IAR/ARM_CA9/port.c
397         IAR/ARM_CA9/portASM.s>
398
399     # ARMv6-M port for IAR EWARM
400     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM0>:
401         IAR/ARM_CM0/port.c
402         IAR/ARM_CM0/portasm.s>
403
404     # ARMv7-M port for IAR EWARM
405     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM3>:
406         IAR/ARM_CM3/port.c
407         IAR/ARM_CM3/portasm.s>
408
409     # ARMv7E-M ports for IAR EWARM
410     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM4F>:
411         IAR/ARM_CM4F/port.c
412         IAR/ARM_CM4F/portasm.s>
413
414     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM4F_MPU>:
415         IAR/ARM_CM4F_MPU/port.c
416         IAR/ARM_CM4F_MPU/portasm.s
417         IAR/ARM_CM4F_MPU/mpu_wrappers_v2_asm.S>
418
419     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM7>:
420         IAR/ARM_CM7/r0p1/port.c
421         IAR/ARM_CM7/r0p1/portasm.s>
422
423     # ARMv8-M Ports for IAR EWARM
424     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_NONSECURE>:
425         IAR/ARM_CM23/non_secure/port.c
426         IAR/ARM_CM23/non_secure/portasm.s
427         IAR/ARM_CM23/non_secure/mpu_wrappers_v2_asm.S>
428
429     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_SECURE>:
430         IAR/ARM_CM23/secure/secure_context_port_asm.s
431         IAR/ARM_CM23/secure/secure_context.c
432         IAR/ARM_CM23/secure/secure_heap.c
433         IAR/ARM_CM23/secure/secure_init.c>
434
435     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_NTZ_NONSECURE>:
436         IAR/ARM_CM23_NTZ/non_secure/port.c
437         IAR/ARM_CM23_NTZ/non_secure/portasm.s
438         IAR/ARM_CM23_NTZ/non_secure/mpu_wrappers_v2_asm.S>
439
440     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_NONSECURE>:
441         IAR/ARM_CM33/non_secure/port.c
442         IAR/ARM_CM33/non_secure/portasm.s
443         IAR/ARM_CM33/non_secure/mpu_wrappers_v2_asm.S>
444
445     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_SECURE>:
446         IAR/ARM_CM33/secure/secure_context_port_asm.s
447         IAR/ARM_CM33/secure/secure_context.c
448         IAR/ARM_CM33/secure/secure_heap.c
449         IAR/ARM_CM33/secure/secure_init.c>
450
451     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_NTZ_NONSECURE>:
452         IAR/ARM_CM33_NTZ/non_secure/port.c
453         IAR/ARM_CM33_NTZ/non_secure/portasm.s
454         IAR/ARM_CM33_NTZ/non_secure/mpu_wrappers_v2_asm.S>
455
456     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_TFM>:
457         IAR/ARM_CM33_NTZ/non_secure/port.c
458         IAR/ARM_CM33_NTZ/non_secure/portasm.s
459         IAR/ARM_CM33_NTZ/non_secure/mpu_wrappers_v2_asm.S
460         ThirdParty/GCC/ARM_TFM/os_wrapper_freertos.c>
461
462     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_NONSECURE>:
463         IAR/ARM_CM35P/non_secure/port.c
464         IAR/ARM_CM35P/non_secure/portasm.s
465         IAR/ARM_CM35P/non_secure/mpu_wrappers_v2_asm.S>
466
467     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_SECURE>:
468         IAR/ARM_CM35P/secure/secure_context_port_asm.s
469         IAR/ARM_CM35P/secure/secure_context.c
470         IAR/ARM_CM35P/secure/secure_heap.c
471         IAR/ARM_CM35P/secure/secure_init.c>
472
473     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_NTZ_NONSECURE>:
474         IAR/ARM_CM35P_NTZ/non_secure/port.c
475         IAR/ARM_CM35P_NTZ/non_secure/portasm.s
476         IAR/ARM_CM35P_NTZ/non_secure/mpu_wrappers_v2_asm.S>
477
478     # ARMv8.1-M ports for IAR EWARM
479     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_NONSECURE>:
480         IAR/ARM_CM55/non_secure/port.c
481         IAR/ARM_CM55/non_secure/portasm.s
482         IAR/ARM_CM55/non_secure/mpu_wrappers_v2_asm.S>
483
484     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_SECURE>:
485         IAR/ARM_CM55/secure/secure_context_port_asm.s
486         IAR/ARM_CM55/secure/secure_context.c
487         IAR/ARM_CM55/secure/secure_heap.c
488         IAR/ARM_CM55/secure/secure_init.c>
489
490     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_NTZ_NONSECURE>:
491         IAR/ARM_CM55_NTZ/non_secure/port.c
492         IAR/ARM_CM55_NTZ/non_secure/portasm.s
493         IAR/ARM_CM55_NTZ/non_secure/mpu_wrappers_v2_asm.S>
494
495     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_TFM>:
496         IAR/ARM_CM55_NTZ/non_secure/port.c
497         IAR/ARM_CM55_NTZ/non_secure/portasm.s
498         IAR/ARM_CM55_NTZ/non_secure/mpu_wrappers_v2_asm.S
499         ThirdParty/GCC/ARM_TFM/os_wrapper_freertos.c>
500
501     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_NONSECURE>:
502         IAR/ARM_CM85/non_secure/port.c
503         IAR/ARM_CM85/non_secure/portasm.s
504         IAR/ARM_CM85/non_secure/mpu_wrappers_v2_asm.S>
505
506     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_SECURE>:
507         IAR/ARM_CM85/secure/secure_context_port_asm.s
508         IAR/ARM_CM85/secure/secure_context.c
509         IAR/ARM_CM85/secure/secure_heap.c
510         IAR/ARM_CM85/secure/secure_init.c>
511
512     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_NTZ_NONSECURE>:
513         IAR/ARM_CM85_NTZ/non_secure/port.c
514         IAR/ARM_CM85_NTZ/non_secure/portasm.s
515         IAR/ARM_CM85_NTZ/non_secure/mpu_wrappers_v2_asm.S>
516
517         $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_TFM>:
518         IAR/ARM_CM85_NTZ/non_secure/port.c
519         IAR/ARM_CM85_NTZ/non_secure/portasm.s
520         IAR/ARM_CM85_NTZ/non_secure/mpu_wrappers_v2_asm.S
521         ThirdParty/GCC/ARM_TFM/os_wrapper_freertos.c>
522
523     # ARMv7-R Ports for IAR EWARM
524     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CRX_NOGIC>:
525         IAR/ARM_CRx_No_GIC/port.c
526         IAR/ARM_CRx_No_GIC/portASM.s>
527
528     # Microchip (formerly Atmel) AVR8 ports for IAR EWAVR
529     $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEGA323>:
530         IAR/ATMega323/port.c
531         IAR/ATMega323/portmacro.s90>
532
533     $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR_AVRDX>:
534         IAR/AVR_AVRDx/port.c
535         IAR/AVR_AVRDx/portmacro.s90>
536
537     $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR_MEGA0>:
538         IAR/AVR_Mega0/port.c
539         IAR/AVR_Mega0/portmacro.s90>
540
541     # Microchip (formerly Atmel) AVR32 port for IAR Embedded Workbench for AVR32
542     $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR32_UC3>:
543         IAR/AVR32_UC3/exception.s82
544         IAR/AVR32_UC3/port.c
545         IAR/AVR32_UC3/read.c
546         IAR/AVR32_UC3/write.c>
547
548     # Texas Instruments MSP430 ports for IAR Embedded Workbench for MSP430
549     $<$<STREQUAL:${FREERTOS_PORT},IAR_MSP430>:
550         IAR/MSP430/port.c
551         IAR/MSP430/portext.s43>
552
553     $<$<STREQUAL:${FREERTOS_PORT},IAR_MSP430X>:
554         IAR/MSP430X/port.c
555         IAR/MSP430X/portext.s43>
556
557     # RISC-V architecture port for IAR Embedded Workbench for RISC-V
558     $<$<STREQUAL:${FREERTOS_PORT},IAR_RISC_V>:
559         IAR/RISC-V/port.c
560         IAR/RISC-V/portASM.s>
561
562     $<$<STREQUAL:${FREERTOS_PORT},IAR_RISC_V_GENERIC>:
563         IAR/RISC-V/port.c
564         IAR/RISC-V/portASM.s>
565
566     # Renesas RL78 port for IAR EWRL78
567     $<$<STREQUAL:${FREERTOS_PORT},IAR_RL78>:
568         IAR/RL78/port.c
569         IAR/RL78/portasm.s87>
570
571     # Renesas RX architecture ports for IAR EWRX
572     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX100>:
573         IAR/RX100/port.c
574         IAR/RX100/port_asm.s>
575
576     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX600>:
577         IAR/RX600/port.c
578         IAR/RX600/port_asm.s>
579
580     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX700_V3_DPFPU>:
581         IAR/RX700v3_DPFPU/port.c>
582
583     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX_V2>:
584         IAR/RXv2/port.c
585         IAR/RXv2/port_asm.s>
586
587     # Renesas (formerly NEC) V850ES port for IAR EWV850
588     $<$<STREQUAL:${FREERTOS_PORT},IAR_V850ES_FX3>:
589         IAR/V850ES/port.c
590         IAR/V850ES/portasm_Fx3.s85>
591
592     $<$<STREQUAL:${FREERTOS_PORT},IAR_V850ES_HX3>:
593         IAR/V850ES/port.c
594         IAR/V850ES/portasm_Hx2.s85>
595
596     # ARMv4T ARM7TDMI ports for IAR Embedded Workbench for ARM
597     $<$<STREQUAL:${FREERTOS_PORT},IAR_STR71X>:
598         IAR/STR71x/port.c
599         IAR/STR71x/portasm.s79>
600
601     $<$<STREQUAL:${FREERTOS_PORT},IAR_STR75X>:
602         IAR/STR75x/port.c
603         IAR/STR75x/portasm.s79>
604
605     $<$<STREQUAL:${FREERTOS_PORT},IAR_LPC2000>:
606         IAR/LPC2000/port.c
607         IAR/LPC2000/portasm.s79>
608
609     $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEL_SAM7S64>:
610         IAR/AtmelSAM7S64/port.c
611         IAR/AtmelSAM7S64/portasm.s79>
612
613     # ARMv5TE ARM926 ports for IAR Embedded Workbench for ARM
614     $<$<STREQUAL:${FREERTOS_PORT},IAR_STR91X>:
615         IAR/STR91x/port.c
616         IAR/STR91x/portasm.s79>
617
618     $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEL_SAM9XE>:
619         IAR/AtmelSAM9XE/port.c
620         IAR/AtmelSAM9XE/portasm.s79>
621
622     # ARM Cortex-M4F port for the MikroElektronika MikroC compiler
623     $<$<STREQUAL:${FREERTOS_PORT},MIKROC_ARM_CM4F>:
624         MikroC/ARM_CM4F/port.c>
625
626     # Microchip PIC18 8-bit MCU port for MPLAB XC8
627     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC18F>:
628         MPLAB/PIC18F/port.c>
629
630     # Microchip PIC24 16-bit MCU port for MPLAB XC16
631     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC24>:
632         MPLAB/PIC24_dsPIC/port.c
633         MPLAB/PIC24_dsPIC/portasm_PIC24.S> # TODO: What to do with portasm_dsPIC.S ?
634
635     # Microchip MIPS 32-Bit MCU ports for MPLAB XC32
636     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MEC14XX>:
637         MPLAB/PIC32MEC14xx/port.c
638         MPLAB/PIC32MEC14xx/port_asm.S>
639
640     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MX>:
641         MPLAB/PIC32MX/port.c
642         MPLAB/PIC32MX/port_asm.S>
643
644     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MZ>:
645         MPLAB/PIC32MZ/port.c
646         MPLAB/PIC32MZ/port_asm.S>
647
648     # Windows Simulator for Microsoft Visual C Compiler and MinGW GCC
649     $<$<STREQUAL:${FREERTOS_PORT},MSVC_MINGW>:
650         MSVC-MingW/port.c>
651
652     # 16 bit DOS ports for Open Watcom
653     $<$<STREQUAL:${FREERTOS_PORT},OWATCOM_16BIT_DOS_FLSH186>:
654         oWatcom/16BitDOS/common/portcomn.c
655         oWatcom/16BitDOS/Flsh186/port.c>
656
657     $<$<STREQUAL:${FREERTOS_PORT},OWATCOM_16BIT_DOS_PC>:
658         oWatcom/16BitDOS/common/portcomn.c
659         oWatcom/16BitDOS/PC/port.c>
660
661     $<$<STREQUAL:${FREERTOS_PORT},PARADIGM_TERN_EE_LARGE>:
662         Paradigm/Tern_EE/large_untested/port.c>
663
664     $<$<STREQUAL:${FREERTOS_PORT},PARADIGM_TERN_EE_SMALL>:
665         Paradigm/Tern_EE/small/port.c>
666
667     # Renesas RX mcu ports for Renesas CC-RX
668     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX100>:
669         Renesas/RX100/port.c
670         Renesas/RX100/port_asm.src>
671
672     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX200>:
673         Renesas/RX200/port.c
674         Renesas/RX200/port_asm.src>
675
676     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX600>:
677         Renesas/RX600/port.c
678         Renesas/RX600/port_asm.src>
679
680     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX600_V2>:
681         Renesas/RX600v2/port.c
682         Renesas/RX600v2/port_asm.src>
683
684     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX700_V3_DPFPU>:
685         Renesas/RX700v3_DPFPU/port.c
686         Renesas/RX700v3_DPFPU/port_asm.src>
687
688     # Renesas (formerly  Hitach) SHA2 SuperH port for the Renesas SH C Compiler
689     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_SH2A_FPU>:
690         Renesas/SH2A_FPU/port.c
691         Renesas/SH2A_FPU/portasm.src>
692
693     # Texas Instruments MSP430 port for Rowley CrossWorks
694     $<$<STREQUAL:${FREERTOS_PORT},ROWLEY_MSP430F449>:
695         Rowley/MSP430F449/port.c
696         Rowley/MSP430F449/portext.asm>
697
698     # ARMv7-A Cortex-A9 port for ARM RVDS / armcc
699     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CA9>:
700         RVDS/ARM_CA9/port.c
701         RVDS/ARM_CA9/portASM.s>
702
703     # ARMv6-M port for ARM RVDS / armcc
704     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM0>:
705         RVDS/ARM_CM0/port.c>
706
707     # ARMv7-M port for ARM RVDS / armcc
708     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM3>:
709         RVDS/ARM_CM3/port.c>
710
711     # ARMv7E-M ports for ARM RVDS / armcc
712     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM4_MPU>:
713         RVDS/ARM_CM4_MPU/port.c
714         RVDS/ARM_CM4_MPU/mpu_wrappers_v2_asm.c>
715
716     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM4F>:
717         RVDS/ARM_CM4F/port.c>
718
719     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM7>:
720         RVDS/ARM_CM7/r0p1/port.c>
721
722     # ARMv4T / ARM7TDMI LPC21XX port for ARM RVDS / armcc
723     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM7_LPC21XX>:
724         RVDS/ARM7_LPC21xx/port.c
725         RVDS/ARM7_LPC21xx/portASM.s>
726
727     # Cygnal c8051 port for SDCC (Small Device C Compiler)
728     $<$<STREQUAL:${FREERTOS_PORT},SDCC_CYGNAL>:
729         SDCC/Cygnal/port.c>
730
731     # Infineon (formerly Fujitsu, Spansion, Cypress) MB9x ports for Softune C Compiler
732     $<$<STREQUAL:${FREERTOS_PORT},SOFTUNE_MB91460>:
733         Softune/MB91460/__STD_LIB_sbrk.c
734         Softune/MB91460/port.c>
735
736     $<$<STREQUAL:${FREERTOS_PORT},SOFTUNE_MB96340>:
737         Softune/MB96340/__STD_LIB_sbrk.c
738         Softune/MB96340/port.c>
739
740     # ARMv7E-M (Cortex-M4F) port for TASKING VX-toolset for ARM
741     $<$<STREQUAL:${FREERTOS_PORT},TASKING_ARM_CM4F>:
742         Tasking/ARM_CM4F/port.c
743         Tasking/ARM_CM4F/port_asm.asm>
744
745     # Port for C-SKY T-HEAD CK802
746     $<$<STREQUAL:${FREERTOS_PORT},CDK_THEAD_CK802>:
747         ThirdParty/CDK/T-HEAD_CK802/port.c
748         ThirdParty/CDK/T-HEAD_CK802/portasm.S>
749
750     # Tensilica Xtensa port for XCC
751     $<$<STREQUAL:${FREERTOS_PORT},XCC_XTENSA>:
752         ThirdParty/XCC/Xtensa/port.c
753         ThirdParty/XCC/Xtensa/portasm.S
754         ThirdParty/XCC/Xtensa/portclib.c
755         ThirdParty/XCC/Xtensa/xtensa_context.S
756         ThirdParty/XCC/Xtensa/xtensa_init.c
757         ThirdParty/XCC/Xtensa/xtensa_intr_asm.S
758         ThirdParty/XCC/Xtensa/xtensa_intr.c
759         ThirdParty/XCC/Xtensa/xtensa_overlay_os_hook.c
760         ThirdParty/XCC/Xtensa/xtensa_vectors.S>
761
762     # Microchip PIC18 port for WIZ-C
763     $<$<STREQUAL:${FREERTOS_PORT},WIZC_PIC18>:
764         WizC/PIC18/port.c
765         WizC/PIC18/Drivers/Tick/isrTick.c
766         WizC/PIC18/Drivers/Tick/Tick.c>
767 )
768
769 if( FREERTOS_PORT MATCHES "GCC_ARM_CM(3|4)_MPU" OR
770     FREERTOS_PORT STREQUAL "IAR_ARM_CM4F_MPU" OR
771     FREERTOS_PORT STREQUAL "RVDS_ARM_CM4_MPU" OR
772     FREERTOS_PORT MATCHES "GCC_ARM_CM(23|33|55|85)_NTZ_NONSECURE" OR
773     FREERTOS_PORT MATCHES "GCC_ARM_CM(23|33|55|85)_NONSECURE" OR
774     FREERTOS_PORT MATCHES "GCC_ARM_CM(33|55|85)_TFM" OR
775     FREERTOS_PORT MATCHES "IAR_ARM_CM(23|33|55|85)_NTZ_NONSECURE" OR
776     FREERTOS_PORT MATCHES "IAR_ARM_CM(23|33|55|85)_NONSECURE" OR
777     FREERTOS_PORT MATCHES "IAR_ARM_CM(33|55|85)_TFM"
778 )
779     target_sources(freertos_kernel_port PRIVATE
780         Common/mpu_wrappers.c
781         Common/mpu_wrappers_v2.c
782     )
783 endif()
784
785 if (DEFINED FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG )
786
787     if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
788         message(FATAL_ERROR "ARMv8.1-M PACBTI support in the kernel is not yet enabled for GNU toolchain due to known issues.")
789     endif()
790
791     if(FREERTOS_PORT MATCHES ".*ARM_CM85")
792         if(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_STANDARD")
793             target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},ARMClang>:-mbranch-protection=standard>)
794             target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},IAR>:$<$<COMPILE_LANGUAGE:C,CXX>:--branch_protection=bti+pac-ret>>)
795             target_compile_definitions(freertos_config
796                 INTERFACE
797                     configENABLE_PAC=1
798                     configENABLE_BTI=1
799             )
800         elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF_BTI")
801             if(${CMAKE_C_COMPILER_ID} STREQUAL "ARMClang")
802                 target_compile_options(freertos_kernel_port
803                     PUBLIC
804                         -mbranch-protection=bti+pac-ret+leaf
805                 )
806                 target_compile_definitions(freertos_config
807                     INTERFACE
808                         configENABLE_PAC=1
809                         configENABLE_BTI=1
810                 )
811             elseif(${CMAKE_C_COMPILER_ID} STREQUAL "IAR")
812                 message(FATAL_ERROR "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF_BTI PACBTI option is not supported on IAR Compiler.")
813             endif()
814         elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_PACRET")
815             target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},ARMClang>:-mbranch-protection=pac-ret>)
816             target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},IAR>:$<$<COMPILE_LANGUAGE:C,CXX>:--branch_protection=pac-ret>>)
817             target_compile_definitions(freertos_config
818                 INTERFACE
819                     configENABLE_PAC=1
820             )
821         elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF")
822             if(${CMAKE_C_COMPILER_ID} STREQUAL "ARMClang")
823                 target_compile_options(freertos_kernel_port
824                     PUBLIC
825                         -mbranch-protection=pac-ret+leaf
826                 )
827                 target_compile_definitions(freertos_config
828                     INTERFACE
829                         configENABLE_PAC=1
830                 )
831             elseif(${CMAKE_C_COMPILER_ID} STREQUAL "IAR")
832                 message(FATAL_ERROR "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF PACBTI option is not supported on IAR Compiler.")
833             endif()
834         elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_BTI")
835             target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},ARMClang>:-mbranch-protection=bti>)
836             target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},IAR>:$<$<COMPILE_LANGUAGE:C,CXX>:--branch_protection=bti>>)
837             target_compile_definitions(freertos_config
838                 INTERFACE
839                     configENABLE_BTI=1
840             )
841         elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_NONE")
842             if(${CMAKE_C_COMPILER_ID} STREQUAL "ARMClang")
843                 target_compile_options(freertos_kernel_port
844                     PUBLIC
845                         -mbranch-protection=none
846                 )
847             endif()
848             target_compile_definitions(freertos_config
849                 INTERFACE
850                     configENABLE_PAC=0
851                     configENABLE_BTI=0
852             )
853         else()
854             message(FATAL_ERROR "Invalid FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG configuration, the supported configurations are
855             ARM_V_8_1_M_PACBTI_CONFIG_STANDARD,
856             ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF_BTI,
857             ARM_V_8_1_M_PACBTI_CONFIG_PACRET,
858             ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF,
859             ARM_V_8_1_M_PACBTI_CONFIG_BTI,
860             ARM_V_8_1_M_PACBTI_CONFIG_NONE
861             ")
862         endif()
863         if(NOT FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_NONE")
864             # The reason why `--library_security=pacbti-m` link option is defined for both `freertos_kernel_port`, and
865             # `freertos_kernel` targets even though `freertos_kernel_port` gets linked to `freertos_kernel` is that the
866             # `freertos_kernel_port` is an object library where its linker options don't propagate to the targets that
867             # link against it.
868             target_link_options(freertos_kernel_port
869                 PUBLIC
870                     --library_security=pacbti-m
871             )
872             target_link_options(freertos_kernel
873                 PUBLIC
874                     --library_security=pacbti-m
875             )
876         endif()
877     else()
878         message(FATAL_ERROR "FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG option is currently only supported on ARM Cortex-M85 FreeRTOS port.")
879     endif()
880 endif()
881
882 add_library(freertos_kernel_port_headers INTERFACE)
883
884 target_include_directories(freertos_kernel_port_headers INTERFACE
885     # TEMPLATE Port
886     $<$<STREQUAL:${FREERTOS_PORT},TEMPLATE>:${CMAKE_CURRENT_LIST_DIR}/template>
887
888         # 16-Bit DOS ports for BCC
889     $<$<STREQUAL:${FREERTOS_PORT},BCC_16BIT_DOS_FLSH186>:
890         ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/common
891         ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/Flsh186>
892
893     $<$<STREQUAL:${FREERTOS_PORT},BCC_16BIT_DOS_PC>:
894         ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/common
895         ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/PC>
896
897     # ARMv7-M port for Texas Instruments Code Composer Studio
898     $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/CCS/ARM_CM3>
899
900     # ARMv7E-M port for Texas Instruments Code Composer Studio
901     $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/CCS/ARM_CM4F>
902
903     # ARMv7-R port for Texas Instruments Code Composer Studio
904     $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CR4>:${CMAKE_CURRENT_LIST_DIR}/CCS/ARM_Cortex-R4>
905
906     # Texas Instruments MSP430 port for Texas Instruments Code Composer Studio
907     $<$<STREQUAL:${FREERTOS_PORT},CCS_MSP430X>:${CMAKE_CURRENT_LIST_DIR}/CCS/MSP430X>
908
909     # NXP (formerly Motorola, Freescale) Cold Fire and 68HCS12 ports for Code Warrior
910     $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_COLDFIRE_V1>:${CMAKE_CURRENT_LIST_DIR}/CodeWarrior/ColdFire_V1>
911     $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_COLDFIRE_V2>:${CMAKE_CURRENT_LIST_DIR}/CodeWarrior/ColdFire_V2>
912     $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_HCS12>:${CMAKE_CURRENT_LIST_DIR}/CodeWarrior/HCS12>
913
914     # ARMv7-A port for GCC
915     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CA9>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CA9>
916
917     # ARMv8-A ports for GCC
918     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_AARCH64>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_AARCH64>
919     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_AARCH64_SRE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_AARCH64_SRE>
920
921     # ARMv6-M port for GCC
922     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM0>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM0>
923
924     # ARMv6-M / Cortex-M0 Raspberry PI RP2040 port for GCC
925     $<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/RP2040/include>
926
927     # ARMv7-M ports for GCC
928     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM3>
929     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM3_MPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM3_MPU>
930
931     # ARMv7E-M ports for GCC
932     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM4_MPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM4_MPU>
933     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM4F>
934     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM7>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM7/r0p1>
935
936     # ARMv8-M ports for GCC
937     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM23/non_secure>
938     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM23/secure>
939     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM23_NTZ/non_secure>
940
941     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33/non_secure>
942     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33/secure>
943     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33_NTZ/non_secure>
944     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_TFM>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33_NTZ/non_secure>
945
946     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM35P/non_secure>
947     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM35P/secure>
948     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM35P_NTZ/non_secure>
949
950     # ARMv8.1-M ports for GCC
951     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55/non_secure>
952     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55/secure>
953     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55_NTZ/non_secure>
954     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_TFM>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55_NTZ/non_secure>
955
956     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85/non_secure>
957     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85/secure>
958     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85_NTZ/non_secure>
959     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_TFM>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85_NTZ/non_secure>
960
961     # ARMv7-R ports for GCC
962     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CR5>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CR5>
963     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CRX_MPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CRx_MPU>
964     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CRX_NOGIC>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CRx_No_GIC>
965
966     # ARMv4T ARM7TDMI ports for GCC
967     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_AT91FR40008>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_AT91FR40008>
968     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_AT91SAM7S>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_AT91SAM7S>
969     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_LPC2000>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_LPC2000>
970     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_LPC23XX>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_LPC23xx>
971     $<$<STREQUAL:${FREERTOS_PORT},GCC_STR75X>:${CMAKE_CURRENT_LIST_DIR}/GCC/STR75x>
972
973     # Microchip (formerly Ateml) AVR8 ports for GCC
974     $<$<STREQUAL:${FREERTOS_PORT},GCC_ATMEGA323>:${CMAKE_CURRENT_LIST_DIR}/GCC/ATMega323>
975     $<$<STREQUAL:${FREERTOS_PORT},GCC_ATMEGA>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/ATmega>
976     $<$<STREQUAL:${FREERTOS_PORT},GCC_AVRDX>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/Partner-Supported-Ports/GCC/AVR_AVRDx>
977     $<$<STREQUAL:${FREERTOS_PORT},GCC_AVR_MEGA0>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/Partner-Supported-Ports/GCC/AVR_Mega0>
978
979     # Microchip (formerly Ateml) AVR32 port for GCC
980     $<$<STREQUAL:${FREERTOS_PORT},GCC_AVR32_UC3>:${CMAKE_CURRENT_LIST_DIR}/GCC/AVR32_UC3>
981
982     # NXP (formerly Motorola, Freescale) Cold Fire and 68HCS12 ports for GCC
983     $<$<STREQUAL:${FREERTOS_PORT},GCC_COLDFIRE_V2>:${CMAKE_CURRENT_LIST_DIR}/GCC/ColdFire_V2>
984     $<$<STREQUAL:${FREERTOS_PORT},GCC_HCS12>:${CMAKE_CURRENT_LIST_DIR}/GCC/HCS12>
985
986     # Cortus APS3 soft core port for GCC
987     $<$<STREQUAL:${FREERTOS_PORT},GCC_CORTUS_APS3>:${CMAKE_CURRENT_LIST_DIR}/GCC/CORTUS_APS3>
988
989     # Renesas (formerly Hitach) H8S port for GCC
990     $<$<STREQUAL:${FREERTOS_PORT},GCC_H8S2329>:${CMAKE_CURRENT_LIST_DIR}/GCC/H8S2329>
991
992     # x86 / IA32 flat memory model port for GCC
993     $<$<STREQUAL:${FREERTOS_PORT},GCC_IA32_FLAT>:${CMAKE_CURRENT_LIST_DIR}/GCC/IA32_flat>
994
995     # Intel (formerly Altera) NIOS II soft core port for GCC
996     $<$<STREQUAL:${FREERTOS_PORT},GCC_NIOSII>:${CMAKE_CURRENT_LIST_DIR}/GCC/NiosII>
997
998     # Texas Instruments MSP430 port for GCC
999     $<$<STREQUAL:${FREERTOS_PORT},GCC_MSP430F449>:${CMAKE_CURRENT_LIST_DIR}/GCC/MSP430F449>
1000
1001     # Xilinx MicroBlaze soft core ports for GCC
1002     $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE>:${CMAKE_CURRENT_LIST_DIR}/GCC/MicroBlaze>
1003     $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE_V8>:${CMAKE_CURRENT_LIST_DIR}/GCC/MicroBlazeV8>
1004     $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE_V9>:${CMAKE_CURRENT_LIST_DIR}/GCC/MicroBlazeV9>
1005
1006     # Xilinx PCC4XX soft core ports for GCC
1007     $<$<STREQUAL:${FREERTOS_PORT},GCC_PPC405_XILINX>:${CMAKE_CURRENT_LIST_DIR}/GCC/PPC405_Xilinx>
1008     $<$<STREQUAL:${FREERTOS_PORT},GCC_PPC440_XILINX>:${CMAKE_CURRENT_LIST_DIR}/GCC/PPC440_Xilinx>
1009
1010     # RISC-V architecture ports for GCC
1011     $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V>:
1012         ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V
1013         ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V/chip_specific_extensions/RISCV_MTIME_CLINT_no_extensions>
1014
1015     $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V_PULPINO_VEGA_RV32M1RM>:
1016         ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V
1017         ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V/chip_specific_extensions/Pulpino_Vega_RV32M1RM>
1018
1019     $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V_GENERIC>:
1020         ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V
1021         ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V/chip_specific_extensions/${FREERTOS_RISCV_EXTENSION}>
1022
1023     # Renesas RL78 port for GCC
1024     $<$<STREQUAL:${FREERTOS_PORT},GCC_RL78>:${CMAKE_CURRENT_LIST_DIR}/GCC/RL78>
1025
1026     # Renesas RX architecture ports for GCC
1027     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX100>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX100>
1028     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX200>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX200>
1029     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX600>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX600>
1030     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX600_V2>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX600v2>
1031     $<$<STREQUAL:${FREERTOS_PORT},GCC_RX700_V3_DPFPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX700v3_DPFPU>
1032
1033     # Infineon TriCore 1782 port for GCC
1034     $<$<STREQUAL:${FREERTOS_PORT},GCC_TRICORE_1782>:${CMAKE_CURRENT_LIST_DIR}/GCC/TriCore_1782>
1035
1036     # Synopsys ARC architecture ports for GCC
1037     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARC_EM_HS>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/ARC_EM_HS>
1038     $<$<STREQUAL:${FREERTOS_PORT},GCC_ARC_V1>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/ARC_v1>
1039
1040     # Posix Simulator port for GCC
1041     $<$<STREQUAL:${FREERTOS_PORT},GCC_POSIX>:
1042         ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Posix
1043         ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Posix/utils>
1044
1045     # Xtensa LX / Espressif ESP32 port for GCC
1046     $<$<STREQUAL:${FREERTOS_PORT},GCC_XTENSA_ESP32>:
1047         ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Xtensa_ESP32
1048         ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Xtensa_ESP32/include>
1049
1050     # Renesas (formerly NEC) 78K port for IAR EW78K
1051     $<$<STREQUAL:${FREERTOS_PORT},IAR_78K0K>:${CMAKE_CURRENT_LIST_DIR}/IAR/78K0R>
1052
1053     # ARMv7-A ports for IAR EWARM
1054     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CA5_NOGIC>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CA5_No_GIC>
1055     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CA9>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CA9>
1056
1057     # ARMv6-M port for IAR EWARM
1058     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM0>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM0>
1059
1060     # ARMv7-M port for IAR EWARM
1061     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM3>
1062
1063     # ARMv7E-M ports for IAR EWARM
1064     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM4F>
1065     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM4F_MPU>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM4F_MPU>
1066     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM7>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM7/r0p1>
1067
1068     # ARMv8-M Ports for IAR EWARM
1069     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM23/non_secure>
1070     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM23/secure>
1071     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM23_NTZ/non_secure>
1072
1073     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33/non_secure>
1074     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33/secure>
1075     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33_NTZ/non_secure>
1076     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_TFM>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33_NTZ/non_secure>
1077
1078     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM35P/non_secure>
1079     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM35P/secure>
1080     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM35P_NTZ/non_secure>
1081
1082     # ARMv8.1-M ports for IAR EWARM
1083     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55/non_secure>
1084     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55/secure>
1085     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55_NTZ/non_secure>
1086     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_TFM>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55_NTZ/non_secure>
1087
1088     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85/non_secure>
1089     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85/secure>
1090     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85_NTZ/non_secure>
1091     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_TFM>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85_NTZ/non_secure>
1092
1093     # ARMv7-R Ports for IAR EWARM
1094     $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CRX_NOGIC>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CRx_No_GIC>
1095
1096     # ARMv4T ARM7TDMI ports for IAR Embedded Workbench for ARM
1097     $<$<STREQUAL:${FREERTOS_PORT},IAR_STR71X>:${CMAKE_CURRENT_LIST_DIR}/IAR/STR71x>
1098     $<$<STREQUAL:${FREERTOS_PORT},IAR_STR75X>:${CMAKE_CURRENT_LIST_DIR}/IAR/STR75x>
1099     $<$<STREQUAL:${FREERTOS_PORT},IAR_LPC2000>:${CMAKE_CURRENT_LIST_DIR}/IAR/LPC2000>
1100     $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEL_SAM7S64>:${CMAKE_CURRENT_LIST_DIR}/IAR/AtmelSAM7S64>
1101
1102     # ARMv5TE ARM926 ports for IAR Embedded Workbench for ARM
1103     $<$<STREQUAL:${FREERTOS_PORT},IAR_STR91X>:${CMAKE_CURRENT_LIST_DIR}/IAR/STR91x>
1104     $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEL_SAM9XE>:${CMAKE_CURRENT_LIST_DIR}/IAR/AtmelSAM9XE>
1105
1106     # Microchip (formerly Atmel) AVR8 ports for IAR EWAVR
1107     $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEGA323>:${CMAKE_CURRENT_LIST_DIR}/IAR/ATMega323>
1108     $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR_AVRDX>:${CMAKE_CURRENT_LIST_DIR}/IAR/AVR_AVRDx>
1109     $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR_MEGA0>:${CMAKE_CURRENT_LIST_DIR}/IAR/AVR_Mega0>
1110
1111     # Microchip (formerly Atmel) AVR32 port for IAR Embedded Workbench for AVR32
1112     $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR32_UC3>:${CMAKE_CURRENT_LIST_DIR}/IAR/AVR32_UC3>
1113
1114     # Texas Instruments MSP430 ports for IAR Embedded Workbench for MSP430
1115     $<$<STREQUAL:${FREERTOS_PORT},IAR_MSP430>:${CMAKE_CURRENT_LIST_DIR}/IAR/MSP430>
1116     $<$<STREQUAL:${FREERTOS_PORT},IAR_MSP430X>:${CMAKE_CURRENT_LIST_DIR}/IAR/MSP430X>
1117
1118     # RISC-V architecture port for IAR Embedded Workbench for RISC-V
1119     $<$<STREQUAL:${FREERTOS_PORT},IAR_RISC_V>:
1120         ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V
1121         ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions>
1122
1123     $<$<STREQUAL:${FREERTOS_PORT},IAR_RISC_V_GENERIC>:
1124         ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V
1125         ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V/chip_specific_extensions/${FREERTOS_RISCV_EXTENSION}>
1126
1127     # Renesas RL78 port for IAR EWRL78
1128     $<$<STREQUAL:${FREERTOS_PORT},IAR_RL78>:${CMAKE_CURRENT_LIST_DIR}/IAR/RL78>
1129
1130     # Renesas RX architecture ports for IAR EWRX
1131     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX100>:${CMAKE_CURRENT_LIST_DIR}/IAR/RX100>
1132     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX600>:${CMAKE_CURRENT_LIST_DIR}/IAR/RX600>
1133     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX700_V3_DPFPU>:${CMAKE_CURRENT_LIST_DIR}/IAR/RX700v3_DPFPU>
1134     $<$<STREQUAL:${FREERTOS_PORT},IAR_RX_V2>:${CMAKE_CURRENT_LIST_DIR}/IAR/RXv2>
1135
1136     # Renesas (formerly NEC) V850ES port for IAR EWV850
1137     $<$<STREQUAL:${FREERTOS_PORT},IAR_V850ES_FX3>:${CMAKE_CURRENT_LIST_DIR}/IAR/V850ES>
1138     $<$<STREQUAL:${FREERTOS_PORT},IAR_V850ES_HX3>:${CMAKE_CURRENT_LIST_DIR}/IAR/V850ES>
1139
1140     # ARM Cortex-M4F port for the MikroElektronika MikroC compiler
1141     $<$<STREQUAL:${FREERTOS_PORT},MIKROC_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/MikroC/ARM_CM4F>
1142
1143     # Microchip PIC18 8-bit MCU port for MPLAB XC8
1144     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC18F>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC18F>
1145
1146     # Microchip PIC24 16-bit MCU port for MPLAB XC16
1147     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC24>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC24_dsPIC>
1148
1149     # Microchip MIPS 32-Bit MCU ports for MPLAB XC32
1150     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MEC14XX>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC32MEC14xx>
1151     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MX>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC32MX>
1152     $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MZ>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC32MZ>
1153
1154     # Windows Simulator for Microsoft Visual C Compiler and MinGW GCC
1155     $<$<STREQUAL:${FREERTOS_PORT},MSVC_MINGW>:${CMAKE_CURRENT_LIST_DIR}/MSVC-MingW>
1156
1157     # 16 bit DOS ports for Open Watcom
1158     $<$<STREQUAL:${FREERTOS_PORT},OWATCOM_16BIT_DOS_FLSH186>:
1159         ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/common
1160         ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/Flsh186>
1161     $<$<STREQUAL:${FREERTOS_PORT},OWATCOM_16BIT_DOS_PC>:
1162         ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/common
1163         ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/PC>
1164
1165     $<$<STREQUAL:${FREERTOS_PORT},PARADIGM_TERN_EE_LARGE>:${CMAKE_CURRENT_LIST_DIR}/Paradigm/Tern_EE/large_untested>
1166     $<$<STREQUAL:${FREERTOS_PORT},PARADIGM_TERN_EE_SMALL>:${CMAKE_CURRENT_LIST_DIR}/Paradigm/Tern_EE/small>
1167
1168     # Renesas RX mcu ports for Renesas CC-RX
1169     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX100>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX100>
1170     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX200>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX200>
1171     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX600>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX600>
1172     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX600_V2>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX600v2>
1173     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX700_V3_DPFPU>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX700v3_DPFPU>
1174
1175     # Renesas (formerly  Hitach) SHA2 SuperH port for the Renesas SH C Compiler
1176     $<$<STREQUAL:${FREERTOS_PORT},RENESAS_SH2A_FPU>:${CMAKE_CURRENT_LIST_DIR}/Renesas/SH2A_FPU>
1177
1178     # Texas Instruments MSP430 port for Rowley CrossWorks
1179     $<$<STREQUAL:${FREERTOS_PORT},ROWLEY_MSP430F449>:${CMAKE_CURRENT_LIST_DIR}/Rowley/MSP430F449>
1180
1181     # ARMv7-A Cortex-A9 port for ARM RVDS / armcc
1182     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CA9>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CA9>
1183
1184     # ARMv6-M port for ARM RVDS / armcc
1185     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM0>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM0>
1186
1187     # ARMv7-M port for ARM RVDS / armcc
1188     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM3>
1189
1190     # ARMv7E-M ports for ARM RVDS / armcc
1191     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM4_MPU>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM4_MPU>
1192     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM4F>
1193     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM7>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM7/r0p1>
1194
1195     # ARMv4T / ARM7TDMI LPC21XX port for ARM RVDS / armcc
1196     $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM7_LPC21XX>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM7_LPC21xx>
1197
1198     # Cygnal c8051 port for SDCC (Small Device C Compiler)
1199     $<$<STREQUAL:${FREERTOS_PORT},SDCC_CYGNAL>:${CMAKE_CURRENT_LIST_DIR}/SDCC/Cygnal>
1200
1201     # Infineon (formerly Fujitsu, Spansion, Cypress) MB9x ports for Softune C Compiler
1202     $<$<STREQUAL:${FREERTOS_PORT},SOFTUNE_MB91460>:${CMAKE_CURRENT_LIST_DIR}/Softune/MB91460>
1203     $<$<STREQUAL:${FREERTOS_PORT},SOFTUNE_MB96340>:${CMAKE_CURRENT_LIST_DIR}/Softune/MB96340>
1204
1205     # ARMv7E-M (Cortex-M4F) port for TASKING VX-toolset for ARM
1206     $<$<STREQUAL:${FREERTOS_PORT},TASKING_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/Tasking/ARM_CM4F>
1207
1208     # Port for C-SKY T-HEAD CK802
1209     $<$<STREQUAL:${FREERTOS_PORT},CDK_THEAD_CK802>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/CDK/T-HEAD_CK802>
1210
1211     # Tensilica Xtensa port for XCC
1212     $<$<STREQUAL:${FREERTOS_PORT},XCC_XTENSA>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/XCC/Xtensa>
1213
1214     # Microchip PIC18 port for WIZ-C
1215     $<$<STREQUAL:${FREERTOS_PORT},WIZC_PIC18>:${CMAKE_CURRENT_LIST_DIR}/WizC/PIC18>
1216 )
1217
1218 target_link_libraries(freertos_kernel_port_headers
1219     INTERFACE
1220         $<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:hardware_sync>
1221 )
1222
1223 if(FREERTOS_PORT STREQUAL GCC_POSIX)
1224     find_package(Threads REQUIRED)
1225 endif()
1226
1227 target_link_libraries(freertos_kernel_port
1228     PUBLIC
1229         $<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:pico_base_headers>
1230         $<$<STREQUAL:${FREERTOS_PORT},GCC_XTENSA_ESP32>:idf::esp32>
1231         freertos_kernel_port_headers
1232     PRIVATE
1233         freertos_kernel_include
1234         $<$<STREQUAL:${FREERTOS_PORT},GCC_POSIX>:Threads::Threads>
1235         "$<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:hardware_clocks;hardware_exception;pico_multicore>"
1236         $<$<STREQUAL:${FREERTOS_PORT},MSVC_MINGW>:winmm> # Windows library which implements timers
1237 )