-
Notifications
You must be signed in to change notification settings - Fork 87
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
115 lines (102 loc) · 3.56 KB
/
Copy pathCMakeLists.txt
File metadata and controls
115 lines (102 loc) · 3.56 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#The tests in CUDA use lambdas
if(MDSPAN_ENABLE_CUDA)
if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --extended-lambda")
endif()
endif()
function(mdspan_add_test name)
set(options ENABLE_PRECONDITIONS)
set(one_value SOURCE)
set(multi_value)
cmake_parse_arguments(ARGUMENT "${options}" "${one_value}" "${multi_value}" ${ARGN})
if(NOT DEFINED ARGUMENT_SOURCE)
set(ARGUMENT_SOURCE ${name}.cpp)
endif()
if(MDSPAN_TEST_LANGUAGE)
set_source_files_properties(${name} PROPERTIES LANGUAGE ${MDSPAN_TEST_LANGUAGE})
endif()
add_executable(${name} ${ARGUMENT_SOURCE})
target_link_libraries(${name} mdspan GTest::gtest_main)
add_test(${name} ${name})
set_property(TARGET ${name} PROPERTY COMPILE_WARNING_AS_ERROR ON)
target_compile_definitions(${name}
PUBLIC
MDSPAN_IMPL_CHECK_PRECONDITION=$<BOOL:${ARGUMENT_ENABLE_PRECONDITIONS}>
)
if(MDSPAN_IMPL_ENABLE_P3663)
target_compile_definitions(${name}
PUBLIC
MDSPAN_IMPL_ENABLE_P3663=1
)
endif()
endfunction()
if(MDSPAN_USE_SYSTEM_GTEST)
find_package(GTest CONFIG REQUIRED)
else()
include(FetchContent)
if (MSVC)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
endif()
fetchcontent_declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.17.0
)
# TODO CMake 3.28, we can pass EXCLUDE_FROM_ALL directly to fetchcontent_makeavailable
fetchcontent_getproperties(googletest)
if (NOT googletest_POPULATED)
fetchcontent_populate(googletest)
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
add_library(GTest::gtest_main ALIAS gtest_main)
endif()
# FIXME_MSVC
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
mdspan_add_test(
test_precondition_checks_can_be_disabled
SOURCE test_alternate_precondition_violation_handler.cpp
)
target_compile_definitions(
test_precondition_checks_can_be_disabled
PUBLIC
MDSPAN_IMPL_CHECK_PRECONDITION=0
)
set_tests_properties(
test_precondition_checks_can_be_disabled
PROPERTIES
PASS_REGULAR_EXPRESSION "Failure.*Expected.*throws an exception of type std::logic_error.*Actual.*it throws nothing"
)
endif()
if(NOT MDSPAN_ENABLE_CUDA AND NOT MDSPAN_ENABLE_HIP AND NOT MDSPAN_ENABLE_SYCL)
mdspan_add_test(test_alternate_precondition_violation_handler ENABLE_PRECONDITIONS)
endif()
mdspan_add_test(test_macros ENABLE_PRECONDITIONS)
mdspan_add_test(test_layout_preconditions ENABLE_PRECONDITIONS)
mdspan_add_test(test_dims)
mdspan_add_test(test_extents ENABLE_PRECONDITIONS)
mdspan_add_test(test_mdspan_at)
mdspan_add_test(test_mdspan_ctors)
mdspan_add_test(test_mdspan_swap)
mdspan_add_test(test_mdspan_conversion)
mdspan_add_test(test_mdspan_size)
mdspan_add_test(test_element_access)
mdspan_add_test(test_exhaustive_layouts)
mdspan_add_test(test_layout_ctors)
mdspan_add_test(test_layout_stride)
if(NOT CMAKE_CXX_STANDARD STREQUAL "14")
mdspan_add_test(test_submdspan)
mdspan_add_test(test_submdspan_static_slice)
mdspan_add_test(test_layout_padded_left ENABLE_PRECONDITIONS)
mdspan_add_test(test_layout_padded_right ENABLE_PRECONDITIONS)
endif()
# both of those don't work yet since its using vector
if(NOT MDSPAN_ENABLE_CUDA AND NOT MDSPAN_ENABLE_HIP)
mdspan_add_test(test_mdarray_ctors)
mdspan_add_test(test_mdarray_to_mdspan)
endif()
if(CMAKE_CXX_STANDARD GREATER_EQUAL 20)
if((CMAKE_CXX_COMPILER_ID STREQUAL Clang) OR ((CMAKE_CXX_COMPILER_ID STREQUAL GNU) AND (CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 12.0.0)))
add_subdirectory(libcxx-backports)
endif()
endif()
mdspan_add_test(test_constant_wrapper)