forked from mpaland/printf
-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathCMakeLists.txt
96 lines (84 loc) · 2.49 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
cmake_minimum_required(VERSION 3.18)
enable_language(CXX)
option(BUILD_CUDA_TESTS "Include tests for use of the printf library with CUDA host-side and device-side code" OFF)
option(TEST_BROKEN_FORMATS "Include tests using non-standard-compliant format strings?" ON)
set(cuda_tests)
if(BUILD_CUDA_TESTS)
enable_language(CUDA)
list(APPEND CMAKE_CUDA_FLAGS "--extended-lambda --expt-relaxed-constexpr -Xcudafe --display_error_number")
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
cmake_policy(SET CMP0104 OLD)
endif()
include(FindCUDA/select_compute_arch)
list(APPEND cuda_tests cuda_test_suite_host cuda_test_suite_device)
if((NOT DEFINED CUDA_ARCH_FLAGS) OR ("${CUDA_ARCH_FLAGS}" STREQUAL ""))
cuda_select_nvcc_arch_flags(CUDA_ARCH_FLAGS_1 Auto)
set(CUDA_ARCH_FLAGS ${CUDA_ARCH_FLAGS} CACHE STRING "CUDA -gencode parameters")
string(REPLACE ";" " " CUDA_ARCH_FLAGS_STR "${CUDA_ARCH_FLAGS}")
else()
set(CUDA_ARCH_FLAGS_STR "${CUDA_ARCH_FLAGS}")
endif()
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${CUDA_ARCH_FLAGS_STR}")
endif()
foreach(tgt ${cuda_tests})
add_executable(${tgt} "${tgt}.cu")
set_target_properties(
${tgt}
PROPERTIES
CUDA_STANDARD 11
CUDA_STANDARD_REQUIRED YES
CUDA_EXTENSIONS NO
)
endforeach()
set(tests test_suite ${cuda_tests})
add_executable(test_suite "test_suite.cpp")
foreach(tgt ${tests})
set_target_properties(
${tgt}
PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO
)
if (TEST_BROKEN_FORMATS)
# ... don't worry, we'll suppress the compiler warnings for those.
target_compile_definitions(${tgt} PRIVATE TEST_WITH_NON_STANDARD_FORMAT_STRINGS)
endif()
target_link_libraries(test_suite PRIVATE mpaland-printf)
add_test(
NAME ${PROJECT_NAME}.${tgt}
COMMAND ${tgt} # ${TEST_RUNNER_PARAMS}
)
endforeach()
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_compile_options(test_suite PRIVATE /W4)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# lots of warnings and all warnings as errors
target_compile_options(test_suite PRIVATE
-g
-Wall
-Wextra
-pedantic
-Wundef
-Wsign-conversion
-Wuninitialized
-Wshadow
-Wunreachable-code
-Wswitch-default
-Wswitch
-Wcast-align
-Wmissing-include-dirs
-Winit-self
-Wdouble-promotion
-gdwarf-2
-fno-exceptions
-ffunction-sections
-fdata-sections
-fverbose-asm
-Wunused-parameter
)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(test_suite PRIVATE -ffat-lto-objects)
endif()
endif()