177 lines
6.4 KiB
CMake
177 lines
6.4 KiB
CMake
cmake_minimum_required(VERSION 3.14)
|
|
|
|
# set(CMAKE_BUILD_TYPE Release)
|
|
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
|
|
|
|
option(USE_XSIMD "Use of XSIMD library to generate vectorized code" ON)
|
|
|
|
|
|
find_package(ASIO QUIET)
|
|
if (ASIO_FOUND)
|
|
# message(STATUS "ASIO library was found")
|
|
else()
|
|
message(STATUS "ASIO library was not found! Try to download it!")
|
|
|
|
include(FetchContent)
|
|
include(ExternalProject)
|
|
|
|
FetchContent_Declare(asio_lib
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}/asio_lib
|
|
BINARY_DIR ${CMAKE_BINARY_DIR}
|
|
GIT_REPOSITORY "https://github.com/chriskohlhoff/asio"
|
|
GIT_TAG "asio-1-32-0"
|
|
GIT_SHALLOW TRUE
|
|
GIT_SUBMODULES ""
|
|
GIT_PROGRESS TRUE
|
|
)
|
|
FetchContent_MakeAvailable(asio_lib)
|
|
# FetchContent_GetProperties(asio_lib SOURCE_DIR asio_SOURCE_DIR)
|
|
|
|
set(ASIO_INSTALL_DIR ${CMAKE_BINARY_DIR}/asio_lib/asio)
|
|
find_package(ASIO)
|
|
endif()
|
|
|
|
# find_package(spdlog CONFIG)
|
|
|
|
set(spdlog_FOUND FALSE )
|
|
if (NOT spdlog_FOUND)
|
|
message(STATUS "SPDLOG libarary was not found! Try to download it!")
|
|
|
|
include(FetchContent)
|
|
include(ExternalProject)
|
|
|
|
set(SPDLOG_USE_STD_FORMAT ON CACHE INTERNAL "Use of C++20 std::format")
|
|
set(SPDLOG_FMT_EXTERNAL OFF CACHE INTERNAL "Turn off external fmt library")
|
|
|
|
FetchContent_Declare(spdlog
|
|
# ExternalProject_Add(spdlog
|
|
# SOURCE_DIR ${CMAKE_BINARY_DIR}/spdlog_lib
|
|
# BINARY_DIR ${CMAKE_BINARY_DIR}/spdlog_lib/build
|
|
GIT_REPOSITORY "https://github.com/gabime/spdlog.git"
|
|
GIT_TAG "v1.15.1"
|
|
GIT_SHALLOW TRUE
|
|
GIT_SUBMODULES ""
|
|
GIT_PROGRESS TRUE
|
|
CMAKE_ARGS "-DSPDLOG_USE_STD_FORMAT=ON -DSPDLOG_FMT_EXTERNAL=OFF"
|
|
# CONFIGURE_COMMAND ""
|
|
# BUILD_COMMAND ""
|
|
# INSTALL_COMMAND ""
|
|
# UPDATE_COMMAND ""
|
|
# SOURCE_SUBDIR cmake # turn off building
|
|
OVERRIDE_FIND_PACKAGE
|
|
)
|
|
# FetchContent_MakeAvailable(spdlog)
|
|
# FetchContent_GetProperties(spdlog_lib SOURCE_DIR spdlog_SOURCE_DIR)
|
|
find_package(spdlog CONFIG)
|
|
endif()
|
|
|
|
add_compile_definitions(SPDLOG_USE_STD_FORMAT)
|
|
add_compile_definitions(SPDLOG_FMT_EXTERNAL=0)
|
|
|
|
if (USE_XSIMD)
|
|
# fetch XSIMD library
|
|
add_compile_definitions(VEC_XSIMD)
|
|
endif()
|
|
|
|
# ERFA library
|
|
include(ExternalProject)
|
|
ExternalProject_Add(erfalib
|
|
PREFIX ${CMAKE_BINARY_DIR}/erfa_lib
|
|
GIT_REPOSITORY "https://github.com/liberfa/erfa.git"
|
|
GIT_TAG "v2.0.1"
|
|
UPDATE_COMMAND ""
|
|
PATCH_COMMAND ""
|
|
# BINARY_DIR erfa_build
|
|
# SOURCE_DIR erfa
|
|
# INSTALL_DIR
|
|
LOG_CONFIGURE 1
|
|
CONFIGURE_COMMAND meson setup --reconfigure -Ddefault_library=static -Dbuildtype=release
|
|
-Dprefix=${CMAKE_BINARY_DIR}/erfa_lib -Dlibdir= -Dincludedir= -Ddatadir= <SOURCE_DIR>
|
|
# CONFIGURE_COMMAND meson setup --reconfigure -Ddefault_library=static -Dbuildtype=release -Dc_args='-march=native' -Doptimization=3
|
|
# -Dprefix=${CMAKE_BINARY_DIR}/erfa_lib -Dlibdir= -Dincludedir= -Ddatadir= <SOURCE_DIR>
|
|
BUILD_COMMAND ninja -C <BINARY_DIR>
|
|
INSTALL_COMMAND meson install -C <BINARY_DIR>
|
|
BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/erfa_lib/liberfa.a
|
|
)
|
|
add_library(ERFA_LIB STATIC IMPORTED)
|
|
set_target_properties(ERFA_LIB PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/erfa_lib/liberfa.a)
|
|
add_dependencies(ERFA_LIB erfalib)
|
|
set(ERFA_INCLUDE_DIR ${CMAKE_BINARY_DIR}/erfa_lib)
|
|
include_directories(${ERFA_INCLUDE_DIR})
|
|
|
|
option(WITH_TESTS "Build tests" ON)
|
|
|
|
|
|
add_subdirectory(fitpack)
|
|
|
|
# Mount client-to-server communication protocol
|
|
# (extended LX200 protocol)
|
|
#
|
|
|
|
# set(CNTR_PROTO_LIB_SRC comm_proto.h comm_proto.cpp)
|
|
set(CNTR_PROTO_LIB_SRC
|
|
control_proto.h
|
|
control_proto.cpp
|
|
utils.h
|
|
)
|
|
|
|
set(CNTR_PROTO_LIB comm_proto)
|
|
add_library(${CNTR_PROTO_LIB} STATIC ${CNTR_PROTO_LIB_SRC})
|
|
|
|
|
|
set(MCC_LIBRARY_SRC mcc_mount.h mcc_mount_coord.h mcc_mount_events_states.h mcc_finite_state_machine.h
|
|
mcc_mount_pec.h mcc_mount_pz.h mcc_traits.h mcc_mount_telemetry.h mcc_mount_config.h mcc_mount_astro_erfa.h)
|
|
set(MCC_LIBRARY mcc)
|
|
add_library(${MCC_LIBRARY} INTERFACE ${MCC_LIBRARY_SRC})
|
|
target_compile_features(${MCC_LIBRARY} INTERFACE cxx_std_23)
|
|
target_include_directories(${MCC_LIBRARY} INTERFACE ${FITPACK_INCLUDE_DIR})
|
|
|
|
# set(MOUNT_SERVER_APP_SRC mount.h mount_state.h mount_server.cpp comm_server.h comm_server_endpoint.h comm_server_configfile.h mount_astrom.h
|
|
# mount_astrom_default.h mcc_coord.h mount_pz.h mcc_fsm.h mcc_fsm_utils.h mcc_finite_state_machine.h mcc_mount_events_states.h)
|
|
# set(MOUNT_SERVER_APP mount_server)
|
|
# add_executable(${MOUNT_SERVER_APP} ${MOUNT_SERVER_APP_SRC})
|
|
# # target_include_directories(${MOUNT_SERVER_APP} PUBLIC ${ERFA_INCLUDE_DIR})
|
|
# target_link_libraries(${MOUNT_SERVER_APP} ${CNTR_PROTO_LIB} spdlog::spdlog_header_only ERFA_LIB)
|
|
|
|
if (WITH_TESTS)
|
|
# set(CNTR_PROTO_TEST_APP cntr_proto_test)
|
|
# add_executable(${CNTR_PROTO_TEST_APP} tests/cntr_proto_test.cpp)
|
|
# target_link_libraries(${CNTR_PROTO_TEST_APP} ${CNTR_PROTO_LIB} spdlog::spdlog_header_only)
|
|
# # target_link_libraries(${CNTR_PROTO_TEST_APP} ${CNTR_PROTO_LIB})
|
|
# # target_include_directories(${CNTR_PROTO_TEST_APP} PUBLIC ${SPDLOG_INCLUDE_DIRS})
|
|
|
|
# set(CFGFILE_TEST_APP configfile_test)
|
|
# add_executable(${CFGFILE_TEST_APP} tests/configfile_test.cpp)
|
|
|
|
set(ASTROM_TEST_APP astrom_test)
|
|
add_executable(${ASTROM_TEST_APP} tests/astrom_test.cpp)
|
|
target_link_libraries(${ASTROM_TEST_APP} ERFA_LIB)
|
|
|
|
set(FITPACK_TEST_APP fitpack_test)
|
|
add_executable(${FITPACK_TEST_APP} tests/fitpack_test.cpp)
|
|
target_link_libraries(${FITPACK_TEST_APP} fitpack)
|
|
target_include_directories(${FITPACK_TEST_APP} PRIVATE ${FITPACK_INCLUDE_DIR})
|
|
# message(STATUS "INC UP: " ${FITPACK_INCLUDE_DIR})
|
|
|
|
# set(FSM_TEST_APP fsm_test)
|
|
# add_executable(${FSM_TEST_APP} tests/fsm_test.cpp)
|
|
|
|
|
|
# set(TESTS_SRC tests/coord.cpp tests/fsm.cpp tests/mount.cpp)
|
|
# create_test_sourcelist(Tests common_tests.cpp ${TESTS_SRC})
|
|
# add_executable(common_tests ${Tests})
|
|
# target_include_directories(common_tests PRIVATE ${FITPACK_INCLUDE_DIR})
|
|
# target_link_libraries(common_tests fitpack)
|
|
|
|
# foreach (test ${TESTS_SRC})
|
|
# get_filename_component (TName ${test} NAME_WE)
|
|
# add_test (NAME ${TName} COMMAND common_tests tests/${TName})
|
|
# endforeach ()
|
|
|
|
enable_testing()
|
|
endif()
|