diff options
| author | Ahmad Fatoum <[email protected]> | 2018-02-24 15:26:13 +0100 |
|---|---|---|
| committer | Ahmad Fatoum <[email protected]> | 2018-02-24 15:37:38 +0100 |
| commit | c9043b5a872015bab4dc1b0606504341e9ce5b2b (patch) | |
| tree | 26a5741019a2e505ea7fc337d41bca13403a2e60 /CMakeLists.txt | |
| parent | 6ffc8cb7990fb4ff40f205cb53bec797b10e48a2 (diff) | |
| download | raylib-c9043b5a872015bab4dc1b0606504341e9ce5b2b.tar.gz raylib-c9043b5a872015bab4dc1b0606504341e9ce5b2b.zip | |
CMake: Add options to use -fsanitize={address,undefined}
To make bugs like #485, #486, #487 and #488 easier to find in future.
Diffstat (limited to 'CMakeLists.txt')
| -rwxr-xr-x | CMakeLists.txt | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 11db057e..0e70eab4 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,10 @@ cmake_minimum_required(VERSION 3.0) # Config options -set(BUILD_EXAMPLES ON CACHE BOOL "Build the examples.") -set(BUILD_GAMES ON CACHE BOOL "Build the example games.") +option(BUILD_EXAMPLES "Build the examples." ON) +option(BUILD_GAMES "Build the example games." ON) +option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF) +option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF) if(CMAKE_VERSION VERSION_LESS "3.1") if(CMAKE_C_COMPILER_ID STREQUAL "GNU") @@ -11,17 +13,31 @@ if(CMAKE_VERSION VERSION_LESS "3.1") else() set (CMAKE_C_STANDARD 99) endif() + include(CheckCCompilerFlag) -foreach(option -Werror=pointer-arith;-Werror=implicit-function-declaration) - CHECK_C_COMPILER_FLAG("${option}" COMPILER_HAS_THOSE_TOGGLES) +function(add_if_flag_works flag) + CHECK_C_COMPILER_FLAG("${flag}" COMPILER_HAS_THOSE_TOGGLES) set(outcome "Failed") if(COMPILER_HAS_THOSE_TOGGLES) - set(CMAKE_C_FLAGS "${option} ${CMAKE_C_FLAGS}") + foreach(var ${ARGN}) + set(${var} "${flag} ${${var}}" PARENT_SCOPE) + endforeach() set(outcome "works") endif() - message(STATUS "Testing if ${option} can be used -- ${outcome}") -endforeach() + message(STATUS "Testing if ${flag} can be used -- ${outcome}") +endfunction() +add_if_flag_works(-Werror=pointer-arith CMAKE_C_FLAGS) +add_if_flag_works(-Werror=implicit-function-declaration CMAKE_C_FLAGS) + +if (ENABLE_ASAN) + add_if_flag_works(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS) + add_if_flag_works(-fsanitize=address CMAKE_C_FLAGS CMAKE_LINKER_FLAGS) +endif() +if (ENABLE_UBSAN) + add_if_flag_works(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS) + add_if_flag_works(-fsanitize=undefined CMAKE_C_FLAGS CMAKE_LINKER_FLAGS) +endif() add_subdirectory(src release) @@ -32,4 +48,3 @@ endif() if (${BUILD_GAMES}) add_subdirectory(games) endif() - |
