1 cmake_minimum_required(VERSION 3.15)
3 # User is responsible to set two mandatory options:
4 # FREERTOS_CONFIG_FILE_DIRECTORY
7 # User can choose which heap implementation to use (either the implementations
8 # included with FreeRTOS [1..5] or a custom implementation ) by providing the
9 # option FREERTOS_HEAP. If the option is not set, the cmake will default to
12 # Absolute path to FreeRTOS config file directory
13 set(FREERTOS_CONFIG_FILE_DIRECTORY "" CACHE STRING "Absolute path to the directory with FreeRTOSConfig.h")
15 if(NOT FREERTOS_CONFIG_FILE_DIRECTORY)
16 message(FATAL_ERROR " FreeRTOSConfig.h file directory not specified. Please specify absolute path to it from top-level CMake file:\n"
17 " set(FREERTOS_CONFIG_FILE_DIRECTORY <absolute path to FreeRTOSConfig.h directory> CACHE STRING \"\")\n"
18 " or from CMake command line option:\n"
19 " -DFREERTOS_CONFIG_FILE_DIRECTORY='/absolute_path/to/FreeRTOSConfig.h/directory'")
20 elseif(NOT EXISTS ${FREERTOS_CONFIG_FILE_DIRECTORY}/FreeRTOSConfig.h)
21 message(FATAL_ERROR " FreeRTOSConfig.h file not found in the directory specified (${FREERTOS_CONFIG_FILE_DIRECTORY})\n"
22 " Please specify absolute path to it from top-level CMake file:\n"
23 " set(FREERTOS_CONFIG_FILE_DIRECTORY <absolute path to FreeRTOSConfig.h directory> CACHE STRING \"\")\n"
24 " or from CMake command line option:\n"
25 " -DFREERTOS_CONFIG_FILE_DIRECTORY='/absolute_path/to/FreeRTOSConfig.h/directory'")
28 # Heap number or absolute path to custom heap implementation provided by user
29 set(FREERTOS_HEAP "4" CACHE STRING "FreeRTOS heap model number. 1 .. 5. Or absolute path to custom heap source file")
31 # FreeRTOS port option
32 set(FREERTOS_PORT "" CACHE STRING "FreeRTOS port name")
35 message(FATAL_ERROR " FREERTOS_PORT is not set. Please specify it from top-level CMake file (example):\n"
36 " set(FREERTOS_PORT GCC_ARM_CM4F CACHE STRING \"\")\n"
37 " or from CMake command line option:\n"
38 " -DFREERTOS_PORT=GCC_ARM_CM4F\n"
40 " Available port options:\n"
41 " BCC_16BIT_DOS_FLSH186 - Compiller: BCC Target: 16 bit DOS Flsh186\n"
42 " BCC_16BIT_DOS_PC - Compiller: BCC Target: 16 bit DOS PC\n"
43 " CCS_ARM_CM3 - Compiller: CCS Target: ARM Cortex-M3\n"
44 " CCS_ARM_CM4F - Compiller: CCS Target: ARM Cortex-M4 with FPU\n"
45 " CCS_ARM_CR4 - Compiller: CCS Target: ARM Cortex-R4\n"
46 " CCS_MSP430X - Compiller: CCS Target: MSP430X\n"
47 " CODEWARRIOR_COLDFIRE_V1 - Compiller: CoreWarrior Target: ColdFire V1\n"
48 " CODEWARRIOR_COLDFIRE_V2 - Compiller: CoreWarrior Target: ColdFire V2\n"
49 " CODEWARRIOR_HCS12 - Compiller: CoreWarrior Target: HCS12\n"
50 " GCC_ARM_CA9 - Compiller: GCC Target: ARM Cortex-A9\n"
51 " GCC_ARM_CA53_64_BIT - Compiller: GCC Target: ARM Cortex-A53 64 bit\n"
52 " GCC_ARM_CA53_64_BIT_SRE - Compiller: GCC Target: ARM Cortex-A53 64 bit SRE\n"
53 " GCC_ARM_CM0 - Compiller: GCC Target: ARM Cortex-M0\n"
54 " GCC_ARM_CM3 - Compiller: GCC Target: ARM Cortex-M3\n"
55 " GCC_ARM_CM3_MPU - Compiller: GCC Target: ARM Cortex-M3 with MPU\n"
56 " GCC_ARM_CM4_MPU - Compiller: GCC Target: ARM Cortex-M4 with MPU\n"
57 " GCC_ARM_CM4F - Compiller: GCC Target: ARM Cortex-M4 with FPU\n"
58 " GCC_ARM_CM7 - Compiller: GCC Target: ARM Cortex-M7\n"
59 " GCC_ARM_CM23_NONSECURE - Compiller: GCC Target: ARM Cortex-M23 non-secure\n"
60 " GCC_ARM_CM23_SECURE - Compiller: GCC Target: ARM Cortex-M23 secure\n"
61 " GCC_ARM_CM23_NTZ_NONSECURE - Compiller: GCC Target: ARM Cortex-M23 non-trustzone non-secure\n"
62 " GCC_ARM_CM33_NONSECURE - Compiller: GCC Target: ARM Cortex-M33 non-secure\n"
63 " GCC_ARM_CM33_SECURE - Compiller: GCC Target: ARM Cortex-M33 secure\n"
64 " GCC_ARM_CM33_NTZ_NONSECURE - Compiller: GCC Target: ARM Cortex-M33 non-trustzone non-secure\n"
65 " GCC_ARM_CM33_TFM - Compiller: GCC Target: ARM Cortex-M33 non-secure for TF-M\n"
66 " GCC_ARM_CM55_NONSECURE - Compiller: GCC Target: ARM Cortex-M55 non-secure\n"
67 " GCC_ARM_CM55_SECURE - Compiller: GCC Target: ARM Cortex-M55 secure\n"
68 " GCC_ARM_CM55_NTZ_NONSECURE - Compiller: GCC Target: ARM Cortex-M55 non-trustzone non-secure\n"
69 " GCC_ARM_CM55_TFM - Compiller: GCC Target: ARM Cortex-M55 non-secure for TF-M\n"
70 " GCC_ARM_CM85_NONSECURE - Compiller: GCC Target: ARM Cortex-M85 non-secure\n"
71 " GCC_ARM_CM85_SECURE - Compiller: GCC Target: ARM Cortex-M85 secure\n"
72 " GCC_ARM_CM85_NTZ_NONSECURE - Compiller: GCC Target: ARM Cortex-M85 non-trustzone non-secure\n"
73 " GCC_ARM_CM85_TFM - Compiller: GCC Target: ARM Cortex-M85 non-secure for TF-M\n"
74 " GCC_ARM_CR5 - Compiller: GCC Target: ARM Cortex-R5\n"
75 " GCC_ARM_CRX_NOGIC - Compiller: GCC Target: ARM Cortex-Rx no GIC\n"
76 " GCC_ARM7_AT91FR40008 - Compiller: GCC Target: ARM7 Atmel AT91R40008\n"
77 " GCC_ARM7_AT91SAM7S - Compiller: GCC Target: ARM7 Atmel AT91SAM7S\n"
78 " GCC_ARM7_LPC2000 - Compiller: GCC Target: ARM7 LPC2000\n"
79 " GCC_ARM7_LPC23XX - Compiller: GCC Target: ARM7 LPC23xx\n"
80 " GCC_ATMEGA323 - Compiller: GCC Target: ATMega323\n"
81 " GCC_AVR32_UC3 - Compiller: GCC Target: AVR32 UC3\n"
82 " GCC_COLDFIRE_V2 - Compiller: GCC Target: ColdFire V2\n"
83 " GCC_CORTUS_APS3 - Compiller: GCC Target: CORTUS APS3\n"
84 " GCC_H8S2329 - Compiller: GCC Target: H8S2329\n"
85 " GCC_HCS12 - Compiller: GCC Target: HCS12\n"
86 " GCC_IA32_FLAT - Compiller: GCC Target: IA32 flat\n"
87 " GCC_MICROBLAZE - Compiller: GCC Target: MicroBlaze\n"
88 " GCC_MICROBLAZE_V8 - Compiller: GCC Target: MicroBlaze V8\n"
89 " GCC_MICROBLAZE_V9 - Compiller: GCC Target: MicroBlaze V9\n"
90 " GCC_MSP430F449 - Compiller: GCC Target: MSP430F449\n"
91 " GCC_NIOSII - Compiller: GCC Target: NiosII\n"
92 " GCC_PPC405_XILINX - Compiller: GCC Target: Xilinx PPC405\n"
93 " GCC_PPC440_XILINX - Compiller: GCC Target: Xilinx PPC440\n"
94 " GCC_RISC_V - Compiller: GCC Target: RISC-V\n"
95 " GCC_RISC_V_PULPINO_VEGA_RV32M1RM - Compiller: GCC Target: RISC-V Pulpino Vega RV32M1RM\n"
96 " GCC_RL78 - Compiller: GCC Target: Renesas RL78\n"
97 " GCC_RX100 - Compiller: GCC Target: Renesas RX100\n"
98 " GCC_RX200 - Compiller: GCC Target: Renesas RX200\n"
99 " GCC_RX600 - Compiller: GCC Target: Renesas RX600\n"
100 " GCC_RX600_V2 - Compiller: GCC Target: Renesas RX600 v2\n"
101 " GCC_RX700_V3_DPFPU - Compiller: GCC Target: Renesas RX700 v3 with DPFPU\n"
102 " GCC_STR75X - Compiller: GCC Target: STR75x\n"
103 " GCC_TRICORE_1782 - Compiller: GCC Target: TriCore 1782\n"
104 " GCC_ARC_EM_HS - Compiller: GCC Target: DesignWare ARC EM HS\n"
105 " GCC_ARC_V1 - Compiller: GCC Target: DesignWare ARC v1\n"
106 " GCC_ATMEGA - Compiller: GCC Target: ATmega\n"
107 " GCC_POSIX - Compiller: GCC Target: Posix\n"
108 " GCC_RP2040 - Compiller: GCC Target: RP2040 ARM Cortex-M0+\n"
109 " GCC_XTENSA_ESP32 - Compiller: GCC Target: Xtensa ESP32\n"
110 " GCC_AVRDX - Compiller: GCC Target: AVRDx\n"
111 " GCC_AVR_MEGA0 - Compiller: GCC Target: AVR Mega0\n"
112 " IAR_78K0K - Compiller: IAR Target: Renesas 78K0K\n"
113 " IAR_ARM_CA5_NOGIC - Compiller: IAR Target: ARM Cortex-A5 no GIC\n"
114 " IAR_ARM_CA9 - Compiller: IAR Target: ARM Cortex-A9\n"
115 " IAR_ARM_CM0 - Compiller: IAR Target: ARM Cortex-M0\n"
116 " IAR_ARM_CM3 - Compiller: IAR Target: ARM Cortex-M3\n"
117 " IAR_ARM_CM4F - Compiller: IAR Target: ARM Cortex-M4 with FPU\n"
118 " IAR_ARM_CM4F_MPU - Compiller: IAR Target: ARM Cortex-M4 with FPU and MPU\n"
119 " IAR_ARM_CM7 - Compiller: IAR Target: ARM Cortex-M7\n"
120 " IAR_ARM_CM23_NONSECURE - Compiller: IAR Target: ARM Cortex-M23 non-secure\n"
121 " IAR_ARM_CM23_SECURE - Compiller: IAR Target: ARM Cortex-M23 secure\n"
122 " IAR_ARM_CM23_NTZ_NONSECURE - Compiller: IAR Target: ARM Cortex-M23 non-trustzone non-secure\n"
123 " IAR_ARM_CM33_NONSECURE - Compiller: IAR Target: ARM Cortex-M33 non-secure\n"
124 " IAR_ARM_CM33_SECURE - Compiller: IAR Target: ARM Cortex-M33 secure\n"
125 " IAR_ARM_CM33_NTZ_NONSECURE - Compiller: IAR Target: ARM Cortex-M33 non-trustzone non-secure\n"
126 " IAR_ARM_CM55_NONSECURE - Compiller: IAR Target: ARM Cortex-M55 non-secure\n"
127 " IAR_ARM_CM55_SECURE - Compiller: IAR Target: ARM Cortex-M55 secure\n"
128 " IAR_ARM_CM55_NTZ_NONSECURE - Compiller: IAR Target: ARM Cortex-M55 non-trustzone non-secure\n"
129 " IAR_ARM_CM85_NONSECURE - Compiller: IAR Target: ARM Cortex-M85 non-secure\n"
130 " IAR_ARM_CM85_SECURE - Compiller: IAR Target: ARM Cortex-M85 secure\n"
131 " IAR_ARM_CM85_NTZ_NONSECURE - Compiller: IAR Target: ARM Cortex-M85 non-trustzone non-secure\n"
132 " IAR_ARM_CRX_NOGIC - Compiller: IAR Target: ARM Cortex-Rx no GIC\n"
133 " IAR_ATMEGA323 - Compiller: IAR Target: ATMega323\n"
134 " IAR_ATMEL_SAM7S64 - Compiller: IAR Target: Atmel SAM7S64\n"
135 " IAR_ATMEL_SAM9XE - Compiller: IAR Target: Atmel SAM9XE\n"
136 " IAR_AVR_AVRDX - Compiller: IAR Target: AVRDx\n"
137 " IAR_AVR_MEGA0 - Compiller: IAR Target: AVR Mega0\n"
138 " IAR_AVR32_UC3 - Compiller: IAR Target: AVR32 UC3\n"
139 " IAR_LPC2000 - Compiller: IAR Target: LPC2000\n"
140 " IAR_MSP430 - Compiller: IAR Target: MSP430\n"
141 " IAR_MSP430X - Compiller: IAR Target: MSP430X\n"
142 " IAR_RISC_V - Compiller: IAR Target: RISC-V\n"
143 " IAR_RL78 - Compiller: IAR Target: Renesas RL78\n"
144 " IAR_RX100 - Compiller: IAR Target: Renesas RX100\n"
145 " IAR_RX600 - Compiller: IAR Target: Renesas RX600\n"
146 " IAR_RX700_V3_DPFPU - Compiller: IAR Target: Renesas RX700 v3 with DPFPU\n"
147 " IAR_RX_V2 - Compiller: IAR Target: Renesas RX v2\n"
148 " IAR_STR71X - Compiller: IAR Target: STR71x\n"
149 " IAR_STR75X - Compiller: IAR Target: STR75x\n"
150 " IAR_STR91X - Compiller: IAR Target: STR91x\n"
151 " IAR_V850ES_FX3 - Compiller: IAR Target: Renesas V850ES/Fx3\n"
152 " IAR_V850ES_HX3 - Compiller: IAR Target: Renesas V850ES/Hx3\n"
153 " MIKROC_ARM_CM4F - Compiller: MikroC Target: ARM Cortex-M4 with FPU\n"
154 " MPLAB_PIC18F - Compiller: MPLAB Target: PIC18F\n"
155 " MPLAB_PIC24 - Compiller: MPLAB Target: PIC24\n"
156 " MPLAB_PIC32MEC14XX - Compiller: MPLAB Target: PIC32MEC14xx\n"
157 " MPLAB_PIC32MX - Compiller: MPLAB Target: PIC32MX\n"
158 " MPLAB_PIC32MZ - Compiller: MPLAB Target: PIC32MZ\n"
159 " MSVC_MINGW - Compiller: MSVC or MinGW Target: x86\n"
160 " OWATCOM_16BIT_DOS_FLSH186 - Compiller: Open Watcom Target: 16 bit DOS Flsh186\n"
161 " OWATCOM_16BIT_DOS_PC - Compiller: Open Watcom Target: 16 bit DOS PC\n"
162 " PARADIGM_TERN_EE_LARGE - Compiller: Paradigm Target: Tern EE large\n"
163 " PARADIGM_TERN_EE_SMALL - Compiller: Paradigm Target: Tern EE small\n"
164 " RENESAS_RX100 - Compiller: Renesas Target: RX100\n"
165 " RENESAS_RX200 - Compiller: Renesas Target: RX200\n"
166 " RENESAS_RX600 - Compiller: Renesas Target: RX600\n"
167 " RENESAS_RX600_V2 - Compiller: Renesas Target: RX600 v2\n"
168 " RENESAS_RX700_V3_DPFPU - Compiller: Renesas Target: RX700 v3 with DPFPU\n"
169 " RENESAS_SH2A_FPU - Compiller: Renesas Target: SH2A with FPU\n"
170 " ROWLEY_MSP430F449 - Compiller: Rowley Target: MSP430F449\n"
171 " RVDS_ARM_CA9 - Compiller: RVDS Target: ARM Cortex-A9\n"
172 " RVDS_ARM_CM0 - Compiller: RVDS Target: ARM Cortex-M0\n"
173 " RVDS_ARM_CM3 - Compiller: RVDS Target: ARM Cortex-M3\n"
174 " RVDS_ARM_CM4_MPU - Compiller: RVDS Target: ARM Cortex-M4 with MPU\n"
175 " RVDS_ARM_CM4F - Compiller: RVDS Target: ARM Cortex-M4 with FPU\n"
176 " RVDS_ARM_CM7 - Compiller: RVDS Target: ARM Cortex-M7\n"
177 " RVDS_ARM7_LPC21XX - Compiller: RVDS Target: ARM7 LPC21xx\n"
178 " SDCC_CYGNAL - Compiller: SDCC Target: Cygnal\n"
179 " SOFTUNE_MB91460 - Compiller: Softune Target: MB91460\n"
180 " SOFTUNE_MB96340 - Compiller: Softune Target: MB96340\n"
181 " TASKING_ARM_CM4F - Compiller: Tasking Target: ARM Cortex-M4 with FPU\n"
182 " CDK_THEAD_CK802 - Compiller: CDK Target: T-head CK802\n"
183 " XCC_XTENSA - Compiller: XCC Target: Xtensa\n"
184 " WIZC_PIC18 - Compiller: WizC Target: PIC18")
187 add_subdirectory(portable)
189 add_library(freertos_kernel STATIC
198 # If FREERTOS_HEAP is digit between 1 .. 5 - it is heap number, otherwise - it is path to custom heap source file
199 $<IF:$<BOOL:$<FILTER:${FREERTOS_HEAP},EXCLUDE,^[1-5]$>>,${FREERTOS_HEAP},portable/MemMang/heap_${FREERTOS_HEAP}.c>
202 target_include_directories(freertos_kernel
205 ${FREERTOS_CONFIG_FILE_DIRECTORY}
208 target_link_libraries(freertos_kernel freertos_kernel_port)