diff --git a/CMakeLists.txt b/CMakeLists.txt index 0793928..54f60ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,20 @@ cmake_minimum_required(VERSION 3.18) project( - conflict-set + conflict_set VERSION 0.0.1 DESCRIPTION "A data structure for detecting mvcc read-write conflicts in a keyspace of lexicographically-ordered byte sequences." LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 20) +set(DEFAULT_BUILD_TYPE "Release") + +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") + set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + add_compile_options(-fdata-sections -ffunction-sections) if(APPLE) add_link_options(-Wl,-dead_strip) @@ -17,7 +26,6 @@ include(CheckIncludeFileCXX) include(CMakePushCheckState) cmake_push_check_state() -# Fall back to non-simd implementations if avx isn't available list(APPEND CMAKE_REQUIRED_FLAGS -mavx) check_include_file_cxx("immintrin.h" HAS_AVX) if(HAS_AVX) @@ -31,8 +39,7 @@ if (HAS_ARM_NEON) add_compile_definitions(HAS_ARM_NEON) endif() -add_library(conflict_set SHARED ConflictSet.cpp) -target_include_directories(conflict_set PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) +add_library(${PROJECT_NAME} SHARED ConflictSet.cpp) target_compile_options(conflict_set PRIVATE -fPIC -fno-exceptions -fvisibility=hidden) target_link_options(conflict_set PRIVATE $<$>: -nodefaultlibs -lc>) @@ -95,3 +102,23 @@ target_link_libraries(conflict_set_cxx_api_test PRIVATE conflict_set) set_property(TARGET conflict_set_c_api_test PROPERTY CXX_STANDARD 98) set_property(TARGET conflict_set_c_api_test PROPERTY CXX_STANDARD_REQUIRED ON) add_test(NAME conflict_set_cxx_api_test COMMAND conflict_set_cxx_api_test) + +# packaging + +include(GNUInstallDirs) + +target_include_directories(${PROJECT_NAME} PUBLIC + $ + $) + +set_target_properties(${PROJECT_NAME} PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR}) + +install(TARGETS ${PROJECT_NAME} EXPORT ConflictSetConfig + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}) + +install(EXPORT ConflictSetConfig DESTINATION share/ConflictSet/cmake)