From d4c7c61ac47baa7c5dd73029f4692c5c4e7afc50 Mon Sep 17 00:00:00 2001 From: surtur Date: Fri, 7 Jan 2022 05:02:52 +0100 Subject: [PATCH] cmake,makefile: think of clang++, too --- CMakeLists.txt | 13 ++++++++++--- Makefile | 28 +++++++++++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df9c6fe..df356d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,9 @@ add_subdirectory(lib/da_threading EXCLUDE_FROM_ALL) endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -grecord-gcc-switches") + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -grecord-gcc-switches") + endif() # Produce debugging information in the operating system's native format. # Level 3 includes extra information, such as all the macro definitions @@ -76,8 +78,6 @@ add_subdirectory(lib/da_threading EXCLUDE_FROM_ALL) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-address-use-after-scope") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-clash-protection") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") - # clang-only atm - # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=safe-stack") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=bounds") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=vptr") @@ -91,6 +91,13 @@ 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") + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if(NOT CMAKE_CXX_FLAGS MATCHES "-fsanitize=address" OR "-fsanitize=leak") + # clang-only atm + # also doesn't like asan, leaksan et al. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=safe-stack") + endif() + endif() endif(SAN) diff --git a/Makefile b/Makefile index 793427f..8a19eac 100644 --- a/Makefile +++ b/Makefile @@ -4,11 +4,15 @@ c = cmake c_args = -G Ninja -DCMAKE_BUILD_TYPE= c_args_d = $(c_args)Debug c_args_r = $(c_args)Release +cl = -DCMAKE_CXX_COMPILER=clang++ +g = -DCMAKE_CXX_COMPILER=g++ n = ninja n_args = -C d_folder = cmake-build-debug +d_folder_cl = $(d_folder)_cl r_folder = cmake-build-release s_folder = cmake-build-san +s_folder_cl = $(s_folder)_cl s_on = -DSAN=ON s_off = -DSAN=OFF t_on = -DTIDY=ON @@ -19,16 +23,21 @@ v_off = -DVALGRIND=OFF v_db = $(d_folder)_valgr v_rl = $(r_folder)_valgr -.PHONY: check tidy build debug release valgrind san test clean distclean +.PHONY: check tidy build debug debug_cl release valgrind san san_cl test clean distclean debug: if [ ! -d "$(d_folder)" ]; then mkdir -pv $(d_folder); fi - $(c) $(c_args_d) $(s_off) $(t_off) $(v_off) -B$(d_folder) + $(c) $(c_args_d) $(g) $(s_off) $(t_off) $(v_off) -B$(d_folder) $(n) $(n_args) $(d_folder) +debug_cl: + if [ ! -d "$(d_folder_cl)" ]; then mkdir -pv $(d_folder_cl); fi + $(c) $(c_args_d) $(cl) $(s_off) $(t_off) $(v_off) -B$(d_folder_cl) + $(n) $(n_args) $(d_folder_cl) + release: if [ ! -d "$(r_folder)" ]; then mkdir -pv $(r_folder); fi - $(c) $(c_args_r) $(s_off) $(t_off) $(v_off) -B$(r_folder) + $(c) $(c_args_r) $(g) $(s_off) $(t_off) $(v_off) -B$(r_folder) $(n) $(n_args) $(r_folder) check: @@ -37,26 +46,31 @@ check: san: if [ ! -d "$(s_folder)" ]; then mkdir -pv $(s_folder); fi - $(c) $(c_args_d) $(s_on) $(t_off) $(v_off) -B$(s_folder) + $(c) $(c_args_d) $(g) $(s_on) $(t_off) $(v_off) -B$(s_folder) $(n) $(n_args) $(s_folder) +san_cl: + if [ ! -d "$(s_folder_cl)" ]; then mkdir -pv $(s_folder_cl); fi + $(c) $(c_args_d) $(cl) $(s_on) $(t_off) $(v_off) -B$(s_folder_cl) + $(n) $(n_args) $(s_folder_cl) + tidy: if [ ! -d "$(d_folder)" ]; then mkdir -pv $(d_folder); fi - $(c) $(c_args_d) $(s_off) $(t_on) $(v_off) -B$(d_folder) + $(c) $(c_args_d) $(g) $(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 - $(c) $(c_args_d) $(s_off) $(t_off) $(v_on) -B"$(v_db)" + $(c) $(c_args_d) $(g) $(s_off) $(t_off) $(v_on) -B"$(v_db)" $(n) $(n_args) "$(v_db)" $(v) --leak-check=full ./$(v_db)/fortuna valgrind-release: if [ ! -d "$(v_rl)" ]; then mkdir -pv "$(v_rl)"; fi - $(c) $(c_args_r) $(s_off) $(t_off) $(v_on) -B"$(v_rl)" + $(c) $(c_args_r) $(g) $(s_off) $(t_off) $(v_on) -B"$(v_rl)" $(n) $(n_args) "$(v_rl)" $(v) ./$(v_rl)/fortuna