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)
|