From a68397c7ac44f5e8d27c816f476747e07469c087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rombauts?= Date: Mon, 24 Jun 2019 22:01:54 +0200 Subject: [PATCH] Add address sanitizer as an option for GCC & Clang Add corresponding option SQLITECPP_USE_ASAN Also formalize previously existing SQLITECPP_USE_GCOV option --- .travis.yml | 2 +- CMakeLists.txt | 23 ++++++++++++++++------- build.sh | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1e05f60..402e075 100644 --- a/.travis.yml +++ b/.travis.yml @@ -171,7 +171,7 @@ before_install: before_script: - mkdir build - cd build - - cmake -DCMAKE_BUILD_TYPE=Debug -DSQLITECPP_USE_GCOV=ON -DSQLITECPP_BUILD_EXAMPLES=ON -DSQLITECPP_BUILD_TESTS=ON .. + - cmake -DCMAKE_BUILD_TYPE=Debug -DSQLITECPP_USE_ASAN=ON -DSQLITECPP_USE_GCOV=ON -DSQLITECPP_BUILD_EXAMPLES=ON -DSQLITECPP_BUILD_TESTS=ON .. # build examples, and run tests (ie make & make test) script: diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fb82dc..baaa0cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,13 +42,10 @@ else (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++0x-compat") # C++ only if (CMAKE_COMPILER_IS_GNUCXX) # GCC flags - if (SQLITECPP_USE_GCOV AND CMAKE_COMPILER_IS_GNUCXX) - if (CMAKE_BUILD_TYPE STREQUAL "Debug") - message (STATUS "Using GCov instrumentation") - else () - message (WARNING "GCov instrumentation works best in Debug mode") - endif () - add_compile_options (-coverage) # NOTE would be usefull but not working with current google test and gcc 4.8 -fkeep-inline-functions + option(SQLITECPP_USE_GCOV "USE GCov instrumentation." OFF) + if (SQLITECPP_USE_GCOV) + message (STATUS "Using GCov instrumentation") + add_compile_options (-coverage) # NOTE -fkeep-inline-functions would be usefull but not working with current google test and gcc 4.8 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -coverage") endif () endif (CMAKE_COMPILER_IS_GNUCXX) @@ -206,6 +203,18 @@ install(EXPORT ${PROJECT_NAME}Config DESTINATION lib/cmake/${PROJECT_NAME}) # set_target_properties(SQLiteCpp PROPERTIES COMPILE_FLAGS "-DSQLITECPP_HAS_MEM_STRUCT") #endif() +option(SQLITECPP_USE_ASAN "Use Address Sanitizer." OFF) +if (SQLITECPP_USE_ASAN) + if ((CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 6) OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")) + message (STATUS "Using Address Sanitizer") + set_target_properties(SQLiteCpp PROPERTIES COMPILE_FLAGS "-fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") + if (CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + endif () + endif () +endif (SQLITECPP_USE_ASAN) + option(SQLITECPP_INTERNAL_SQLITE "Add the internal SQLite3 source to the project." ON) if (SQLITECPP_INTERNAL_SQLITE) # build the SQLite3 C library (for ease of use/compatibility) versus Linux sqlite3-dev package diff --git a/build.sh b/build.sh index dacfb09..cf54b16 100755 --- a/build.sh +++ b/build.sh @@ -11,7 +11,7 @@ mkdir -p build cd build # Generate a Makefile for GCC (or Clang, depanding on CC/CXX envvar) -cmake -DCMAKE_BUILD_TYPE=Debug -DSQLITECPP_USE_GCOV=OFF -DSQLITECPP_BUILD_EXAMPLES=ON -DSQLITECPP_BUILD_TESTS=ON .. +cmake -DCMAKE_BUILD_TYPE=Debug -DSQLITECPP_USE_ASAN=ON -DSQLITECPP_USE_GCOV=OFF -DSQLITECPP_BUILD_EXAMPLES=ON -DSQLITECPP_BUILD_TESTS=ON .. # Build (ie 'make') cmake --build .