Files
versioned-map/CMakeLists.txt

91 lines
3.3 KiB
CMake

cmake_minimum_required(VERSION 3.18)
project(
versioned-map
VERSION 0.0.1
DESCRIPTION
"A data structure for mvcc reads on bitwise-lexicographically-ordered keys."
HOMEPAGE_URL "https://git.weaselab.dev/weaselab/versioned-map"
LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
file(WRITE ${CMAKE_BINARY_DIR}/version.txt ${PROJECT_VERSION})
include(CMakePushCheckState)
include(CheckCXXSourceCompiles)
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 -Wswitch-enum
-Werror=switch-enum -fPIC)
set(full_relro_flags "-pie;LINKER:-z,relro,-z,now,-z,noexecstack")
cmake_push_check_state()
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${full_relro_flags})
check_cxx_source_compiles("int main(){}" HAS_FULL_RELRO FAIL_REGEX "warning:")
if(HAS_FULL_RELRO)
add_link_options(${full_relro_flags})
endif()
cmake_pop_check_state()
set(version_script_flags LINKER:--version-script=${CMAKE_SOURCE_DIR}/linker.map)
cmake_push_check_state()
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${version_script_flags})
check_cxx_source_compiles("int main(){}" HAS_VERSION_SCRIPT FAIL_REGEX
"warning:")
cmake_pop_check_state()
# This is encouraged according to
# https://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.clientreq
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/third_party/valgrind)
if(APPLE)
add_link_options(-Wl,-dead_strip)
else()
add_link_options(-Wl,--gc-sections)
endif()
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
add_subdirectory(third_party)
add_executable(versioned_map_main VersionedMap.cpp RootSet.cpp)
target_include_directories(versioned_map_main
PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(versioned_map_main PRIVATE nanobench xxhash)
target_compile_definitions(versioned_map_main PRIVATE ENABLE_MAIN)
add_library(versioned_map VersionedMap.cpp RootSet.cpp)
target_link_libraries(versioned_map PRIVATE xxhash)
target_compile_options(versioned_map PRIVATE -fno-exceptions)
target_include_directories(versioned_map PUBLIC ${CMAKE_SOURCE_DIR}/include)
set_target_properties(versioned_map PROPERTIES LINKER_LANGUAGE C)
include(CTest)
if(BUILD_TESTING)
add_executable(rootset_test RootSet.cpp)
target_compile_definitions(rootset_test PRIVATE ENABLE_ROOTSET_TESTS)
target_compile_options(rootset_test PRIVATE -fsanitize=address,undefined
-UNDEBUG)
target_link_options(rootset_test PRIVATE -fsanitize=address,undefined)
add_test(NAME rootset_test COMMAND rootset_test)
add_executable(rootset_test_tsan RootSet.cpp)
target_compile_definitions(rootset_test_tsan PRIVATE ENABLE_ROOTSET_TESTS)
target_compile_options(rootset_test_tsan PRIVATE -fsanitize=thread -UNDEBUG)
target_link_options(rootset_test_tsan PRIVATE -fsanitize=thread)
add_test(NAME rootset_test_tsan COMMAND rootset_test)
endif()