aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CompilerOptions.cmake89
-rw-r--r--cmake/CppCheck.cmake11
2 files changed, 100 insertions, 0 deletions
diff --git a/cmake/CompilerOptions.cmake b/cmake/CompilerOptions.cmake
new file mode 100644
index 0000000..dbb37fd
--- /dev/null
+++ b/cmake/CompilerOptions.cmake
@@ -0,0 +1,89 @@
+# ==================================================================================
+# adapted from
+# https://github.com/zhivkopetrov/cmake_helpers.git
+# MIT License Copyright (c) 2020-2023 Zhivko Petrov
+#
+# some compiler warnings from
+# https://lefticus.gitbooks.io/cpp-best-practices/content/02-Use_the_Tools_Available.html
+#
+# ==================================================================================
+# target_enable_warnings
+
+function(target_enable_warnings target)
+ if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+ target_compile_options(
+ ${target}
+ PRIVATE
+ /W4
+ /WX
+ )
+ endif()
+
+ if((CMAKE_CXX_COMPILER_ID MATCHES GNU) OR
+ (CMAKE_CXX_COMPILER_ID MATCHES Clang))
+ target_compile_options(
+ ${target}
+ PRIVATE
+ # compiler warnings
+ # generic
+ -Wall -Wextra # reasonable and standard
+ -Wpedantic # non-standard cpp is used
+ -Wmisleading-indentation
+ -Wlogical-op # logical op being used instead of bitwise
+ -Wundef
+ -Wuninitialized
+ -Weffc++ # disabled because it would require skeleton changes
+ # variables
+ -Wshadow # variable declaration shadows one from parent context
+ -Wunused # anything being unused
+ # casts
+ -Werror=old-style-cast # C-style casts
+ -Wcast-align # performance problem casts
+ -Wcast-qual
+ -Wuseless-cast # cast to same type
+ # conversion
+ #-Wconversion # type conversion may lose data
+ -Wsign-conversion # sign conversion
+ -Wdouble-promotion # implicit float to double
+ # functions
+ -Wunused-parameter
+ -Werror=missing-declarations # missing function declaration in header files
+ -Werror=redundant-decls
+ -Werror=return-type
+ -Werror=overloaded-virtual
+ # inheritance
+ -Wnon-virtual-dtor # class with virtual functions has non-virt dtor
+ -Woverloaded-virtual # overloaded (not override) virtual function
+ # branches
+ -Wduplicated-cond # if/else chain has duplicated conditions
+ -Wduplicated-branches # if/else chain has duplicated code
+ # pointers
+ -Wpointer-arith
+ -Wnull-dereference
+ # style
+ -Wformat=2 # security issues around printf
+ -Werror=date-time # usage of __DATE__ and __TIME__ macros
+ -Werror=missing-field-initializers
+ # logic
+ -Wlogical-op
+ -Wimplicit-fallthrough
+ -Wduplicated-cond
+ -Wduplicated-branches
+
+ # other flags
+ -ffunction-sections # place each function into its own section
+ # better ASLR but larger executables
+ -fstack-protector-all # emit check for buffer overflows on all functions
+ -fstack-clash-protection # emit check for stack clash attacks
+ )
+ endif()
+
+ # add -Werror to release builds
+ if((${CMAKE_BUILD_TYPE} MATCHES Release) OR
+ (${CMAKE_BUILD_TYPE} MATCHES MinSizeRel))
+ # currently disabled
+ #target_compile_options(${target} PRIVATE -Werror)
+ endif()
+
+endfunction()
+
diff --git a/cmake/CppCheck.cmake b/cmake/CppCheck.cmake
new file mode 100644
index 0000000..d8a4559
--- /dev/null
+++ b/cmake/CppCheck.cmake
@@ -0,0 +1,11 @@
+find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
+
+if(CMAKE_CXX_CPPCHECK)
+ list(APPEND CMAKE_CXX_CPPCHECK
+ --std=c++20
+ --enable=all
+ --inconclusive
+ --quiet
+ --suppressions-list=${PROJECT_SOURCE_DIR}/CppCheckSuppressions.txt
+ )
+endif()