|
| 1 | +cmake_minimum_required(VERSION 3.15) |
| 2 | +project(rxnet |
| 3 | + VERSION 0.1.0 |
| 4 | + DESCRIPTION "Synchronous runtime for reactive models (FSM and Petri Nets)" |
| 5 | + HOMEPAGE_URL "https://github.com/greenlsi/rxnet" |
| 6 | + LANGUAGES C |
| 7 | +) |
| 8 | + |
| 9 | +# Set C standard |
| 10 | +set(CMAKE_C_STANDARD 99) |
| 11 | +set(CMAKE_C_STANDARD_REQUIRED ON) |
| 12 | +set(CMAKE_C_EXTENSIONS OFF) |
| 13 | + |
| 14 | +# Compilation flags |
| 15 | +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wpedantic") |
| 16 | +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_POSIX_C_SOURCE=200809L") |
| 17 | + |
| 18 | +option(RX_TRACE_ENABLE "Enable tracing support in rxnet" OFF) |
| 19 | +option(BUILD_TESTS "Build test suite" OFF) |
| 20 | + |
| 21 | +if(BUILD_TESTS AND NOT RX_TRACE_ENABLE) |
| 22 | + message(STATUS "BUILD_TESTS=ON requires tracing; enabling RX_TRACE_ENABLE") |
| 23 | + set(RX_TRACE_ENABLE ON CACHE BOOL "Enable tracing support in rxnet" FORCE) |
| 24 | +endif() |
| 25 | + |
| 26 | +# ============================================================================== |
| 27 | +# Main Library: rxnet |
| 28 | +# ============================================================================== |
| 29 | + |
| 30 | +add_library(rxnet STATIC |
| 31 | + src/runtime.c |
| 32 | + src/fsm.c |
| 33 | + src/pn.c |
| 34 | + src/cyclic.c |
| 35 | + src/coop.c |
| 36 | + src/thread.c |
| 37 | +) |
| 38 | + |
| 39 | +if(RX_TRACE_ENABLE) |
| 40 | + target_sources(rxnet PRIVATE src/trace.c) |
| 41 | +endif() |
| 42 | + |
| 43 | +# Public headers |
| 44 | +target_include_directories(rxnet |
| 45 | + PUBLIC |
| 46 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 47 | + $<INSTALL_INTERFACE:include> |
| 48 | +) |
| 49 | + |
| 50 | +# Compile definitions for trace (optional) |
| 51 | +if(RX_TRACE_ENABLE) |
| 52 | + target_compile_definitions(rxnet PUBLIC RX_TRACE_ENABLE) |
| 53 | +endif() |
| 54 | + |
| 55 | +if(BUILD_TESTS) |
| 56 | + enable_testing() |
| 57 | + |
| 58 | + add_executable(test_runtime tests/test_runtime.c) |
| 59 | + target_link_libraries(test_runtime PRIVATE rxnet) |
| 60 | + add_test(NAME test_runtime COMMAND test_runtime) |
| 61 | + |
| 62 | + add_executable(test_fsm tests/test_fsm.c) |
| 63 | + target_link_libraries(test_fsm PRIVATE rxnet) |
| 64 | + add_test(NAME test_fsm COMMAND test_fsm) |
| 65 | + |
| 66 | + add_executable(test_pn tests/test_pn.c) |
| 67 | + target_link_libraries(test_pn PRIVATE rxnet) |
| 68 | + add_test(NAME test_pn COMMAND test_pn) |
| 69 | + |
| 70 | + add_executable(test_trace tests/test_trace.c) |
| 71 | + target_link_libraries(test_trace PRIVATE rxnet) |
| 72 | + add_test(NAME test_trace COMMAND test_trace) |
| 73 | +endif() |
| 74 | + |
| 75 | +# ============================================================================== |
| 76 | +# Installation |
| 77 | +# ============================================================================== |
| 78 | + |
| 79 | +# Install library |
| 80 | +install(TARGETS rxnet |
| 81 | + EXPORT rxnetTargets |
| 82 | + ARCHIVE DESTINATION lib |
| 83 | +) |
| 84 | + |
| 85 | +# Install public headers |
| 86 | +install(DIRECTORY include/rxnet |
| 87 | + DESTINATION include |
| 88 | + FILES_MATCHING PATTERN "*.h" |
| 89 | +) |
| 90 | + |
| 91 | +# Install CMake config files for find_package() |
| 92 | +install(EXPORT rxnetTargets |
| 93 | + FILE rxnetTargets.cmake |
| 94 | + NAMESPACE rxnet:: |
| 95 | + DESTINATION lib/cmake/rxnet |
| 96 | +) |
| 97 | + |
| 98 | +# Generate and install version file |
| 99 | +include(CMakePackageConfigHelpers) |
| 100 | + |
| 101 | +write_basic_package_version_file( |
| 102 | + "${CMAKE_CURRENT_BINARY_DIR}/rxnetConfigVersion.cmake" |
| 103 | + VERSION ${PROJECT_VERSION} |
| 104 | + COMPATIBILITY SameMajorVersion |
| 105 | +) |
| 106 | + |
| 107 | +# Generate and install config file |
| 108 | +configure_package_config_file( |
| 109 | + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/rxnetConfig.cmake.in" |
| 110 | + "${CMAKE_CURRENT_BINARY_DIR}/rxnetConfig.cmake" |
| 111 | + INSTALL_DESTINATION lib/cmake/rxnet |
| 112 | +) |
| 113 | + |
| 114 | +install(FILES |
| 115 | + "${CMAKE_CURRENT_BINARY_DIR}/rxnetConfig.cmake" |
| 116 | + "${CMAKE_CURRENT_BINARY_DIR}/rxnetConfigVersion.cmake" |
| 117 | + DESTINATION lib/cmake/rxnet |
| 118 | +) |
| 119 | + |
| 120 | +# ============================================================================== |
| 121 | +# Package for CPack |
| 122 | +# ============================================================================== |
| 123 | + |
| 124 | +set(CPACK_PACKAGE_VENDOR "GreenLSI") |
| 125 | +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}) |
| 126 | +include(CPack) |
| 127 | + |
| 128 | +# ============================================================================== |
| 129 | +# Summary |
| 130 | +# ============================================================================== |
| 131 | + |
| 132 | +message(STATUS "") |
| 133 | +message(STATUS " rxnet ${PROJECT_VERSION}") |
| 134 | +message(STATUS " ======================================") |
| 135 | +message(STATUS " Build Type: ${CMAKE_BUILD_TYPE}") |
| 136 | +message(STATUS " Trace Enabled: ${RX_TRACE_ENABLE}") |
| 137 | +message(STATUS " Build Tests: ${BUILD_TESTS}") |
| 138 | +message(STATUS " Install Prefix: ${CMAKE_INSTALL_PREFIX}") |
| 139 | +message(STATUS "") |
0 commit comments