1if( FREERTOS_PORT STREQUAL "GCC_RISC_V_GENERIC" )
2    include( GCC/RISC-V/chip_extensions.cmake )
3endif()
4
5if( FREERTOS_PORT STREQUAL "IAR_RISC_V_GENERIC" )
6    include( IAR/RISC-V/chip_extensions.cmake )
7endif()
8
9# FreeRTOS internal cmake file. Do not use it in user top-level project
10
11if (FREERTOS_PORT STREQUAL "A_CUSTOM_PORT")
12    message(STATUS "Using a custom FREERTOS_PORT.")
13    return()
14endif()
15
16# FreeRTOS internal cmake file. Do not use it in user top-level project
17
18add_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
769if( 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 STREQUAL "GCC_ARM_CRX_MPU" OR
773    FREERTOS_PORT MATCHES "GCC_ARM_CM(23|33|55|85)_NTZ_NONSECURE" OR
774    FREERTOS_PORT MATCHES "GCC_ARM_CM(23|33|55|85)_NONSECURE" OR
775    FREERTOS_PORT MATCHES "GCC_ARM_CM(33|55|85)_TFM" OR
776    FREERTOS_PORT MATCHES "IAR_ARM_CM(23|33|55|85)_NTZ_NONSECURE" OR
777    FREERTOS_PORT MATCHES "IAR_ARM_CM(23|33|55|85)_NONSECURE" OR
778    FREERTOS_PORT MATCHES "IAR_ARM_CM(33|55|85)_TFM"
779)
780    target_sources(freertos_kernel_port PRIVATE
781        Common/mpu_wrappers.c
782        Common/mpu_wrappers_v2.c
783    )
784endif()
785
786if (DEFINED FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG )
787
788    if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
789        message(FATAL_ERROR "ARMv8.1-M PACBTI support in the kernel is not yet enabled for GNU toolchain due to known issues.")
790    endif()
791
792    if(FREERTOS_PORT MATCHES ".*ARM_CM85")
793        if(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_STANDARD")
794            target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},ARMClang>:-mbranch-protection=standard>)
795            target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},IAR>:$<$<COMPILE_LANGUAGE:C,CXX>:--branch_protection=bti+pac-ret>>)
796            target_compile_definitions(freertos_config
797                INTERFACE
798                    configENABLE_PAC=1
799                    configENABLE_BTI=1
800            )
801        elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF_BTI")
802            if(${CMAKE_C_COMPILER_ID} STREQUAL "ARMClang")
803                target_compile_options(freertos_kernel_port
804                    PUBLIC
805                        -mbranch-protection=bti+pac-ret+leaf
806                )
807                target_compile_definitions(freertos_config
808                    INTERFACE
809                        configENABLE_PAC=1
810                        configENABLE_BTI=1
811                )
812            elseif(${CMAKE_C_COMPILER_ID} STREQUAL "IAR")
813                message(FATAL_ERROR "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF_BTI PACBTI option is not supported on IAR Compiler.")
814            endif()
815        elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_PACRET")
816            target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},ARMClang>:-mbranch-protection=pac-ret>)
817            target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},IAR>:$<$<COMPILE_LANGUAGE:C,CXX>:--branch_protection=pac-ret>>)
818            target_compile_definitions(freertos_config
819                INTERFACE
820                    configENABLE_PAC=1
821            )
822        elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF")
823            if(${CMAKE_C_COMPILER_ID} STREQUAL "ARMClang")
824                target_compile_options(freertos_kernel_port
825                    PUBLIC
826                        -mbranch-protection=pac-ret+leaf
827                )
828                target_compile_definitions(freertos_config
829                    INTERFACE
830                        configENABLE_PAC=1
831                )
832            elseif(${CMAKE_C_COMPILER_ID} STREQUAL "IAR")
833                message(FATAL_ERROR "ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF PACBTI option is not supported on IAR Compiler.")
834            endif()
835        elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_BTI")
836            target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},ARMClang>:-mbranch-protection=bti>)
837            target_compile_options(freertos_kernel_port PUBLIC $<$<STREQUAL:${CMAKE_C_COMPILER_ID},IAR>:$<$<COMPILE_LANGUAGE:C,CXX>:--branch_protection=bti>>)
838            target_compile_definitions(freertos_config
839                INTERFACE
840                    configENABLE_BTI=1
841            )
842        elseif(FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_NONE")
843            if(${CMAKE_C_COMPILER_ID} STREQUAL "ARMClang")
844                target_compile_options(freertos_kernel_port
845                    PUBLIC
846                        -mbranch-protection=none
847                )
848            endif()
849            target_compile_definitions(freertos_config
850                INTERFACE
851                    configENABLE_PAC=0
852                    configENABLE_BTI=0
853            )
854        else()
855            message(FATAL_ERROR "Invalid FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG configuration, the supported configurations are
856            ARM_V_8_1_M_PACBTI_CONFIG_STANDARD,
857            ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF_BTI,
858            ARM_V_8_1_M_PACBTI_CONFIG_PACRET,
859            ARM_V_8_1_M_PACBTI_CONFIG_PACRET_LEAF,
860            ARM_V_8_1_M_PACBTI_CONFIG_BTI,
861            ARM_V_8_1_M_PACBTI_CONFIG_NONE
862            ")
863        endif()
864        if(NOT FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG STREQUAL "ARM_V_8_1_M_PACBTI_CONFIG_NONE")
865            # The reason why `--library_security=pacbti-m` link option is defined for both `freertos_kernel_port`, and
866            # `freertos_kernel` targets even though `freertos_kernel_port` gets linked to `freertos_kernel` is that the
867            # `freertos_kernel_port` is an object library where its linker options don't propagate to the targets that
868            # link against it.
869            target_link_options(freertos_kernel_port
870                PUBLIC
871                    --library_security=pacbti-m
872            )
873            target_link_options(freertos_kernel
874                PUBLIC
875                    --library_security=pacbti-m
876            )
877        endif()
878    else()
879        message(FATAL_ERROR "FREERTOS_ARM_V_8_1_M_PACBTI_CONFIG option is currently only supported on ARM Cortex-M85 FreeRTOS port.")
880    endif()
881endif()
882
883add_library(freertos_kernel_port_headers INTERFACE)
884
885target_include_directories(freertos_kernel_port_headers INTERFACE
886    # TEMPLATE Port
887    $<$<STREQUAL:${FREERTOS_PORT},TEMPLATE>:${CMAKE_CURRENT_LIST_DIR}/template>
888
889        # 16-Bit DOS ports for BCC
890    $<$<STREQUAL:${FREERTOS_PORT},BCC_16BIT_DOS_FLSH186>:
891        ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/common
892        ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/Flsh186>
893
894    $<$<STREQUAL:${FREERTOS_PORT},BCC_16BIT_DOS_PC>:
895        ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/common
896        ${CMAKE_CURRENT_LIST_DIR}/BCC/16BitDOS/PC>
897
898    # ARMv7-M port for Texas Instruments Code Composer Studio
899    $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/CCS/ARM_CM3>
900
901    # ARMv7E-M port for Texas Instruments Code Composer Studio
902    $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/CCS/ARM_CM4F>
903
904    # ARMv7-R port for Texas Instruments Code Composer Studio
905    $<$<STREQUAL:${FREERTOS_PORT},CCS_ARM_CR4>:${CMAKE_CURRENT_LIST_DIR}/CCS/ARM_Cortex-R4>
906
907    # Texas Instruments MSP430 port for Texas Instruments Code Composer Studio
908    $<$<STREQUAL:${FREERTOS_PORT},CCS_MSP430X>:${CMAKE_CURRENT_LIST_DIR}/CCS/MSP430X>
909
910    # NXP (formerly Motorola, Freescale) Cold Fire and 68HCS12 ports for Code Warrior
911    $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_COLDFIRE_V1>:${CMAKE_CURRENT_LIST_DIR}/CodeWarrior/ColdFire_V1>
912    $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_COLDFIRE_V2>:${CMAKE_CURRENT_LIST_DIR}/CodeWarrior/ColdFire_V2>
913    $<$<STREQUAL:${FREERTOS_PORT},CODEWARRIOR_HCS12>:${CMAKE_CURRENT_LIST_DIR}/CodeWarrior/HCS12>
914
915    # ARMv7-A port for GCC
916    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CA9>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CA9>
917
918    # ARMv8-A ports for GCC
919    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_AARCH64>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_AARCH64>
920    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_AARCH64_SRE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_AARCH64_SRE>
921
922    # ARMv6-M port for GCC
923    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM0>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM0>
924
925    # ARMv6-M / Cortex-M0 Raspberry PI RP2040 port for GCC
926    $<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/RP2040/include>
927
928    # ARMv7-M ports for GCC
929    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM3>
930    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM3_MPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM3_MPU>
931
932    # ARMv7E-M ports for GCC
933    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM4_MPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM4_MPU>
934    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM4F>
935    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM7>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM7/r0p1>
936
937    # ARMv8-M ports for GCC
938    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM23/non_secure>
939    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM23/secure>
940    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM23_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM23_NTZ/non_secure>
941
942    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33/non_secure>
943    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33/secure>
944    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33_NTZ/non_secure>
945    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM33_TFM>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM33_NTZ/non_secure>
946
947    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM35P/non_secure>
948    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM35P/secure>
949    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM35P_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM35P_NTZ/non_secure>
950
951    # ARMv8.1-M ports for GCC
952    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55/non_secure>
953    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55/secure>
954    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55_NTZ/non_secure>
955    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM55_TFM>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM55_NTZ/non_secure>
956
957    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85/non_secure>
958    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_SECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85/secure>
959    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85_NTZ/non_secure>
960    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CM85_TFM>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CM85_NTZ/non_secure>
961
962    # ARMv7-R ports for GCC
963    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CR5>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CR5>
964    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CRX_MPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CRx_MPU>
965    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM_CRX_NOGIC>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM_CRx_No_GIC>
966
967    # ARMv4T ARM7TDMI ports for GCC
968    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_AT91FR40008>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_AT91FR40008>
969    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_AT91SAM7S>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_AT91SAM7S>
970    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_LPC2000>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_LPC2000>
971    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARM7_LPC23XX>:${CMAKE_CURRENT_LIST_DIR}/GCC/ARM7_LPC23xx>
972    $<$<STREQUAL:${FREERTOS_PORT},GCC_STR75X>:${CMAKE_CURRENT_LIST_DIR}/GCC/STR75x>
973
974    # Microchip (formerly Ateml) AVR8 ports for GCC
975    $<$<STREQUAL:${FREERTOS_PORT},GCC_ATMEGA323>:${CMAKE_CURRENT_LIST_DIR}/GCC/ATMega323>
976    $<$<STREQUAL:${FREERTOS_PORT},GCC_ATMEGA>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/ATmega>
977    $<$<STREQUAL:${FREERTOS_PORT},GCC_AVRDX>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/Partner-Supported-Ports/GCC/AVR_AVRDx>
978    $<$<STREQUAL:${FREERTOS_PORT},GCC_AVR_MEGA0>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/Partner-Supported-Ports/GCC/AVR_Mega0>
979
980    # Microchip (formerly Ateml) AVR32 port for GCC
981    $<$<STREQUAL:${FREERTOS_PORT},GCC_AVR32_UC3>:${CMAKE_CURRENT_LIST_DIR}/GCC/AVR32_UC3>
982
983    # NXP (formerly Motorola, Freescale) Cold Fire and 68HCS12 ports for GCC
984    $<$<STREQUAL:${FREERTOS_PORT},GCC_COLDFIRE_V2>:${CMAKE_CURRENT_LIST_DIR}/GCC/ColdFire_V2>
985    $<$<STREQUAL:${FREERTOS_PORT},GCC_HCS12>:${CMAKE_CURRENT_LIST_DIR}/GCC/HCS12>
986
987    # Cortus APS3 soft core port for GCC
988    $<$<STREQUAL:${FREERTOS_PORT},GCC_CORTUS_APS3>:${CMAKE_CURRENT_LIST_DIR}/GCC/CORTUS_APS3>
989
990    # Renesas (formerly Hitach) H8S port for GCC
991    $<$<STREQUAL:${FREERTOS_PORT},GCC_H8S2329>:${CMAKE_CURRENT_LIST_DIR}/GCC/H8S2329>
992
993    # x86 / IA32 flat memory model port for GCC
994    $<$<STREQUAL:${FREERTOS_PORT},GCC_IA32_FLAT>:${CMAKE_CURRENT_LIST_DIR}/GCC/IA32_flat>
995
996    # Intel (formerly Altera) NIOS II soft core port for GCC
997    $<$<STREQUAL:${FREERTOS_PORT},GCC_NIOSII>:${CMAKE_CURRENT_LIST_DIR}/GCC/NiosII>
998
999    # Texas Instruments MSP430 port for GCC
1000    $<$<STREQUAL:${FREERTOS_PORT},GCC_MSP430F449>:${CMAKE_CURRENT_LIST_DIR}/GCC/MSP430F449>
1001
1002    # Xilinx MicroBlaze soft core ports for GCC
1003    $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE>:${CMAKE_CURRENT_LIST_DIR}/GCC/MicroBlaze>
1004    $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE_V8>:${CMAKE_CURRENT_LIST_DIR}/GCC/MicroBlazeV8>
1005    $<$<STREQUAL:${FREERTOS_PORT},GCC_MICROBLAZE_V9>:${CMAKE_CURRENT_LIST_DIR}/GCC/MicroBlazeV9>
1006
1007    # Xilinx PCC4XX soft core ports for GCC
1008    $<$<STREQUAL:${FREERTOS_PORT},GCC_PPC405_XILINX>:${CMAKE_CURRENT_LIST_DIR}/GCC/PPC405_Xilinx>
1009    $<$<STREQUAL:${FREERTOS_PORT},GCC_PPC440_XILINX>:${CMAKE_CURRENT_LIST_DIR}/GCC/PPC440_Xilinx>
1010
1011    # RISC-V architecture ports for GCC
1012    $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V>:
1013        ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V
1014        ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V/chip_specific_extensions/RISCV_MTIME_CLINT_no_extensions>
1015
1016    $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V_PULPINO_VEGA_RV32M1RM>:
1017        ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V
1018        ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V/chip_specific_extensions/Pulpino_Vega_RV32M1RM>
1019
1020    $<$<STREQUAL:${FREERTOS_PORT},GCC_RISC_V_GENERIC>:
1021        ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V
1022        ${CMAKE_CURRENT_LIST_DIR}/GCC/RISC-V/chip_specific_extensions/${FREERTOS_RISCV_EXTENSION}>
1023
1024    # Renesas RL78 port for GCC
1025    $<$<STREQUAL:${FREERTOS_PORT},GCC_RL78>:${CMAKE_CURRENT_LIST_DIR}/GCC/RL78>
1026
1027    # Renesas RX architecture ports for GCC
1028    $<$<STREQUAL:${FREERTOS_PORT},GCC_RX100>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX100>
1029    $<$<STREQUAL:${FREERTOS_PORT},GCC_RX200>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX200>
1030    $<$<STREQUAL:${FREERTOS_PORT},GCC_RX600>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX600>
1031    $<$<STREQUAL:${FREERTOS_PORT},GCC_RX600_V2>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX600v2>
1032    $<$<STREQUAL:${FREERTOS_PORT},GCC_RX700_V3_DPFPU>:${CMAKE_CURRENT_LIST_DIR}/GCC/RX700v3_DPFPU>
1033
1034    # Infineon TriCore 1782 port for GCC
1035    $<$<STREQUAL:${FREERTOS_PORT},GCC_TRICORE_1782>:${CMAKE_CURRENT_LIST_DIR}/GCC/TriCore_1782>
1036
1037    # Synopsys ARC architecture ports for GCC
1038    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARC_EM_HS>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/ARC_EM_HS>
1039    $<$<STREQUAL:${FREERTOS_PORT},GCC_ARC_V1>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/ARC_v1>
1040
1041    # Posix Simulator port for GCC
1042    $<$<STREQUAL:${FREERTOS_PORT},GCC_POSIX>:
1043        ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Posix
1044        ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Posix/utils>
1045
1046    # Xtensa LX / Espressif ESP32 port for GCC
1047    $<$<STREQUAL:${FREERTOS_PORT},GCC_XTENSA_ESP32>:
1048        ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Xtensa_ESP32
1049        ${CMAKE_CURRENT_LIST_DIR}/ThirdParty/GCC/Xtensa_ESP32/include>
1050
1051    # Renesas (formerly NEC) 78K port for IAR EW78K
1052    $<$<STREQUAL:${FREERTOS_PORT},IAR_78K0K>:${CMAKE_CURRENT_LIST_DIR}/IAR/78K0R>
1053
1054    # ARMv7-A ports for IAR EWARM
1055    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CA5_NOGIC>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CA5_No_GIC>
1056    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CA9>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CA9>
1057
1058    # ARMv6-M port for IAR EWARM
1059    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM0>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM0>
1060
1061    # ARMv7-M port for IAR EWARM
1062    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM3>
1063
1064    # ARMv7E-M ports for IAR EWARM
1065    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM4F>
1066    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM4F_MPU>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM4F_MPU>
1067    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM7>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM7/r0p1>
1068
1069    # ARMv8-M Ports for IAR EWARM
1070    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM23/non_secure>
1071    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM23/secure>
1072    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM23_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM23_NTZ/non_secure>
1073
1074    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33/non_secure>
1075    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33/secure>
1076    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33_NTZ/non_secure>
1077    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM33_TFM>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM33_NTZ/non_secure>
1078
1079    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM35P/non_secure>
1080    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM35P/secure>
1081    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM35P_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM35P_NTZ/non_secure>
1082
1083    # ARMv8.1-M ports for IAR EWARM
1084    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55/non_secure>
1085    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55/secure>
1086    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55_NTZ/non_secure>
1087    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM55_TFM>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM55_NTZ/non_secure>
1088
1089    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85/non_secure>
1090    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_SECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85/secure>
1091    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_NTZ_NONSECURE>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85_NTZ/non_secure>
1092    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CM85_TFM>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CM85_NTZ/non_secure>
1093
1094    # ARMv7-R Ports for IAR EWARM
1095    $<$<STREQUAL:${FREERTOS_PORT},IAR_ARM_CRX_NOGIC>:${CMAKE_CURRENT_LIST_DIR}/IAR/ARM_CRx_No_GIC>
1096
1097    # ARMv4T ARM7TDMI ports for IAR Embedded Workbench for ARM
1098    $<$<STREQUAL:${FREERTOS_PORT},IAR_STR71X>:${CMAKE_CURRENT_LIST_DIR}/IAR/STR71x>
1099    $<$<STREQUAL:${FREERTOS_PORT},IAR_STR75X>:${CMAKE_CURRENT_LIST_DIR}/IAR/STR75x>
1100    $<$<STREQUAL:${FREERTOS_PORT},IAR_LPC2000>:${CMAKE_CURRENT_LIST_DIR}/IAR/LPC2000>
1101    $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEL_SAM7S64>:${CMAKE_CURRENT_LIST_DIR}/IAR/AtmelSAM7S64>
1102
1103    # ARMv5TE ARM926 ports for IAR Embedded Workbench for ARM
1104    $<$<STREQUAL:${FREERTOS_PORT},IAR_STR91X>:${CMAKE_CURRENT_LIST_DIR}/IAR/STR91x>
1105    $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEL_SAM9XE>:${CMAKE_CURRENT_LIST_DIR}/IAR/AtmelSAM9XE>
1106
1107    # Microchip (formerly Atmel) AVR8 ports for IAR EWAVR
1108    $<$<STREQUAL:${FREERTOS_PORT},IAR_ATMEGA323>:${CMAKE_CURRENT_LIST_DIR}/IAR/ATMega323>
1109    $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR_AVRDX>:${CMAKE_CURRENT_LIST_DIR}/IAR/AVR_AVRDx>
1110    $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR_MEGA0>:${CMAKE_CURRENT_LIST_DIR}/IAR/AVR_Mega0>
1111
1112    # Microchip (formerly Atmel) AVR32 port for IAR Embedded Workbench for AVR32
1113    $<$<STREQUAL:${FREERTOS_PORT},IAR_AVR32_UC3>:${CMAKE_CURRENT_LIST_DIR}/IAR/AVR32_UC3>
1114
1115    # Texas Instruments MSP430 ports for IAR Embedded Workbench for MSP430
1116    $<$<STREQUAL:${FREERTOS_PORT},IAR_MSP430>:${CMAKE_CURRENT_LIST_DIR}/IAR/MSP430>
1117    $<$<STREQUAL:${FREERTOS_PORT},IAR_MSP430X>:${CMAKE_CURRENT_LIST_DIR}/IAR/MSP430X>
1118
1119    # RISC-V architecture port for IAR Embedded Workbench for RISC-V
1120    $<$<STREQUAL:${FREERTOS_PORT},IAR_RISC_V>:
1121        ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V
1122        ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V/chip_specific_extensions/RV32I_CLINT_no_extensions>
1123
1124    $<$<STREQUAL:${FREERTOS_PORT},IAR_RISC_V_GENERIC>:
1125        ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V
1126        ${CMAKE_CURRENT_LIST_DIR}/IAR/RISC-V/chip_specific_extensions/${FREERTOS_RISCV_EXTENSION}>
1127
1128    # Renesas RL78 port for IAR EWRL78
1129    $<$<STREQUAL:${FREERTOS_PORT},IAR_RL78>:${CMAKE_CURRENT_LIST_DIR}/IAR/RL78>
1130
1131    # Renesas RX architecture ports for IAR EWRX
1132    $<$<STREQUAL:${FREERTOS_PORT},IAR_RX100>:${CMAKE_CURRENT_LIST_DIR}/IAR/RX100>
1133    $<$<STREQUAL:${FREERTOS_PORT},IAR_RX600>:${CMAKE_CURRENT_LIST_DIR}/IAR/RX600>
1134    $<$<STREQUAL:${FREERTOS_PORT},IAR_RX700_V3_DPFPU>:${CMAKE_CURRENT_LIST_DIR}/IAR/RX700v3_DPFPU>
1135    $<$<STREQUAL:${FREERTOS_PORT},IAR_RX_V2>:${CMAKE_CURRENT_LIST_DIR}/IAR/RXv2>
1136
1137    # Renesas (formerly NEC) V850ES port for IAR EWV850
1138    $<$<STREQUAL:${FREERTOS_PORT},IAR_V850ES_FX3>:${CMAKE_CURRENT_LIST_DIR}/IAR/V850ES>
1139    $<$<STREQUAL:${FREERTOS_PORT},IAR_V850ES_HX3>:${CMAKE_CURRENT_LIST_DIR}/IAR/V850ES>
1140
1141    # ARM Cortex-M4F port for the MikroElektronika MikroC compiler
1142    $<$<STREQUAL:${FREERTOS_PORT},MIKROC_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/MikroC/ARM_CM4F>
1143
1144    # Microchip PIC18 8-bit MCU port for MPLAB XC8
1145    $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC18F>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC18F>
1146
1147    # Microchip PIC24 16-bit MCU port for MPLAB XC16
1148    $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC24>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC24_dsPIC>
1149
1150    # Microchip MIPS 32-Bit MCU ports for MPLAB XC32
1151    $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MEC14XX>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC32MEC14xx>
1152    $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MX>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC32MX>
1153    $<$<STREQUAL:${FREERTOS_PORT},MPLAB_PIC32MZ>:${CMAKE_CURRENT_LIST_DIR}/MPLAB/PIC32MZ>
1154
1155    # Windows Simulator for Microsoft Visual C Compiler and MinGW GCC
1156    $<$<STREQUAL:${FREERTOS_PORT},MSVC_MINGW>:${CMAKE_CURRENT_LIST_DIR}/MSVC-MingW>
1157
1158    # 16 bit DOS ports for Open Watcom
1159    $<$<STREQUAL:${FREERTOS_PORT},OWATCOM_16BIT_DOS_FLSH186>:
1160        ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/common
1161        ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/Flsh186>
1162    $<$<STREQUAL:${FREERTOS_PORT},OWATCOM_16BIT_DOS_PC>:
1163        ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/common
1164        ${CMAKE_CURRENT_LIST_DIR}/oWatcom/16BitDOS/PC>
1165
1166    $<$<STREQUAL:${FREERTOS_PORT},PARADIGM_TERN_EE_LARGE>:${CMAKE_CURRENT_LIST_DIR}/Paradigm/Tern_EE/large_untested>
1167    $<$<STREQUAL:${FREERTOS_PORT},PARADIGM_TERN_EE_SMALL>:${CMAKE_CURRENT_LIST_DIR}/Paradigm/Tern_EE/small>
1168
1169    # Renesas RX mcu ports for Renesas CC-RX
1170    $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX100>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX100>
1171    $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX200>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX200>
1172    $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX600>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX600>
1173    $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX600_V2>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX600v2>
1174    $<$<STREQUAL:${FREERTOS_PORT},RENESAS_RX700_V3_DPFPU>:${CMAKE_CURRENT_LIST_DIR}/Renesas/RX700v3_DPFPU>
1175
1176    # Renesas (formerly  Hitach) SHA2 SuperH port for the Renesas SH C Compiler
1177    $<$<STREQUAL:${FREERTOS_PORT},RENESAS_SH2A_FPU>:${CMAKE_CURRENT_LIST_DIR}/Renesas/SH2A_FPU>
1178
1179    # Texas Instruments MSP430 port for Rowley CrossWorks
1180    $<$<STREQUAL:${FREERTOS_PORT},ROWLEY_MSP430F449>:${CMAKE_CURRENT_LIST_DIR}/Rowley/MSP430F449>
1181
1182    # ARMv7-A Cortex-A9 port for ARM RVDS / armcc
1183    $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CA9>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CA9>
1184
1185    # ARMv6-M port for ARM RVDS / armcc
1186    $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM0>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM0>
1187
1188    # ARMv7-M port for ARM RVDS / armcc
1189    $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM3>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM3>
1190
1191    # ARMv7E-M ports for ARM RVDS / armcc
1192    $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM4_MPU>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM4_MPU>
1193    $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM4F>
1194    $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM_CM7>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM_CM7/r0p1>
1195
1196    # ARMv4T / ARM7TDMI LPC21XX port for ARM RVDS / armcc
1197    $<$<STREQUAL:${FREERTOS_PORT},RVDS_ARM7_LPC21XX>:${CMAKE_CURRENT_LIST_DIR}/RVDS/ARM7_LPC21xx>
1198
1199    # Cygnal c8051 port for SDCC (Small Device C Compiler)
1200    $<$<STREQUAL:${FREERTOS_PORT},SDCC_CYGNAL>:${CMAKE_CURRENT_LIST_DIR}/SDCC/Cygnal>
1201
1202    # Infineon (formerly Fujitsu, Spansion, Cypress) MB9x ports for Softune C Compiler
1203    $<$<STREQUAL:${FREERTOS_PORT},SOFTUNE_MB91460>:${CMAKE_CURRENT_LIST_DIR}/Softune/MB91460>
1204    $<$<STREQUAL:${FREERTOS_PORT},SOFTUNE_MB96340>:${CMAKE_CURRENT_LIST_DIR}/Softune/MB96340>
1205
1206    # ARMv7E-M (Cortex-M4F) port for TASKING VX-toolset for ARM
1207    $<$<STREQUAL:${FREERTOS_PORT},TASKING_ARM_CM4F>:${CMAKE_CURRENT_LIST_DIR}/Tasking/ARM_CM4F>
1208
1209    # Port for C-SKY T-HEAD CK802
1210    $<$<STREQUAL:${FREERTOS_PORT},CDK_THEAD_CK802>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/CDK/T-HEAD_CK802>
1211
1212    # Tensilica Xtensa port for XCC
1213    $<$<STREQUAL:${FREERTOS_PORT},XCC_XTENSA>:${CMAKE_CURRENT_LIST_DIR}/ThirdParty/XCC/Xtensa>
1214
1215    # Microchip PIC18 port for WIZ-C
1216    $<$<STREQUAL:${FREERTOS_PORT},WIZC_PIC18>:${CMAKE_CURRENT_LIST_DIR}/WizC/PIC18>
1217)
1218
1219target_link_libraries(freertos_kernel_port_headers
1220    INTERFACE
1221        $<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:hardware_sync>
1222)
1223
1224if(FREERTOS_PORT STREQUAL GCC_POSIX)
1225    find_package(Threads REQUIRED)
1226endif()
1227
1228target_link_libraries(freertos_kernel_port
1229    PUBLIC
1230        $<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:pico_base_headers>
1231        $<$<STREQUAL:${FREERTOS_PORT},GCC_XTENSA_ESP32>:idf::esp32>
1232        freertos_kernel_port_headers
1233    PRIVATE
1234        freertos_kernel_include
1235        $<$<STREQUAL:${FREERTOS_PORT},GCC_POSIX>:Threads::Threads>
1236        "$<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:hardware_clocks;hardware_exception;pico_multicore>"
1237        $<$<STREQUAL:${FREERTOS_PORT},MSVC_MINGW>:winmm> # Windows library which implements timers
1238)
1239