cmake,makefile: SAN,TIDY,VALGRIND opts;clean turbo
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
cf340a200a
commit
19d5ff0f22
|
@ -7,6 +7,10 @@ set(CMAKE_CXX_STANDARD 20)
|
|||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
OPTION(TIDY "Run clang-tidy" OFF)
|
||||
OPTION(VALGRIND "Run valgrind" OFF)
|
||||
OPTION(SAN "Build with sanitize flags" OFF)
|
||||
|
||||
find_package(Git QUIET)
|
||||
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
||||
option(GIT_SUBMODULE "Check submodules during build" ON)
|
||||
|
@ -32,8 +36,8 @@ add_subdirectory(lib/da_threading EXCLUDE_FROM_ALL)
|
|||
|
||||
if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||
|
||||
if($ENV{TIDY} MATCHES "1")
|
||||
message(STATUS "TIDY=1, running clang-tidy")
|
||||
if(TIDY)
|
||||
message(STATUS "TIDY=ON, running clang-tidy")
|
||||
set(CMAKE_CXX_CLANG_TIDY clang-tidy -p ${CMAKE_CURRENT_BINARY_DIR} --checks=-*,clang-diagnostic-*,clang-analyzer-*,google-*,bugprone-* --header-filter= --use-color=true)
|
||||
message(STATUS "CMAKE_CXX_CLANG_TIDY: ${CMAKE_CXX_CLANG_TIDY}")
|
||||
endif()
|
||||
|
@ -59,8 +63,9 @@ add_subdirectory(lib/da_threading EXCLUDE_FROM_ALL)
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og")
|
||||
endif(NOT CMAKE_CXX_FLAGS MATCHES "-Og")
|
||||
|
||||
if(NOT $ENV{VALGRIND} MATCHES "true")
|
||||
if($ENV{SANITIZE_PLS} MATCHES "true")
|
||||
if(NOT VALGRIND)
|
||||
if(SAN)
|
||||
message(STATUS "SAN=ON, building with sanitize flags")
|
||||
# this needs {libasan,liblsan,libubsan} on fedora, gcc-libs on arch
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak") # issue with gdb
|
||||
|
@ -86,7 +91,7 @@ add_subdirectory(lib/da_threading EXCLUDE_FROM_ALL)
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=unreachable")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=alignment")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=object-size")
|
||||
endif($ENV{SANITIZE_PLS} MATCHES "true")
|
||||
endif(SAN)
|
||||
|
||||
|
||||
# If DWARF debugging information is enabled, separate as much debugging
|
||||
|
@ -97,8 +102,8 @@ add_subdirectory(lib/da_threading EXCLUDE_FROM_ALL)
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gsplit-dwarf")
|
||||
endif(NOT CMAKE_CXX_FLAGS MATCHES "-gsplit-dwarf")
|
||||
else()
|
||||
message(STATUS "VALGRIND=true, not setting '-gsplit-dwarf'")
|
||||
endif(NOT $ENV{VALGRIND} MATCHES "true")
|
||||
message(STATUS "VALGRIND=ON, not setting '-gsplit-dwarf'")
|
||||
endif(NOT VALGRIND)
|
||||
|
||||
if(NOT CMAKE_CXX_FLAGS MATCHES "-Wextra")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
|
||||
|
|
35
Makefile
35
Makefile
|
@ -1,16 +1,21 @@
|
|||
cppch = cppcheck
|
||||
cppch_args = --language=c++ --std=c++20 --enable=all --verbose --suppress=unmatchedSuppression --suppress=missingIncludeSystem ./*.{cpp,h}
|
||||
cpp_flags = CMAKE_CXX_FLAGS=
|
||||
c = cmake
|
||||
c_args = -G Ninja -DCMAKE_BUILD_TYPE=
|
||||
c_args_d = $(c_args)Debug
|
||||
c_args_r = $(c_args)Release
|
||||
n = ninja
|
||||
n_args = -C
|
||||
d_folder = cmake-build-debug
|
||||
r_folder = cmake-build-release
|
||||
s_folder = cmake-build-san
|
||||
s_tru = SANITIZE_PLS=true
|
||||
s_on = -DSAN=ON
|
||||
s_off = -DSAN=OFF
|
||||
t_on = -DTIDY=ON
|
||||
t_off = -DTIDY=OFF
|
||||
v = valgrind
|
||||
v_env = VALGRIND=
|
||||
v_on = -DVALGRIND=ON
|
||||
v_off = -DVALGRIND=OFF
|
||||
v_db = $(d_folder)_valgr
|
||||
v_rl = $(r_folder)_valgr
|
||||
|
||||
|
@ -18,15 +23,13 @@ v_rl = $(r_folder)_valgr
|
|||
|
||||
debug:
|
||||
if [ ! -d "$(d_folder)" ]; then mkdir -pv $(d_folder); fi
|
||||
$(v_env)false $(c) $(c_args)Debug -B $(d_folder) -D$(cpp_flags) && \
|
||||
$(c) $(c_args_d) $(s_off) $(t_off) $(v_off) -B$(d_folder) && \
|
||||
$(n) $(n_args) $(d_folder)
|
||||
@echo fortuna \(debug\) has been built inside $(d_folder)
|
||||
|
||||
release:
|
||||
if [ ! -d "$(r_folder)" ]; then mkdir -pv $(r_folder); fi
|
||||
$(v_env)false $(c) $(c_args)Release -B $(r_folder) -D$(cpp_flags) && \
|
||||
$(c) $(c_args_r) $(s_off) $(t_off) $(v_off) -B$(r_folder) && \
|
||||
$(n) $(n_args) $(r_folder)
|
||||
@echo fortuna \(release\) has been built inside $(r_folder)
|
||||
|
||||
check:
|
||||
$(cppch) $(cppch_args)
|
||||
|
@ -34,36 +37,36 @@ check:
|
|||
|
||||
san:
|
||||
if [ ! -d "$(s_folder)" ]; then mkdir -pv $(s_folder); fi
|
||||
$(v_env)false $(s_tru) $(c) $(c_args)Debug -B $(s_folder) -D$(cpp_flags) \
|
||||
&& $(n) $(n_args) $(s_folder)
|
||||
$(c) $(c_args_d) $(s_on) $(t_off) $(v_off) -B$(s_folder) && \
|
||||
$(n) $(n_args) $(s_folder)
|
||||
|
||||
|
||||
tidy:
|
||||
env TIDY=1 make debug
|
||||
if [ ! -d "$(d_folder)" ]; then mkdir -pv $(d_folder); fi
|
||||
$(c) $(c_args_d) $(s_off) $(t_on) $(v_off) -B$(d_folder) && \
|
||||
$(n) $(n_args) $(d_folder)
|
||||
|
||||
valgrind: valgrind-debug
|
||||
|
||||
valgrind-debug:
|
||||
if [ ! -d "$(v_db)" ]; then mkdir -pv "$(v_db)"; fi
|
||||
$(v_env)true $(c) $(c_args)Debug -B "$(v_db)" -D$(cpp_flags) && \
|
||||
$(c) $(c_args_d) $(s_off) $(t_off) $(v_on) -B"$(v_db)" && \
|
||||
$(n) $(n_args) "$(v_db)"
|
||||
$(v) --leak-check=full ./$(v_db)/fortuna
|
||||
@echo fortuna \(debug\) has been built and checked using valgrind
|
||||
|
||||
valgrind-release:
|
||||
if [ ! -d "$(v_rl)" ]; then mkdir -pv "$(v_rl)"; fi
|
||||
$(v_env)true $(c) $(c_args)Release -B "$(v_rl)" -D$(cpp_flags) && \
|
||||
$(c) $(c_args_r) $(s_off) $(t_off) $(v_on) -B"$(v_rl)" && \
|
||||
$(n) $(n_args) "$(v_rl)"
|
||||
$(v) ./$(v_rl)/fortuna
|
||||
@echo fortuna \(release\) has been built and checked using valgrind
|
||||
|
||||
build: debug
|
||||
|
||||
test: check build
|
||||
|
||||
clean:
|
||||
@find . -regextype posix-egrep -regex ".*\.(o|dwo|out|bin|cmake)" -delete
|
||||
@find . -maxdepth 5 -regextype posix-egrep -regex ".*\.(o|dwo|out|bin|cmake|txt)" -not -name CMakeLists.txt -not -path "./lib/*" -delete
|
||||
|
||||
distclean:
|
||||
@find . -iwholename '*cmake*' -not -name CMakeLists.txt -delete
|
||||
@find . -iwholename '*cmake*' -not -name CMakeLists.txt -not -path "./lib/*" -delete
|
||||
|
||||
|
|
Reference in New Issue