rml/CMakeLists.txt

74 lines
2.7 KiB
CMake

project(librml)
cmake_minimum_required(VERSION 3.0.2)
include(GNUInstallDirs)
set(librml_VERSION_STRING "000010000L")
set(librml_VERSION_MAJOR 0)
set(librml_VERSION_MINOR 1)
set(librml_VERSION_REVISION 0)
set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include)
include_directories(BEFORE SYSTEM "${INCLUDE_PATH}")
option(ENABLE_SHARED "Build shared library" ON)
option(ENABLE_PROFILING "Enable asan" OFF)
option(BUILD_TESTS "Enable testing" OFF)
option(BUILD_COMMON_INSTANTIATIONS "Build common template instantiations into a library" OFF)
mark_as_advanced(ENABLE_PROFILING)
if(BUILD_COMMON_INSTANTIATIONS)
set(SOURCE_LIST "src/instantiations.cpp")
if(ENABLE_SHARED)
add_library(rml SHARED ${SOURCE_LIST})
set_target_properties(rml PROPERTIES SOVERSION "${librml_VERSION_MAJOR}.${librml_VERSION_MINOR}")
set(LIBRML_LIBFLAGS "-lrml")
target_link_libraries(rml "")
else()
add_library(rml STATIC ${SOURCE_LIST})
set(LIBRML_LIBFLAGS "-lrml")
target_link_libraries(rml "")
endif()
set_target_properties(rml PROPERTIES VERSION "${librml_VERSION_MAJOR}.${librml_VERSION_MINOR}.${librml_VERSION_REVISION}")
target_compile_options(rml PRIVATE -Wall -Wextra -pedantic -std=c++20)
if(ENABLE_PROFILING)
target_compile_options(rml PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls)
target_link_options(rml PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls)
endif()
install(TARGETS rml
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
set(LIBRML_INSTANTIATIONS_ENABLED "1")
else()
set(LIBRML_LIBFLAGS "")
set(LIBRML_INSTANTIATIONS_ENABLED "0")
endif()
add_library(ensure OBJECT "src/ensure.cpp")
target_compile_options(ensure PRIVATE -Wall -Wextra -pedantic -std=c++20)
#if(BUILD_TESTS)
# enable_testing()
# add_subdirectory(tests)
#endif()
set(LIBRML_PUBLIC_HEADERS "include/rml/debug.hpp" "include/rml/fwd_declare.hpp" "include/rml/math_common.hpp" "include/rml/math.hpp" "include/rml/mat.hpp" "include/rml/mat.tpp" "include/rml/projection.hpp" "include/rml/projection.tpp" "include/rml/quat.hpp" "include/rml/quat.tpp" "include/rml/rml.hpp" "include/rml/vec.hpp" "include/rml/vec.tpp")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/librml.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)
install(FILES ${LIBRML_PUBLIC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/rml/")
install(DIRECTORY "include/rml/detail" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/rml" FILES_MATCHING PATTERN "*.hpp" PATTERN "*.tpp")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/pc/librml.pc.cmake.in"
"${CMAKE_CURRENT_SOURCE_DIR}/pc/librml.pc"
@ONLY
)
configure_file(
"${INCLUDE_PATH}/rml/rml.hpp.in"
"${INCLUDE_PATH}/rml/rml.hpp"
)
add_custom_target(uninstall cat install_manifest.txt | xargs rm)