Skip to content

Commit b8eb8a6

Browse files
author
Jan Kamidra
committed
RTX cmake fix
1 parent 23134f3 commit b8eb8a6

File tree

1 file changed

+62
-70
lines changed

1 file changed

+62
-70
lines changed

cmsis/CMSIS_cmake/cmsis_rtos_rtx.cmake

Lines changed: 62 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -30,82 +30,74 @@
3030
if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/../CMSIS-RTX)
3131
message(FATAL_ERROR "CMSIS-RTX submodule directory not found!")
3232
endif()
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)
3672
target_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

Comments
 (0)