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)