Skip to content

Commit fcca6d6

Browse files
committed
cmake support SANITIZER
1 parent ca691e3 commit fcca6d6

File tree

4 files changed

+33
-2
lines changed

4 files changed

+33
-2
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- uses: actions/checkout@v3
2525

2626
- name: make ut
27-
run: cmake -DCOV=ON -DCMAKE_CXX_COMPILER="g++" . && make -j
27+
run: cmake -DCOV=1 -DCMAKE_CXX_COMPILER="g++" . && make -j
2828

2929
- name: ut
3030
run: SLICE=always-malloc G_DEBUG=gc-friendly valgrind -v --tool=memcheck --leak-check=full --num-callers=40 --log-file=ut/gcovr/cov.valgrind.log --error-exitcode=6 ./ut_exe --gtest_brief=1

CMakeLists.txt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.12)
33
# ------------------------------------------------------------------------------------------------
44
project(ut_exe CXX) # as early as possible, eg must before CMAKE_CXX_FLAGS
55

6-
if(COV)
6+
if(COV STREQUAL "1")
77
message("!!! coverage enabled")
88
set(CMAKE_CXX_STANDARD 20) # if gtest fix bug, try c++20/23 to see cov rate inc or not
99

@@ -17,11 +17,40 @@ if(COV)
1717

1818
add_compile_definitions(SMART_LOG)
1919
add_compile_definitions(WITH_HID_LOG) # more info to debug ci
20+
21+
elseif(COV STREQUAL "asan")
22+
set(CMAKE_CXX_STANDARD 14) # low c++ version for wide usage
23+
message("!!! SANITIZE for: use-after-free, double-free, out-of-bound")
24+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address") # compile
25+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") # link
26+
set(lib_san "-lasan")
27+
28+
elseif(COV STREQUAL "lsan")
29+
set(CMAKE_CXX_STANDARD 14)
30+
message("!!! SANITIZE for: leak")
31+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=leak")
32+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=leak")
33+
set(lib_san "-llsan")
34+
35+
elseif(COV STREQUAL "tsan")
36+
set(CMAKE_CXX_STANDARD 14)
37+
message("!!! SANITIZE for: thread")
38+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=thread")
39+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
40+
41+
elseif(COV STREQUAL "ubsan")
42+
set(CMAKE_CXX_STANDARD 14)
43+
message("!!! SANITIZE for: undefined behavior")
44+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=undefined")
45+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
46+
2047
else()
48+
message("!!! UT only - no cov, no SANITIZE check etc")
2149
set(CMAKE_CXX_STANDARD 14) # low c++ version for wide usage
2250
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1") # fastest build+ut
2351
#add_compile_definitions(WITH_HID_LOG) # cov no HID; easy to turn-on
2452
endif()
53+
2554
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
2655
set(CMAKE_CXX_EXTENSIONS OFF)
2756
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") # inc branch coverage

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ target_include_directories(lib_domino PUBLIC
1515
)
1616

1717
target_link_libraries(lib_domino PUBLIC
18+
${lib_san}
1819
pthread
1920
)

ut/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ target_include_directories(lib_ut PUBLIC
1717
)
1818

1919
target_link_libraries(lib_ut PUBLIC
20+
${lib_san}
2021
gtest
2122
gmock
2223
)

0 commit comments

Comments
 (0)