hyporo-cpp/CMakeLists.txt

164 lines
4.4 KiB
CMake
Raw Normal View History

2022-09-22 20:43:06 +05:00
cmake_minimum_required (VERSION 3.16)
2023-03-13 22:27:09 +05:00
#
set(HPR_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
set(HPR_EXTERNAL_PATH "${HPR_MODULE_PATH}/external")
set(HPR_TOOLCHAINS_PATH "${HPR_MODULE_PATH}/toolchains")
2022-11-18 21:50:49 +05:00
2023-03-13 22:27:09 +05:00
set(HPR_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/source")
2022-09-22 20:43:06 +05:00
2023-03-13 22:27:09 +05:00
# toolchain
#if (MINGW)
# set(CMAKE_TOOLCHAIN_FILE "${HPR_TOOLCHAINS_PATH}/mingw-gcc.cmake")
#else()
# set(CMAKE_TOOLCHAIN_FILE "${HPR_TOOLCHAINS_PATH}/linux-gcc.cmake")
#endif()
2022-11-18 21:50:49 +05:00
2023-03-13 22:27:09 +05:00
# Extract project version from source
include(${HPR_MODULE_PATH}/hpr-macros.cmake)
hpr_parse_version("${HPR_SOURCE_DIR}/hpr/hpr.hpp" "#define HPR_VERSION_(MAJOR|MINOR|PATCH)")
2022-11-04 18:38:39 +05:00
2022-12-06 23:52:49 +05:00
# Main project
2022-09-22 20:43:06 +05:00
project(
2022-12-13 23:09:36 +05:00
hpr
2023-03-13 22:27:09 +05:00
VERSION "${HPR_VERSION}"
2022-09-22 20:43:06 +05:00
LANGUAGES CXX
)
2023-03-13 22:27:09 +05:00
# Compiler settings
set(CMAKE_CXX_STANDARD 20)
2022-12-13 23:09:36 +05:00
# Detect how project is used
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
set(lines
"You are building in-place. If that is not what you intended to "
"do, you can clean the source directory with:\n"
"rm -r CMakeCache.txt CMakeFiles/ cmake_uninstall.cmake hprConfig.cmake "
"hprConfigVersion.cmake\n")
message(AUTHOR_WARNING ${lines})
endif()
2023-03-13 22:27:09 +05:00
set(HPR_IS_TOP_LEVEL ON)
2022-12-13 23:09:36 +05:00
else()
2023-03-13 22:27:09 +05:00
set(HPR_IS_TOP_LEVEL OFF)
2022-12-13 23:09:36 +05:00
endif()
2023-03-13 22:27:09 +05:00
# Project options
option(HPR_INSTALL "Install hpr files?" ${HPR_IS_TOP_LEVEL})
option(HPR_TEST "Build hpr tests?" ${HPR_IS_TOP_LEVEL})
2022-12-13 23:09:36 +05:00
2023-03-13 22:27:09 +05:00
# Installation settings
2022-12-13 23:09:36 +05:00
include(GNUInstallDirs)
2023-03-13 22:27:09 +05:00
set(HPR_INSTALL_INTERFACE "$<INSTALL_INTERFACE:include/${PROJECT_NAME}") # ! '>' not included
# Package manager
include(${HPR_MODULE_PATH}/tools/CPM.cmake)
2022-09-22 20:43:06 +05:00
2022-12-13 23:09:36 +05:00
# Testing
if(HPR_TEST)
enable_testing()
2022-09-22 20:43:06 +05:00
2023-03-13 22:27:09 +05:00
include("${HPR_EXTERNAL_PATH}/googletest.cmake")
2022-09-22 20:43:06 +05:00
include(GoogleTest)
endif()
2023-03-13 22:27:09 +05:00
# Uninstall target
if (NOT TARGET uninstall)
configure_file(
"${CMAKE_CURRENT_LIST_DIR}/cmake/templates/cmake_uninstall.cmake.in" cmake_uninstall.cmake
IMMEDIATE @ONLY
)
add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${PROJECT_BINARY_DIR}/cmake_uninstall.cmake")
endif()
2022-12-13 23:09:36 +05:00
# Modules
2023-03-13 22:27:09 +05:00
option(HPR_WITH_CONTAINERS "" ON)
option(HPR_WITH_MATH "" ON)
option(HPR_WITH_IO "" ON)
option(HPR_WITH_MESH "" ON)
option(HPR_WITH_CSG "" ON)
option(HPR_WITH_GPU "" ON)
option(HPR_WITH_PARALLEL "" ON)
include_directories(${HPR_SOURCE_DIR})
2022-12-13 23:09:36 +05:00
add_subdirectory(source/hpr)
2023-03-13 22:27:09 +05:00
hpr_collect_modules()
2022-12-13 23:09:36 +05:00
# Main library
2023-03-13 22:27:09 +05:00
add_library(hpr SHARED source/hpr/hpr.cpp)
2022-12-13 23:09:36 +05:00
add_library(hpr::hpr ALIAS hpr)
target_sources(hpr
2023-03-13 22:27:09 +05:00
INTERFACE "$<BUILD_INTERFACE:source/hpr/hpr.hpp>" "${HPR_INSTALL_INTERFACE}>"
2022-12-13 23:09:36 +05:00
)
target_link_libraries(hpr
2023-03-13 22:27:09 +05:00
INTERFACE ${HPR_INTERFACE_LIBS}
PUBLIC ${HPR_PUBLIC_LIBS}
2022-12-13 23:09:36 +05:00
)
2023-03-13 22:27:09 +05:00
# Installation
if (HPR_INSTALL)
include(CMakePackageConfigHelpers)
2022-12-13 23:09:36 +05:00
2023-03-13 22:27:09 +05:00
configure_package_config_file(
"${HPR_MODULE_PATH}/templates/Config.cmake.in" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
2022-12-13 23:09:36 +05:00
2023-03-13 22:27:09 +05:00
write_basic_package_version_file(
"${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion
)
install(FILES
${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} COMPONENT devel
)
install(
2022-12-13 23:09:36 +05:00
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
2023-03-13 22:27:09 +05:00
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} COMPONENT devel
)
install(
2022-12-13 23:09:36 +05:00
EXPORT ${PROJECT_NAME}Targets
2023-03-13 22:27:09 +05:00
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} COMPONENT devel
2022-12-13 23:09:36 +05:00
NAMESPACE ${CMAKE_PROJECT_NAME}::
2023-03-13 22:27:09 +05:00
)
install(
FILES source/${PROJECT_NAME}/${PROJECT_NAME}.hpp
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} COMPONENT devel
)
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
set(CPACK_PACKAGE_VERSION "${HPR_VERSION}")
include(CPack)
cpack_add_component(devel DISPLAY_NAME "Development")
cpack_add_component(runtime DISPLAY_NAME "Runtime libraries")
endif()
2022-12-13 23:09:36 +05:00
# Project summary
2023-03-13 22:27:09 +05:00
hpr_print_summary()
2022-12-13 23:09:36 +05:00
# Documentation
#add_subdirectory(docs)
2022-10-05 21:10:51 +05:00
2022-12-13 23:09:36 +05:00
# Additional applications
2023-03-13 22:27:09 +05:00
add_subdirectory(source/creator)
2023-01-11 14:46:49 +05:00
add_subdirectory(source/applications)