Skip to content

Commit

Permalink
Fix circular dependency in cmake project
Browse files Browse the repository at this point in the history
Fix for FreeRTOS#687
In order for custom ports to also break the cycle, they must link
against freertos_kernel_include instead of freertos_kernel.
  • Loading branch information
cookpate committed Jul 5, 2023
1 parent d3c289f commit 39371b9
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 10 deletions.
12 changes: 3 additions & 9 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ elseif((FREERTOS_PORT STREQUAL "A_CUSTOM_PORT") AND (NOT TARGET freertos_kernel_
" .)\n"
" target_link_libraries(freertos_kernel_port\n"
" PRIVATE\n"
" freertos_kernel)")
" freertos_kernel_include)")
endif()

########################################################################
Expand Down Expand Up @@ -264,6 +264,7 @@ add_compile_options(


########################################################################
add_subdirectory(include)
add_subdirectory(portable)

add_library(freertos_kernel STATIC
Expand All @@ -279,17 +280,10 @@ add_library(freertos_kernel STATIC
$<IF:$<BOOL:$<FILTER:${FREERTOS_HEAP},EXCLUDE,^[1-5]$>>,${FREERTOS_HEAP},portable/MemMang/heap_${FREERTOS_HEAP}.c>
)

target_include_directories(freertos_kernel
PUBLIC
include
# Note: DEPRECATED but still supported, may be removed in a future release.
$<$<NOT:$<TARGET_EXISTS:freertos_config>>:${FREERTOS_CONFIG_FILE_DIRECTORY}>
)

target_link_libraries(freertos_kernel
PUBLIC
$<$<TARGET_EXISTS:freertos_config>:freertos_config>
freertos_kernel_port
freertos_kernel_include
)

########################################################################
16 changes: 16 additions & 0 deletions include/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# FreeRTOS internal cmake file. Do not use it in user top-level project

add_library(freertos_kernel_include INTERFACE)

target_include_directories(freertos_kernel_include
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:.>
# Note: DEPRECATED but still supported, may be removed in a future release.
$<$<NOT:$<TARGET_EXISTS:freertos_config>>:${FREERTOS_CONFIG_FILE_DIRECTORY}>
)

target_link_libraries(freertos_kernel_include
INTERFACE
$<$<TARGET_EXISTS:freertos_config>:freertos_config>
)
2 changes: 1 addition & 1 deletion portable/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1035,7 +1035,7 @@ target_link_libraries(freertos_kernel_port
$<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:pico_base_headers>
$<$<STREQUAL:${FREERTOS_PORT},GCC_XTENSA_ESP32>:idf::esp32>
PRIVATE
freertos_kernel
freertos_kernel_include
$<$<STREQUAL:${FREERTOS_PORT},GCC_POSIX>:Threads::Threads>
"$<$<STREQUAL:${FREERTOS_PORT},GCC_RP2040>:hardware_clocks;hardware_exception>"
$<$<STREQUAL:${FREERTOS_PORT},MSVC_MINGW>:winmm> # Windows library which implements timers
Expand Down

0 comments on commit 39371b9

Please sign in to comment.