Skip to content

Commit

Permalink
Changed: USE_SANITIZER -> GAIA_USE_SANITIZER
Browse files Browse the repository at this point in the history
Fixed: Sanitizer handling in code
  • Loading branch information
richardbiely committed Oct 20, 2024
1 parent 2f65a07 commit 6082dba
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 24 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1856,13 +1856,13 @@ Parameter | Description
**GAIA_PROFILER_CPU** | Enables CPU [profiling](#profiling) features
**GAIA_PROFILER_MEM** | Enabled memory [profiling](#profiling) features
**GAIA_PROFILER_BUILD** | Builds the [profiler](#profiling) ([Tracy](https://github.com/wolfpld/tracy) by default)
**USE_SANITIZER** | Applies the specified set of [sanitizers](#sanitizers)
**GAIA_USE_SANITIZER** | Applies the specified set of [sanitizers](#sanitizers)

### Sanitizers
Possible options are listed in [cmake/sanitizers.cmake](https://github.com/richardbiely/gaia-ecs/blob/main/cmake/sanitizers.cmake).<br/>
Note, that some options don't work together or might not be supported by all compilers.
```bash
cmake -DCMAKE_BUILD_TYPE=Release -DUSE_SANITIZER=address -S . -B "build"
cmake -DCMAKE_BUILD_TYPE=Release -DGAIA_USE_SANITIZER=address -S . -B "build"
```

### Single-header
Expand Down
24 changes: 12 additions & 12 deletions cmake/sanitizers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

include(CheckCXXSourceCompiles)

set(USE_SANITIZER
set(GAIA_USE_SANITIZER
""
CACHE
STRING
Expand All @@ -41,7 +41,7 @@ function(test_san_flags return_var flags)
set(CMAKE_REQUIRED_QUIET "${QUIET_BACKUP}")
endfunction()

if(USE_SANITIZER)
if(GAIA_USE_SANITIZER)
append("-fno-omit-frame-pointer" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)

unset(SANITIZER_SELECTED_FLAGS)
Expand All @@ -51,7 +51,7 @@ if(USE_SANITIZER)
append("-O1" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()

if(USE_SANITIZER MATCHES "([Aa]ddress)")
if(GAIA_USE_SANITIZER MATCHES "([Aa]ddress)")
# Optional: -fno-optimize-sibling-calls -fsanitize-address-use-after-scope
message(STATUS "Testing with Address sanitizer")
set(SANITIZER_ADDR_FLAG "-fsanitize=address")
Expand Down Expand Up @@ -83,11 +83,11 @@ if(USE_SANITIZER)
endif()
endif()

if(USE_SANITIZER MATCHES "([Mm]emory([Ww]ith[Oo]rigins)?)")
if(GAIA_USE_SANITIZER MATCHES "([Mm]emory([Ww]ith[Oo]rigins)?)")
# Optional: -fno-optimize-sibling-calls -fsanitize-memory-track-origins=2
set(SANITIZER_MEM_FLAG "-fsanitize=memory")

if(USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)")
if(GAIA_USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)")
message(STATUS "Testing with MemoryWithOrigins sanitizer")
append("-fsanitize-memory-track-origins" SANITIZER_MEM_FLAG)
else()
Expand All @@ -97,7 +97,7 @@ if(USE_SANITIZER)
test_san_flags(SANITIZER_MEM_AVAILABLE ${SANITIZER_MEM_FLAG})

if(SANITIZER_MEM_AVAILABLE)
if(USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)")
if(GAIA_USE_SANITIZER MATCHES "([Mm]emory[Ww]ith[Oo]rigins)")
message(STATUS " Building with MemoryWithOrigins sanitizer")
else()
message(STATUS " Building with Memory sanitizer")
Expand All @@ -109,7 +109,7 @@ if(USE_SANITIZER)
endif()
endif()

if(USE_SANITIZER MATCHES "([Uu]ndefined)")
if(GAIA_USE_SANITIZER MATCHES "([Uu]ndefined)")
message(STATUS "Testing with Undefined Behaviour sanitizer")
set(SANITIZER_UB_FLAG "-fsanitize=undefined")

Expand All @@ -127,7 +127,7 @@ if(USE_SANITIZER)
endif()
endif()

if(USE_SANITIZER MATCHES "([Tt]hread)")
if(GAIA_USE_SANITIZER MATCHES "([Tt]hread)")
message(STATUS "Testing with Thread sanitizer")
set(SANITIZER_THREAD_FLAG "-fsanitize=thread")
test_san_flags(SANITIZER_THREAD_AVAILABLE ${SANITIZER_THREAD_FLAG})
Expand All @@ -140,7 +140,7 @@ if(USE_SANITIZER)
endif()
endif()

if(USE_SANITIZER MATCHES "([Ll]eak)")
if(GAIA_USE_SANITIZER MATCHES "([Ll]eak)")
message(STATUS "Testing with Leak sanitizer")
set(SANITIZER_LEAK_FLAG "-fsanitize=leak")
test_san_flags(SANITIZER_LEAK_AVAILABLE ${SANITIZER_LEAK_FLAG})
Expand All @@ -163,16 +163,16 @@ if(USE_SANITIZER)
message(FATAL_ERROR " Sanitizer flags ${SANITIZER_SELECTED_FLAGS} are not compatible.")
endif()
elseif(MSVC)
if(USE_SANITIZER MATCHES "([Aa]ddress)")
if(GAIA_USE_SANITIZER MATCHES "([Aa]ddress)")
message(STATUS "Building with Address sanitizer")
append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
else()
message(
FATAL_ERROR
"This sanitizer not yet supported in the MSVC environment: ${USE_SANITIZER}"
"This sanitizer not yet supported in the MSVC environment: ${GAIA_USE_SANITIZER}"
)
endif()
else()
message(FATAL_ERROR "USE_SANITIZER is not supported on this platform.")
message(FATAL_ERROR "GAIA_USE_SANITIZER is not supported on this platform.")
endif()
endif()
8 changes: 4 additions & 4 deletions docker/build_clang.sh
Original file line number Diff line number Diff line change
Expand Up @@ -82,31 +82,31 @@ fi

# Debug mode - address sanitizers
cmake -E make_directory ${PATH_DEBUG_ADDR}
cmake -DCMAKE_BUILD_TYPE=Debug ${BUILD_SETTINGS_COMMON_SANI} -DUSE_SANITIZER=${SANI_ADDR} -S .. -B ${PATH_DEBUG_ADDR}
cmake -DCMAKE_BUILD_TYPE=Debug ${BUILD_SETTINGS_COMMON_SANI} -DGAIA_USE_SANITIZER=${SANI_ADDR} -S .. -B ${PATH_DEBUG_ADDR}
if ! cmake --build ${PATH_DEBUG_ADDR} --config Debug; then
echo "${PATH_DEBUG_ADDR} build failed"
exit 1
fi

# Debug mode - memory sanitizers
cmake -E make_directory ${PATH_DEBUG_MEM}
cmake -DCMAKE_BUILD_TYPE=Debug ${BUILD_SETTINGS_COMMON_SANI} -DUSE_SANITIZER=${SANI_MEM} -S .. -B ${PATH_DEBUG_MEM}
cmake -DCMAKE_BUILD_TYPE=Debug ${BUILD_SETTINGS_COMMON_SANI} -DGAIA_USE_SANITIZER=${SANI_MEM} -S .. -B ${PATH_DEBUG_MEM}
if ! cmake --build ${PATH_DEBUG_MEM} --config Debug; then
echo "${PATH_DEBUG_MEM} build failed"
exit 1
fi

# Release mode - address sanitizers
cmake -E make_directory ${PATH_RELEASE_ADDR}
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ${BUILD_SETTINGS_COMMON_SANI} -DUSE_SANITIZER=${SANI_ADDR} -S .. -B ${PATH_RELEASE_ADDR}
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ${BUILD_SETTINGS_COMMON_SANI} -DGAIA_USE_SANITIZER=${SANI_ADDR} -S .. -B ${PATH_RELEASE_ADDR}
if ! cmake --build ${PATH_RELEASE_ADDR} --config RelWithDebInfo; then
echo "${PATH_RELEASE_ADDR} build failed"
exit 1
fi

# Release mode - memory sanitizers
cmake -E make_directory ${PATH_RELEASE_MEM}
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ${BUILD_SETTINGS_COMMON_SANI} -DUSE_SANITIZER=${SANI_MEM} -S .. -B ${PATH_RELEASE_MEM}
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ${BUILD_SETTINGS_COMMON_SANI} -DGAIA_USE_SANITIZER=${SANI_MEM} -S .. -B ${PATH_RELEASE_MEM}
if ! cmake --build ${PATH_RELEASE_MEM} --config RelWithDebInfo; then
echo "${PATH_RELEASE_MEM} build failed"
exit 1
Expand Down
1 change: 1 addition & 0 deletions gaia.code-workspace
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@
"picobench",
"prefetchnta",
"Reimplementation",
"SANI",
"SIMD",
"subviews",
"Unpoison",
Expand Down
11 changes: 7 additions & 4 deletions include/gaia/mem/mem_sani.h
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
#pragma once

#include "../config/config_core.h"

#ifndef GAIA_USE_MEM_SANI
#if defined(__has_feature)
#if __has_feature(address_sanitizer) || defined(USE_SANITIZER) || defined(_SANITIZE_ADDRESS__)
#if __has_feature(address_sanitizer)
#define GAIA_HAS_SANI_FEATURE 1
#else
#define GAIA_HAS_SANI_FEATURE 0
#endif
#if GAIA_HAS_SANI_FEATURE || GAIA_USE_SANITIZER || defined(__SANITIZE_ADDRESS__)
#define GAIA_USE_MEM_SANI 1
#else
#define GAIA_USE_MEM_SANI 0
#endif
#else
#if defined(USE_SANITIZER) || defined(_SANITIZE_ADDRESS__)
#if GAIA_USE_SANITIZER || defined(__SANITIZE_ADDRESS__)
#define GAIA_USE_MEM_SANI 1
#else
#define GAIA_USE_MEM_SANI 0
Expand Down
9 changes: 7 additions & 2 deletions single_include/gaia.h
Original file line number Diff line number Diff line change
Expand Up @@ -4619,13 +4619,18 @@ namespace gaia {

#ifndef GAIA_USE_MEM_SANI
#if defined(__has_feature)
#if __has_feature(address_sanitizer) || defined(USE_SANITIZER) || defined(_SANITIZE_ADDRESS__)
#if __has_feature(address_sanitizer)
#define GAIA_HAS_SANI_FEATURE 1
#else
#define GAIA_HAS_SANI_FEATURE 0
#endif
#if GAIA_HAS_SANI_FEATURE || GAIA_USE_SANITIZER || defined(__SANITIZE_ADDRESS__)
#define GAIA_USE_MEM_SANI 1
#else
#define GAIA_USE_MEM_SANI 0
#endif
#else
#if defined(USE_SANITIZER) || defined(_SANITIZE_ADDRESS__)
#if GAIA_USE_SANITIZER || defined(__SANITIZE_ADDRESS__)
#define GAIA_USE_MEM_SANI 1
#else
#define GAIA_USE_MEM_SANI 0
Expand Down
6 changes: 6 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,12 @@ else()
enable_cxx_compiler_flag_if_supported("-fno-exceptions")
endif()

if(NOT "GAIA_USE_SANITIZER" MATCHES "")
add_definitions(-DGAIA_USE_SANITIZER=1)
else()
add_definitions(-DGAIA_USE_SANITIZER=0)
endif()

set(IS_FETCH_AVAILABLE OFF)

if(GAIA_BUILD_BENCHMARK OR GAIA_BUILD_UNITTEST OR GAIA_PROFILER_CPU OR GAIA_PROFILER_MEM OR GAIA_MAKE_SINGLE_HEADER)
Expand Down

0 comments on commit 6082dba

Please sign in to comment.