@@ -3,7 +3,7 @@ project(chesslib LANGUAGES CXX)
33
44set (CMAKE_CXX_STANDARD 17)
55set (CMAKE_CXX_STANDARD_REQUIRED ON )
6- option ( ENABLE_COVERAGE "Enable coverage reporting" OFF )
6+
77# --- Compiler tuning ---
88if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
99 if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" )
@@ -32,10 +32,6 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
3232 add_compile_options (/constexpr:steps2000000000 /constexpr:depth1024 ${ARCH_FLAG} )
3333endif ()
3434
35- if (ENABLE_COVERAGE)
36- set (CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE )
37- set (CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF )
38- endif ()
3935add_compile_definitions (GENERATE_AT_RUNTIME )
4036if (CMAKE_BUILD_TYPE MATCHES "Debug" )
4137 add_compile_definitions (_DEBUG )
@@ -48,125 +44,32 @@ set(SOURCES
4844add_library (chesslib STATIC ${SOURCES} )
4945target_include_directories (chesslib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
5046# --- Enable CTest integration ---
51- enable_testing ()
52- include (FetchContent )
53- FetchContent_Declare (
54- doctest
55- GIT_REPOSITORY https://github.com/doctest/doctest.git
56- GIT_TAG v2.4.12
57- )
58- FetchContent_MakeAvailable (doctest)
59- # --- Test executable ---
60- add_executable (test_chess
61- tests.cpp
62- )
63- add_executable (NonImportantTests
64- non_core_tests.cpp
65- )
66- target_link_libraries (test_chess PRIVATE chesslib )
67- target_include_directories (test_chess PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${doctest_SOURCE_DIR} )
68- target_link_libraries (NonImportantTests PRIVATE chesslib )
69- target_include_directories (NonImportantTests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${doctest_SOURCE_DIR} )
70- add_test (NAME test_core COMMAND test_chess )
71- add_test (NAME api_tests COMMAND NonImportantTests )
72- if (ENABLE_COVERAGE)
73-
74- if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
75- foreach (t chesslib test_chess NonImportantTests)
76- target_compile_options (${t} PRIVATE
77- --coverage
78- -O0
79- )
80- target_link_options (${t} PRIVATE
81- --coverage
82- )
83- endforeach ()
84-
85- find_program (GCOVR gcovr REQUIRED )
86-
87- add_custom_target (coverage
88- COMMAND ${CMAKE_COMMAND} -E make_directory coverage
89- COMMAND ${CMAKE_CTEST_COMMAND}
90- COMMAND ${GCOVR}
91- -r ${CMAKE_SOURCE_DIR}
92- --html
93- --html-details
94- -o coverage/index.html
95- --exclude-directories tests
96- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
97- COMMENT "Generating GCC coverage report"
98- )
99- elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
100- foreach (t chesslib test_chess NonImportantTests)
101- target_compile_options (${t} PRIVATE
102- -fprofile-instr-generate
103- -fcoverage-mapping
104- -O0
105- )
106- target_link_options (${t} PRIVATE
107- -fprofile-instr-generate
108- )
109- endforeach ()
110-
111- if (WIN32 )
112-
113- find_program (LLVM_PROFDATA llvm-profdata REQUIRED )
114- find_program (LLVM_COV llvm-cov REQUIRED )
115-
116- add_custom_target (coverage
117- COMMAND ${CMAKE_COMMAND} -E make_directory coverage
118-
119- COMMAND ${CMAKE_COMMAND} -E env
120- LLVM_PROFILE_FILE=coverage/coverage.profraw
121- CTEST_PARALLEL_LEVEL=1
122- ${CMAKE_CTEST_COMMAND}
123-
124- COMMAND ${LLVM_PROFDATA} merge
125- -sparse
126- coverage/coverage.profraw
127- -o coverage/coverage.profdata
128-
129- COMMAND ${LLVM_COV} show
130- $<TARGET_FILE :test_chess >
131- $<TARGET_FILE :NonImportantTests >
132- -instr-profile=coverage/coverage.profdata
133- -format=html
134- -output-dir=coverage
135- -ignore-filename-regex= "tests|doctest"
136- -Xdemangler=llvm-cxxfilt
137-
138- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
139- COMMENT "Generating Clang coverage report (Windows)"
140- )
141- else ()
142-
143- find_program (LLVM_PROFDATA llvm-profdata REQUIRED )
144- find_program (LLVM_COV llvm-cov REQUIRED )
145-
146- add_custom_target (coverage
147- COMMAND ${CMAKE_COMMAND} -E make_directory coverage
148-
149- COMMAND ${CMAKE_COMMAND} -E env
150- LLVM_PROFILE_FILE=coverage/%m.profraw
151- ${CMAKE_CTEST_COMMAND}
152-
153- COMMAND ${LLVM_PROFDATA} merge
154- -sparse
155- coverage
156- -o coverage/coverage.profdata
157-
158- COMMAND ${LLVM_COV} show
159- $<TARGET_FILE :test_chess >
160- $<TARGET_FILE :NonImportantTests >
161- -instr-profile=coverage/coverage.profdata
162- -format=html
163- -output-dir=coverage
164- -ignore-filename-regex= "tests|doctest"
165- -Xdemangler=c++filt
166-
167- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
168- COMMENT "Generating Clang coverage report"
169- )
47+ include (CTest )
48+
49+ if (BUILD_TESTING)
50+ include (FetchContent )
51+ FetchContent_Declare (
52+ doctest
53+ GIT_REPOSITORY https://github.com/doctest/doctest.git
54+ GIT_TAG v2.4.12
55+ )
56+ FetchContent_MakeAvailable (doctest)
57+
58+ # --- Test executable ---
59+ add_executable (test_chess tests.cpp )
60+ add_executable (NonImportantTests non_core_tests.cpp )
61+
62+ target_link_libraries (test_chess PRIVATE chesslib doctest::doctest )
63+ target_link_libraries (NonImportantTests PRIVATE chesslib doctest::doctest )
64+
65+ add_test (NAME test_core COMMAND test_chess )
66+ add_test (NAME api_tests COMMAND NonImportantTests )
67+ if (UNIX AND CMAKE_BUILD_TYPE MATCHES "Debug" )
68+ set (SANITIZERS "" CACHE STRING "sanitizers such as undefined,address" )
69+
70+ if (NOT "${SANITIZERS} " STREQUAL "" )
71+ add_compile_options (-fsanitize=${SANITIZERS} -fno-omit-frame-pointer )
72+ add_link_options (-fsanitize=${SANITIZERS} )
17073 endif ()
17174 endif ()
17275
0 commit comments