Files
salmanoff/CMakeLists.txt
T

117 lines
3.3 KiB
CMake
Raw Normal View History

2025-07-22 02:46:16 -04:00
cmake_minimum_required(VERSION 3.16)
project(salmanoff VERSION 0.00.004 LANGUAGES CXX)
2025-07-22 02:46:16 -04:00
include(CMakeDependentOption)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/DAPSS.cmake)
2025-07-22 02:46:16 -04:00
# Set C++ standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug FORCE)
2025-07-22 02:46:16 -04:00
endif()
# Compiler flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")
# Mind oscillator configuration
set(MIND_VOSCILLATOR_PERIOD_MS 33 CACHE STRING "Mind's virtual osc clock rate (ms)")
if(NOT MIND_VOSCILLATOR_PERIOD_MS GREATER 0)
message(FATAL_ERROR "MIND_VOSCILLATOR_PERIOD_MS must be a positive integer > 0")
endif()
math(EXPR MIND_VOSCILLATOR_FREQ_MS "1000 / ${MIND_VOSCILLATOR_PERIOD_MS}")
# World thread configuration
option(WORLD_USE_BODY_THREAD
"Use body thread for world component instead of separate world thread" OFF)
# Qutex deadlock detection configuration
set(DEBUG_CONFIG_QUTEX_DEADLOCK_TIMEOUT_MS 500 CACHE STRING
"Timeout in milliseconds for deadlock detection in qutex system")
if(NOT DEBUG_CONFIG_QUTEX_DEADLOCK_TIMEOUT_MS GREATER 0)
message(FATAL_ERROR "DEBUG_CONFIG_QUTEX_DEADLOCK_TIMEOUT_MS must be a positive integer > 0")
endif()
2025-09-20 19:41:57 -04:00
# Test configuration
option(ENABLE_TESTS "Enable building tests" OFF)
2025-07-22 02:46:16 -04:00
# Configure config.h
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.in
${CMAKE_CURRENT_BINARY_DIR}/include/config.h
@ONLY
2025-07-22 02:46:16 -04:00
)
# Include directories
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/include
2025-07-22 06:15:12 -04:00
${CMAKE_CURRENT_SOURCE_DIR}/smocore/include
2025-07-22 02:46:16 -04:00
${CMAKE_CURRENT_BINARY_DIR}/include
)
# Find core dependencies
# Boost 1.72.0 is required to ensure that a certain bug where boost::asio
# objects depend on specific copies of symbols, and boost will cause a segfault
# if boost::asio objects are used inside of a dlopen()'d library, is fixed.
find_package(Boost 1.73.0 REQUIRED COMPONENTS system)
2025-07-22 02:46:16 -04:00
find_package(PkgConfig REQUIRED)
find_package(FLEX REQUIRED)
find_package(BISON REQUIRED)
# Need dlopen() and dlsym()
find_library(DL_LIBRARY NAMES dl ldl)
if(NOT DL_LIBRARY)
message(FATAL_ERROR "Dynamic linking library (libdl/libldl) not found")
2025-07-22 02:46:16 -04:00
endif()
2025-09-20 19:41:57 -04:00
# Add third-party dependencies
if(ENABLE_TESTS)
add_subdirectory(third_party)
endif()
# Add core components
2025-07-22 06:15:12 -04:00
add_subdirectory(smocore)
2025-07-22 02:46:16 -04:00
add_subdirectory(commonLibs)
add_subdirectory(senseApis)
add_subdirectory(wilzorApis)
add_subdirectory(devices)
2025-07-22 02:46:16 -04:00
# Main executable
2025-07-22 06:00:00 -04:00
add_executable(salmanoff main.cpp)
target_link_libraries(salmanoff
2025-07-22 06:15:12 -04:00
smocore
2025-07-22 02:46:16 -04:00
${Boost_LIBRARIES}
${DL_LIBRARY}
2025-07-22 02:46:16 -04:00
)
# Add all registered DAPSS targets as dependencies
add_all_daps_dependencies()
2025-09-20 19:41:57 -04:00
# Add tests if enabled
if(ENABLE_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
2025-07-22 06:00:00 -04:00
install(TARGETS salmanoff DESTINATION bin)
2025-09-16 22:19:48 -04:00
# Install device configuration files (preprocessed .daps files)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/devices/
DESTINATION share/salmanoff/devices
FILES_MATCHING PATTERN "*.daps"
)
# Install documentation
install(FILES README.md DESTINATION share/doc/salmanoff)
install(FILES LICENSE DESTINATION share/doc/salmanoff)
# Install example configurations if they exist
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples")
install(DIRECTORY examples/ DESTINATION share/salmanoff/examples)
endif()
# Include CPack configuration
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPackConfig.cmake)
include(CPack)