106 lines
3.8 KiB
CMake
106 lines
3.8 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")
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
# ******* SPDLOG LIBRARY *******
|
|
|
|
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")
|
|
|
|
find_package(spdlog CONFIG)
|
|
if (NOT ${spdlog_FOUND})
|
|
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
|
|
)
|
|
find_package(spdlog CONFIG)
|
|
endif()
|
|
|
|
# ******* ERFA LIBRARY *******
|
|
|
|
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>
|
|
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 GLOBAL)
|
|
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)
|
|
# set(ERFA_LIBFILE ${CMAKE_BINARY_DIR}/erfa_lib/liberfa.a PARENT_SCOPE)
|
|
include_directories(${ERFA_INCLUDE_DIR})
|
|
message(STATUS "ERFA INCLUDE DIR: " ${ERFA_INCLUDE_DIR})
|
|
|
|
add_subdirectory(bsplines)
|
|
message(STATUS "BSPLINES_INCLUDE_DIR: " ${BSPLINES_INCLUDE_DIR})
|
|
include_directories(${BSPLINES_INCLUDE_DIR})
|
|
|
|
set(MCC_LIBRARY_SRC mcc_generics.h mcc_defaults.h mcc_traits.h mcc_utils.h
|
|
mcc_ccte_iers.h mcc_ccte_iers_default.h mcc_ccte_erfa.h mcc_pcm.h mcc_telemetry.h
|
|
mcc_angle.h mcc_pzone.h mcc_pzone_container.h mcc_finite_state_machine.h
|
|
mcc_generic_mount.h mcc_tracking_model.h mcc_slewing_model.h mcc_moving_model_common.h
|
|
mcc_netserver_endpoint.h mcc_netserver.h mcc_netserver_proto.h)
|
|
|
|
list(APPEND MCC_LIBRARY_SRC 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_compile_definitions(${MCC_LIBRARY} INTERFACE SPDLOG_USE_STD_FORMAT=1 SPDLOG_FMT_EXTERNAL=0)
|
|
target_link_libraries(${MCC_LIBRARY} INTERFACE spdlog Threads::Threads atomic ${ERFA_LIB})
|
|
target_include_directories(${MCC_LIBRARY} INTERFACE ${ERFA_INCLUDE_DIR} ${BSPLINES_INCLUDE_DIR})
|
|
target_include_directories(${MCC_LIBRARY} INTERFACE
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/mcc>
|
|
)
|
|
|
|
|
|
option(WITH_TESTS "Build tests" ON)
|
|
|
|
if (WITH_TESTS)
|
|
set(CTTE_TEST_APP ccte_test)
|
|
add_executable(${CTTE_TEST_APP} tests/ccte_test.cpp)
|
|
target_include_directories(${CTTE_TEST_APP} PRIVATE ${ERFA_INCLUDE_DIR})
|
|
target_link_libraries(${CTTE_TEST_APP} ERFA_LIB bsplines)
|
|
|
|
set(NETMSG_TESTS_APP netmsg_test)
|
|
add_executable(${NETMSG_TESTS_APP} tests/netmsg_test.cpp)
|
|
target_link_libraries(${NETMSG_TESTS_APP} mcc)
|
|
|
|
enable_testing()
|
|
endif()
|