91ccd16b33
This makes the initialization sequence much cleaner and conceptually well encapsulated. We also now dynamically allocate the Mind objects. They're allocated dynamically by Mrntt inside of initializeReq. This means that we no longer have to worry about jolting and cleaning up the running threads of global mind object even when we never explicitly called Mind.initializeReq. Along with other conceptual improvements to our abstractions, this patch also gets us to a real "end of program initialization" point for the first time.
76 lines
2.0 KiB
CMake
76 lines
2.0 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(salmanoff VERSION 0.00.004 LANGUAGES CXX)
|
|
|
|
include(CMakeDependentOption)
|
|
|
|
# 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)
|
|
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)
|
|
|
|
# Configure config.h
|
|
configure_file(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/include/config.h
|
|
@ONLY
|
|
)
|
|
|
|
# Include directories
|
|
include_directories(
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/smocore/include
|
|
${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)
|
|
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")
|
|
endif()
|
|
|
|
# Add core components
|
|
add_subdirectory(smocore)
|
|
add_subdirectory(commonLibs)
|
|
add_subdirectory(senseApis)
|
|
add_subdirectory(wilzorApis)
|
|
|
|
# Main executable
|
|
add_executable(salmanoff main.cpp)
|
|
target_link_libraries(salmanoff
|
|
smocore
|
|
marionette
|
|
deviceManager
|
|
senseApis
|
|
${Boost_LIBRARIES}
|
|
${DL_LIBRARY}
|
|
)
|
|
|
|
install(TARGETS salmanoff DESTINATION bin)
|