cmake_minimum_required(VERSION 3.14) # ******* MOUNT CONTROL COMPONENTS ******* project(mcc LANGUAGES C CXX Fortran VERSION 0.1) # 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 ******* find_package(PkgConfig REQUIRED) pkg_check_modules(ERFALIB IMPORTED_TARGET GLOBAL erfa) if (NOT ERFALIB_FOUND) message(STATUS "\tfetch erfa-lib ...") 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 "" LOG_CONFIGURE 1 CONFIGURE_COMMAND meson setup --reconfigure -Ddefault_library=static -Dbuildtype=release -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(PkgConfig::ERFALIB STATIC IMPORTED GLOBAL) set_target_properties(PkgConfig::ERFALIB PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/erfa_lib/liberfa.a) set_target_properties(PkgConfig::ERFALIB PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/erfa_lib) add_dependencies(PkgConfig::ERFALIB erfalib) #pkg_check_modules(ERFALIB REQUIRED IMPORTED_TARGET GLOBAL erfa) endif() #message(STATUS "ERFA LIBS: ${ERFALIB_LIBRARIES}") #message(STATUS "ERFA LIB PATHS: ${ERFALIB_LIBRARY_DIRS}") #message(STATUS "ERFA INC PATHS: ${ERFALIB_INCLUDE_DIRS}") #add_executable(ex main.cpp) #target_link_libraries(ex PkgConfig::ERFALIB) #target_link_libraries(ex ee) set(MCC_SRC mcc_concepts.h mcc_epoch.h) add_library(${PROJECT_NAME} INTERFACE ${MCC_SRC}) target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_23) target_link_libraries(${PROJECT_NAME} INTERFACE PkgConfig::ERFALIB) target_include_directories( ${PROJECT_NAME} INTERFACE $ $ ) include(CMakePackageConfigHelpers) write_basic_package_version_file("${PROJECT_NAME}ConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion) set(MCC_CONFIG_INSTALLDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} CACHE PATH "install path for generated library config files") set(MCC_HEADERS_INSTALLDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "install path for headers") configure_package_config_file("${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION ${MCC_CONFIG_INSTALLDIR} PATH_VARS MCC_HEADERS_INSTALLDIR) #install(EXPORT ${PROJECT_NAME}_Targets FILE ${PROJECT_NAME}Targets.cmake NAMESPACE ${PROJECT_NAME_NAMESPACE}:: DESTINATION ${MCC_CONFIG_INSTALLDIR}) #install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION ${MCC_CONFIG_INSTALLDIR}) #install(FILES ${MCC_SRC} DESTINATION include/${PROJECT_NAME}) # uninstall target if(NOT TARGET uninstall) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif()