Skip to content

Commit

Permalink
Make sanitizers a build type instead of option
Browse files Browse the repository at this point in the history
  • Loading branch information
jp-dark committed Oct 8, 2024
1 parent bffa967 commit 6880ccf
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 35 deletions.
71 changes: 37 additions & 34 deletions libtiledbsoma/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ option(TILEDB_VERBOSE "If true, sets default logging to verbose for TileDB" OFF)
option(OVERRIDE_INSTALL_PREFIX "Ignores the setting of CMAKE_INSTALL_PREFIX and sets a default prefix" ON)
option(ENABLE_ARROW_EXPORT "Installs an extra header for exporting in-memory results with Apache Arrow" ON)
option(TILEDB_LOG_OUTPUT_ON_FAILURE "If true, print error logs if dependency sub-project build fails" ON)
option(TILEDB_SANITIZER "Sanitizer to use in TILEDB. ")

# Enable compiler cache to speed up recompilation
find_program(CCACHE_FOUND ccache)
Expand All @@ -83,9 +84,19 @@ set(CMAKE_CXX_EXTENSIONS OFF) # Don't use GNU extensions
# Build with fPIC
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Release builds by default.
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RELEASE)
# Set default builds/configuration to be Release.
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (is_multi_config)
set(CMAKE_CONFIGURATION_TYPES
"Release;Debug;RelWithDebInfo"
CACHE
STRING
"Semi-colon separate list of build types for multi-configuration generators."
)
else()
set(CMAKE_BUILD_TYPE
"Release" CACHE STRING "Build type for single-configuration generators."
)
endif()

# Use @rpath on macOS for building shared libraries.
Expand Down Expand Up @@ -209,54 +220,46 @@ else()
# build generators that set the config type at build time.
list(APPEND
TILEDBSOMA_COMPILE_OPTIONS
$<$<STREQUAL:${CMAKE_BUILD_TYPE},Debug>: -DDEBUG -O0 -g3 -ggdb3 -gdwarf-3>
$<$<CONFIG:Debug>: -DDEBUG -O0 -g3 -ggdb3 -gdwarf-3>
)
list(APPEND
TILEDBSOMA_COMPILE_OPTIONS
$<$<STREQUAL:${CMAKE_BUILD_TYPE},Release>: -DNDEBUG -O3>
$<$<CONFIG:Release>: -DNDEBUG -O3>
)
list(APPEND
TILEDBSOMA_COMPILE_OPTIONS
$<$<STREQUAL:${CMAKE_BUILD_TYPE},RelWithDebInfo>: -DNDEBUG -O3 -g3 -ggdb3 -gdwarf-3>
$<$<CONFIG:RelWithDebInfo>: -DNDEBUG -O3 -g3 -ggdb3 -gdwarf-3>
)
list(APPEND
TILEDBSOMA_COMPILE_OPTIONS
$<$<STREQUAL:${CMAKE_BUILD_TYPE},>: -DDEBUG -g3 -gdwarf-3 --coverage>
$<$<OR:$<CONFIG:ASAN>,$<CONFIG:TSAN>,$<CONFIG:MSAN>,$<CONFIG:LSAN>,$<CONFIG:UBSAN>>: -DDEBUG -O1 -g -fno-omit-frame-pointer -fno-optimize-sibling-calls>
)

# Use -Wno-literal-suffix on Linux for C++ libtiledbsoma target.
# Sanitizer compiler flag: Must use generator expressions to support
# multi-configuration build generators.
set(TILEDBSOMA_SANITIZER_OPTIONS "")
list(APPEND TILEDBSOMA_SANITIZER_OPTIONS $<$<CONFIG:ASAN>: -fsanitize=address>)
list(APPEND TILEDBSOMA_SANITIZER_OPTIONS $<$<CONFIG:LSAN>: -fsanitize=leak>)
list(APPEND TILEDBSOMA_SANITIZER_OPTIONS $<$<CONFIG:TSAN>: -fsanitize=thread>)
list(APPEND TILEDBSOMA_SANITIZER_OPTIONS $<$<CONFIG:MSAN>: -fsanitize=memory>)
list(APPEND TILEDBSOMA_SANITIZER_OPTIONS $<$<CONFIG:UBSAN>: -fsanitize=undefined>)

# Compiler specific additions:
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Use -Wno-literal-suffix on Linux for C++ libtiledbsoma target.
list(APPEND TILEDBSOMA_COMPILE_OPTIONS -Wno-literal-suffix)
endif()
endif()

# ###########################################################
# Compile options/definitions
# ###########################################################
if(SANITIZER)
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)

if(NOT CMAKE_BUILD_TYPE_LOWER MATCHES "debug")
message(FATAL_ERROR "Sanitizers only enabled for Debug build")
endif()

string(TOLOWER ${SANITIZER} SANITIZER)

if(NOT SANITIZER MATCHES "^(address|memory|leak|thread|undefined)$")
message(FATAL_ERROR "Unknown clang sanitizer: ${SANITIZER})")
else()
message(STATUS "The TileDB-SOMA library is compiled with sanitizer ${SANITIZER} enabled")
endif()

set(TILEDBSOMA_SANITIZER_OPTIONS
-g -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=${SANITIZER}
)
set(TILEDBSOMA_LINK_OPTIONS "-fsanitize=${SANITIZER}")
else()
set(TILEDBSOMA_SANITIZER_OPTIONS "")
# Sanitizer link options: Must use generator expressions to support
# multi-configuration build generators.
set(TILEDBSOMA_LINK_OPTIONS "")
endif()
list(APPEND TILEDBSOMA_LINK_OPTIONS $<$<CONFIG:ASAN>: -fsanitize=address>)
list(APPEND TILEDBSOMA_LINK_OPTIONS $<$<CONFIG:LSAN>: -fsanitize=leak>)
list(APPEND TILEDBSOMA_LINK_OPTIONS $<$<CONFIG:TSAN>: -fsanitize=thread>)
list(APPEND TILEDBSOMA_LINK_OPTIONS $<$<CONFIG:MSAN>: -fsanitize=memory>)
list(APPEND TILEDBSOMA_LINK_OPTIONS $<$<CONFIG:UBSAN>: -fsanitize=undefined>)

endif()


# Definitions for all targets
Expand Down
2 changes: 1 addition & 1 deletion libtiledbsoma/cmake/Superbuild.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ set(INHERITED_CMAKE_ARGS
-DTILEDB_SERIALIZATION=${TILEDB_SERIALIZATION}
-DTILEDB_WERROR=${TILEDB_WERROR}
-DTILEDB_VERBOSE=${TILEDB_VERBOSE}
-DTILEDB_SANITIZER=${TILEDB_SANITIZER}
-DTileDB_DIR=${TileDB_DIR}
-DSANITIZER=${SANITIZER}
-DENABLE_ARROW_EXPORT=${ENABLE_ARROW_EXPORT}
-DOVERRIDE_INSTALL_PREFIX=${OVERRIDE_INSTALL_PREFIX}
-DTILEDBSOMA_BUILD_STATIC=${TILEDBSOMA_BUILD_STATIC}
Expand Down

0 comments on commit 6880ccf

Please sign in to comment.