commit 9aea122b0850262bd1a505afc31d725bd4e07990 Author: Timur A. Fatkhullin Date: Sun Jan 18 17:57:52 2026 +0300 Initial commmit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9be39f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +CMakeLists.txt.user +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a678455 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,126 @@ +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() diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in new file mode 100644 index 0000000..929b6a0 --- /dev/null +++ b/cmake_uninstall.cmake.in @@ -0,0 +1,5 @@ +message(STATUS "Uninstall mcc package ...") +message(STATUS "remove config files dir: @CMAKE_INSTALL_PREFIX@/@MCC_CONFIG_INSTALLDIR@") +file(REMOVE_RECURSE "@CMAKE_INSTALL_PREFIX@/@MCC_CONFIG_INSTALLDIR@") +message(STATUS "remove header files dir: @CMAKE_INSTALL_PREFIX@/@MCC_HEADERS_INSTALLDIR@") +file(REMOVE_RECURSE "@CMAKE_INSTALL_PREFIX@/@MCC_HEADERS_INSTALLDIR@") diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..540aaa0 --- /dev/null +++ b/main.cpp @@ -0,0 +1,8 @@ +#include +#include + +int main() +{ + std::cout << "AAA\n"; + return 0; +} diff --git a/mccConfig.cmake.in b/mccConfig.cmake.in new file mode 100644 index 0000000..71d669d --- /dev/null +++ b/mccConfig.cmake.in @@ -0,0 +1,7 @@ +@PACKAGE_INIT@ + +set_and_check(mcc_INCLUDE_DIR "@PACKAGE_HWT_HEADERS_INSTALLDIR@") + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") + diff --git a/mcc_concepts.h b/mcc_concepts.h new file mode 100644 index 0000000..e69de29 diff --git a/mcc_epoch.h b/mcc_epoch.h new file mode 100644 index 0000000..e69de29