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= # 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= BUILD_COMMAND ninja -C INSTALL_COMMAND meson install -C 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 mcc_utils.h ) set(CNTR_PROTO_LIB comm_proto) add_library(${CNTR_PROTO_LIB} STATIC ${CNTR_PROTO_LIB_SRC}) include_directories(${FITPACK_INCLUDE_DIR}) set(MCC_LIBRARY_SRC mcc_mount_concepts.h mcc_fsm_mount.h mcc_generic_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_astrom.h mcc_mount_telemetry.h mcc_mount_config.h mcc_mount_astro_erfa.h mcc_astrom_iers.h mcc_astrom_iers_default.h mcc_slew_model.h mcc_guiding_model.h mcc_slew_guiding_model_common.h mcc_utils.h mcc_spdlog.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(ASIBFM700_LIB_SRC asibfm700_common.h asibfm700_hardware.h asibfm700_hardware.cpp) set(ASIBFM700_LIB asibfm700) add_library(${ASIBFM700_LIB} STATIC ${ASIBFM700_LIB_SRC}) target_include_directories(${ASIBFM700_LIB} PRIVATE ${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_include_directories(${ASTROM_TEST_APP} PRIVATE ${FITPACK_INCLUDE_DIR}) 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()