3030if (NOT EXISTS ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX)
3131 message (FATAL_ERROR "CMSIS-RTX submodule directory not found!" )
3232endif ()
33+ message (STATUS "CMSIS-RTX 5.9.0" )
34+
35+ # Add toolchain-specific interrupt handlers based on core type
36+ if (${CMAKE_CROSSCOMPILING} )
37+ set (RTX_IRQ_FILE_PATH "${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source/GCC" )
38+ set (_cm0_variants M0 M0P)
39+ set (_cmx_variants M3 M4 M7)
40+ set (_cmxx_variants M33 M35 M35P M55 M85)
41+
42+ foreach (key ${MBED_TARGET_LABELS} )
43+ if (${key} STREQUAL CORTEX_A)
44+ # Cortex-A uses ARMv7-A
45+ target_sources (mbed-rtos-sources INTERFACE ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Config/handlers.c)
46+ set (RTX_IRQ_FILE "irq_armv7a.S" )
47+ elseif (${key} STREQUAL M23)
48+ # Cortex-M23 uses ARMv8-M
49+ set (RTX_IRQ_FILE "irq_armv8mbl.S" )
50+ elseif (${key} IN_LIST _cm0_variants)
51+ # Cortex-M0/M0+ use ARMv6-M
52+ set (RTX_IRQ_FILE "irq_armv6m.S" )
53+ elseif (${key} IN_LIST _cmx_variants)
54+ # Cortex-M3/M4/M7 use ARMv7-M
55+ set (RTX_IRQ_FILE "irq_armv7m.S" )
56+ elseif (${key} IN_LIST _cmxx_variants)
57+ # Cortex-M33/M35/M55/M85 use ARMv8-M
58+ set (RTX_IRQ_FILE "irq_armv8mml.S" )
59+ endif ()
60+ endforeach ()
61+
62+ # Add the IRQ handler file if determined
63+ if (DEFINED RTX_IRQ_FILE AND EXISTS ${RTX_IRQ_FILE_PATH} /${RTX_IRQ_FILE} )
64+ target_sources (mbed-rtos-sources INTERFACE ${RTX_IRQ_FILE_PATH} /${RTX_IRQ_FILE} )
65+ else ()
66+ message (WARNING "CMSIS-RTX: No IRQ handler found for this target (labels: ${MBED_TARGET_LABELS} )" )
67+ endif ()
68+ endif ()
3369
3470# Make RTX headers and Mbed's device RTOS wrapper headers visible to ALL profiles
3571# (needed for typedefs like mbed_rtos_storage_* used by headers even in bare-metal)
3672target_include_directories (mbed-core-flags
3773 INTERFACE
3874 ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/include /RTX
3975 ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Include
76+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source
4077)
4178
42- if (APPLICATION_PROFILE_CONFIG_FULL)
43- message (STATUS "CMSIS-RTX 5.9.0" )
44-
45- # Source directory only needed when actually building the kernel (full profile)
46- target_include_directories (mbed-rtos-flags
47- INTERFACE
48- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source
49- )
50-
51- # RTX source files (only compiled when building with RTOS)
52- target_sources (mbed-rtos-sources
53- INTERFACE
54- ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /RTX/mbed_rtos_rtx.c
55- ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /RTX/mbed_rtx_handlers.c
56- ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /RTX/mbed_rtx_idle.cpp
57- # Old CMSIS-RTOS v1 compatibility layer
58- ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /cmsis_os1.c
59- # Configuration
60- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Config/RTX_Config.c
61- # RTX kernel sources
62- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_delay.c
63- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_evflags.c
64- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_evr.c
65- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_kernel.c
66- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_lib.c
67- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_memory.c
68- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_mempool.c
69- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_msgqueue.c
70- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_mutex.c
71- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_semaphore.c
72- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_system.c
73- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_thread.c
74- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_timer.c
75- )
76-
77- # Add toolchain-specific interrupt handlers based on core type
78- if (${CMAKE_CROSSCOMPILING} )
79- set (RTX_IRQ_FILE_PATH "${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source/GCC/" )
80- # Determine IRQ handler file based on Cortex core type
81- # CMSIS-RTX 5.9.0 uses ARM architecture names (armv6m, armv7m, armv8m, etc.)
82- foreach (core_label ${MBED_TARGET_LABELS} )
83- if (${core_label} STREQUAL "CORTEX_A" )
84- # Cortex-A startup
85- target_sources (mbed-rtos-sources INTERFACE
86- ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Config/handlers.c
87- )
88- set (RTX_IRQ_FILE "irq_armv7a.S" )
89- elseif (${core_label} MATCHES "M0" )
90- # Cortex-M0/M0+ use ARMv6-M architecture
91- set (RTX_IRQ_FILE "irq_armv6m.S" )
92- elseif (${core_label} MATCHES "M23" )
93- # Cortex-M23 uses ARMv8-M Baseline
94- set (RTX_IRQ_FILE "irq_armv8mbl.S" )
95- elseif (${core_label} MATCHES "M(3|4|7)" )
96- # Cortex-M3/M4/M7 use ARMv7-M architecture
97- set (RTX_IRQ_FILE "irq_armv7m.S" ) #irq_cm4f.S
98- elseif (${core_label} MATCHES "M(33|35|55|85)" )
99- # Cortex-M33/M35/M55/M85 use ARMv8-M Mainline
100- set (RTX_IRQ_FILE "irq_armv8mml.S" )
101- endif ()
102- endforeach ()
103-
104- # Add the IRQ handler file if determined
105- if (DEFINED RTX_IRQ_FILE AND EXISTS ${RTX_IRQ_FILE_PATH}${RTX_IRQ_FILE} )
106- target_sources (mbed-rtos-sources INTERFACE ${RTX_IRQ_FILE_PATH}${RTX_IRQ_FILE} )
107- else ()
108- message (WARNING "CMSIS-RTX: No IRQ handler found for this target (labels: ${MBED_TARGET_LABELS} )" )
109- endif ()
110- endif ()
111- endif ()
79+ # RTX source files (only compiled when building with RTOS)
80+ target_sources (mbed-rtos-sources
81+ INTERFACE
82+ ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /RTX/mbed_rtos_rtx.c
83+ ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /RTX/mbed_rtx_handlers.c
84+ ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /RTX/mbed_rtx_idle.cpp
85+ # Old CMSIS-RTOS v1 compatibility layer
86+ ${CMAKE_CURRENT_LIST_DIR} /../device/rtos/source /cmsis_os1.c
87+ # Configuration
88+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Config/RTX_Config.c
89+ # RTX kernel sources
90+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_delay.c
91+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_evflags.c
92+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_evr.c
93+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_kernel.c
94+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_lib.c
95+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_memory.c
96+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_mempool.c
97+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_msgqueue.c
98+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_mutex.c
99+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_semaphore.c
100+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_system.c
101+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_thread.c
102+ ${CMAKE_CURRENT_LIST_DIR} /../CMSIS-RTX/Source /rtx_timer.c
103+ )
0 commit comments