Seregon/rtnet-stack

Real-Time Embedded Network Stack

C/66 B/No license
CMakeLists.txt
rtnet-stack / CMakeLists.txt
1cmake_minimum_required(VERSION 3.16)
2 
3project(RTNS
4 VERSION 1.0.0
5 LANGUAGES C
6)
7 
8set(CMAKE_C_STANDARD 11)
9set(CMAKE_C_STANDARD_REQUIRED ON)
10set(CMAKE_C_EXTENSIONS OFF)
11 
12option(RTNS_USE_PLATFORM_STUBS "Use host stub implementations for platform hooks" OFF)
13set(RTNS_PLATFORM "NONE" CACHE STRING "Platform implementation: NONE, FREERTOS, BAREMETAL")
14option(RTNS_ENABLE_ASAN "Enable AddressSanitizer for debug builds" OFF)
15 
16if(RTNS_ENABLE_ASAN)
17 add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
18 add_link_options(-fsanitize=address -fno-omit-frame-pointer)
19endif()
20 
21# Sources
22set(RTNS_SOURCES
23 ${CMAKE_CURRENT_SOURCE_DIR}/src/rtnet_ipv6.c
24)
25 
26set(RTNS_STUB_SOURCES
27 ${CMAKE_CURRENT_SOURCE_DIR}/stubs/rtnet_platform_stubs.c
28 ${CMAKE_CURRENT_SOURCE_DIR}/stubs/rtnet_host_api_stubs.c
29)
30 
31set(RTNS_PLATFORM_SOURCES "")
32if(RTNS_PLATFORM STREQUAL "FREERTOS")
33 list(APPEND RTNS_PLATFORM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/platforms/rtnet_platform_freertos.c)
34elseif(RTNS_PLATFORM STREQUAL "BAREMETAL")
35 list(APPEND RTNS_PLATFORM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/platforms/rtnet_platform_baremetal.c)
36endif()
37 
38if(RTNS_USE_PLATFORM_STUBS)
39 list(APPEND RTNS_SOURCES ${RTNS_STUB_SOURCES})
40elseif(NOT RTNS_PLATFORM STREQUAL "NONE")
41 list(APPEND RTNS_SOURCES ${RTNS_PLATFORM_SOURCES})
42endif()
43 
44add_library(rtns STATIC ${RTNS_SOURCES})
45target_include_directories(rtns PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src)
46 
47# Examples (desktop/host)
48option(RTNS_BUILD_EXAMPLES "Build desktop examples" ON)
49 
50# Warnings
51if(MSVC)
52 target_compile_options(rtns PRIVATE /W4)
53else()
54 target_compile_options(rtns PRIVATE -Wall -Wextra -Wpedantic)
55endif()
56 
57# Test executable (uses the library and optionally platform stubs)
58if(RTNS_USE_PLATFORM_STUBS)
59 set(TEST_SOURCES
60 ${CMAKE_CURRENT_SOURCE_DIR}/src/rtnet_test_suite.c
61 ${RTNS_STUB_SOURCES}
62 )
63 
64 add_executable(rtns_tests ${TEST_SOURCES})
65 target_link_libraries(rtns_tests PRIVATE rtns)
66 target_include_directories(rtns_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
67 
68 if(MSVC)
69 target_compile_options(rtns_tests PRIVATE /W4)
70 else()
71 target_compile_options(rtns_tests PRIVATE -Wall -Wextra -Wpedantic)
72 endif()
73else()
74 message(STATUS "RTNS_USE_PLATFORM_STUBS=OFF: skipping host test target")
75endif()
76 
77if(RTNS_BUILD_EXAMPLES AND RTNS_USE_PLATFORM_STUBS)
78 add_executable(rtns_desktop_demo
79 ${CMAKE_CURRENT_SOURCE_DIR}/examples/desktop_demo/main.c
80 ${RTNS_STUB_SOURCES}
81 )
82 target_link_libraries(rtns_desktop_demo PRIVATE rtns)
83 target_include_directories(rtns_desktop_demo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
84 
85 if(MSVC)
86 target_compile_options(rtns_desktop_demo PRIVATE /W4)
87 else()
88 target_compile_options(rtns_desktop_demo PRIVATE -Wall -Wextra -Wpedantic)
89 endif()
90elseif(RTNS_BUILD_EXAMPLES AND NOT RTNS_USE_PLATFORM_STUBS)
91 message(STATUS "RTNS_USE_PLATFORM_STUBS=OFF: skipping desktop_demo example")
92endif()
93