summaryrefslogtreecommitdiffstats
path: root/cmake/debug_flags.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/debug_flags.cmake')
-rw-r--r--cmake/debug_flags.cmake58
1 files changed, 58 insertions, 0 deletions
diff --git a/cmake/debug_flags.cmake b/cmake/debug_flags.cmake
new file mode 100644
index 0000000..0009039
--- /dev/null
+++ b/cmake/debug_flags.cmake
@@ -0,0 +1,58 @@
+# Set compiler flags for Debug builds.
+# Only has an effect on GCC/Clang >= 5.0.
+
+set(DEBUG_CXXFLAGS "")
+if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang"
+ AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5")
+ list(APPEND DEBUG_CXXFLAGS
+ "-Wall"
+ "-Wextra"
+ "-Wpedantic"
+ "-Wuninitialized"
+ "-Wshadow"
+ "-Wnon-virtual-dtor"
+ "-Wconversion"
+ "-Wsign-conversion"
+ "-Wold-style-cast"
+ "-Wzero-as-null-pointer-constant"
+ "-Wmissing-declarations"
+ "-Wcast-align"
+ "-Wunused"
+ "-Woverloaded-virtual"
+ "-Wdouble-promotion"
+ "-Wformat=2"
+ "-ftrapv"
+ "-fsanitize=undefined"
+ "-g"
+ "-Og"
+ "-fno-omit-frame-pointer")
+ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+ list(APPEND DEBUG_CXXFLAGS
+ "-Wlogical-op"
+ "-Wuseless-cast")
+ if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6")
+ list(APPEND DEBUG_CXXFLAGS
+ "-Wmisleading-indentation"
+ "-Wduplicated-cond"
+ "-Wnull-dereference")
+ if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7")
+ list(APPEND DEBUG_CXXFLAGS
+ "-Wduplicated-branches")
+ endif()
+ endif()
+ endif()
+ add_compile_options("$<$<CONFIG:Debug>:${DEBUG_CXXFLAGS}>")
+
+ set(DEBUG_LDFLAGS
+ "-fsanitize=undefined")
+ # add_link_options was introduced in version 3.13.
+ if(${CMAKE_VERSION} VERSION_LESS 3.13)
+ set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${DEBUG_LDFLAGS}")
+ else()
+ add_link_options("$<$<CONFIG:Debug>:${DEBUG_LDFLAGS}>")
+ endif()
+else()
+ message(STATUS
+ "No additional compiler flags were set, "
+ "because your compiler was not anticipated.")
+endif()