Skip to content

Commit b762cda

Browse files
griwesbrycelelbach
authored andcommitted
Thrust CMake conversion:
* Make everything compile with GCC 8. * Run both tests and examples through CMake scripts instead of directly. This is needed for FileCheck, but will also be needed for DVS prints, or any other kinds of test status prints, that we may want/need in the future. * Support FileCheck for examples.
1 parent 97c19f6 commit b762cda

6 files changed

Lines changed: 96 additions & 5 deletions

File tree

CMakeLists.txt

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.8)
22

33
project(Thrust CXX)
44

5+
set(THRUST_SOURCE ${CMAKE_SOURCE_DIR})
6+
include(cmake/common_variables.cmake)
7+
58
# Default to a release build.
69
if ("" STREQUAL "${CMAKE_BUILD_TYPE}")
710
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE)
@@ -177,6 +180,12 @@ if ("GNU" STREQUAL "${CMAKE_CXX_COMPILER_ID}")
177180
# becoming part of the type system; we don't care.
178181
append_option_if_available("-Wnoexcept-type" THRUST_CXX_WARNINGS)
179182
endif ()
183+
184+
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1 AND CMAKE_CXX_STANDARD EQUAL 98)
185+
# thrust::complex can't really be made trivially copyable in pre-11
186+
# disable a warning about a non-trivially-copyable type being memmoved that was added to GCC 8
187+
append_option_if_available("-Wno-class-memaccess" THRUST_CXX_WARNINGS)
188+
endif ()
180189
endif ()
181190

182191
if (("Clang" STREQUAL "${CMAKE_CXX_COMPILER_ID}") OR
@@ -319,6 +328,10 @@ enable_testing()
319328

320329
# Handle tests
321330

331+
set(THRUST_TEST_RUN_ARGUMENTS
332+
-DTHRUST_SOURCE=${CMAKE_SOURCE_DIR}
333+
-P "${CMAKE_SOURCE_DIR}/cmake/run_test.cmake")
334+
322335
list(APPEND THRUST_TESTFRAMEWORK_FILES testing/unittest/testframework.cu)
323336
if ("CUDA" STREQUAL "${THRUST_DEVICE_SYSTEM}")
324337
list(APPEND THRUST_TESTFRAMEWORK_FILES testing/unittest/cuda/testframework.cu)
@@ -447,7 +460,10 @@ foreach (THRUST_TEST_SOURCE IN LISTS THRUST_TESTS)
447460
${THRUST_ADDITIONAL_LIBRARIES})
448461

449462
if (THRUST_TEST_ADD_TO_CTEST)
450-
add_test(${THRUST_TEST} ${THRUST_TEST})
463+
add_test(NAME ${THRUST_TEST}
464+
COMMAND ${CMAKE_COMMAND}
465+
-DTHRUST_BINARY=$<TARGET_FILE:${THRUST_TEST}>
466+
${THRUST_TEST_RUN_ARGUMENTS})
451467
endif ()
452468

453469
if ("CUDA" STREQUAL "${THRUST_DEVICE_SYSTEM}")
@@ -474,7 +490,10 @@ foreach (THRUST_TEST_SOURCE IN LISTS THRUST_TESTS)
474490
PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
475491

476492
if (THRUST_TEST_ADD_TO_CTEST)
477-
add_test(${THRUST_TEST_RDC} ${THRUST_TEST_RDC})
493+
add_test(NAME ${THRUST_TEST_RDC}
494+
COMMAND ${CMAKE_COMMAND}
495+
-DTHRUST_BINARY=$<TARGET_FILE:${THRUST_TEST_RDC}>
496+
${THRUST_TEST_RUN_ARGUMENTS})
478497
endif ()
479498
endif ()
480499
endforeach ()
@@ -484,6 +503,20 @@ endforeach ()
484503
option(THRUST_EXAMPLE_FILECHECK_PATH "Path to the LLVM FileCheck utility." "")
485504
option(THRUST_ENABLE_EXAMPLES_WITH_RDC "Also build all examples with RDC." OFF)
486505

506+
set(THRUST_EXAMPLE_FILECHECK_ENABLED OFF)
507+
if (NOT "" STREQUAL "${THRUST_EXAMPLE_FILECHECK_PATH}")
508+
execute_process(
509+
COMMAND "${THRUST_EXAMPLE_FILECHECK_PATH}" "${THRUST_FILECHECK_DATA_PATH}/thrust.sanity.filecheck"
510+
INPUT_FILE "${CMAKE_SOURCE_DIR}/cmake/sanity"
511+
RESULT_VARIABLE THRUST_FILECHECK_RESULT
512+
)
513+
514+
if ("0" STREQUAL "${THRUST_FILECHECK_RESULT}")
515+
set(THRUST_EXAMPLE_FILECHECK_ENABLED ON)
516+
message("-- FileCheck enabled: ${THRUST_EXAMPLE_FILECHECK_PATH}")
517+
endif ()
518+
endif ()
519+
487520
list(APPEND THRUST_EXAMPLE_GLOBS examples/*.cu)
488521
list(APPEND THRUST_EXAMPLE_GLOBS examples/*.cpp)
489522

@@ -509,6 +542,12 @@ else ()
509542
)
510543
endif ()
511544

545+
set(THRUST_EXAMPLE_RUN_ARGUMENTS
546+
-DTHRUST_SOURCE=${CMAKE_SOURCE_DIR}
547+
-DTHRUST_FILECHECK_ENABLED=${THRUST_EXAMPLE_FILECHECK_ENABLED}
548+
-DTHRUST_FILECHECK=${THRUST_EXAMPLE_FILECHECK_PATH}
549+
-P "${CMAKE_SOURCE_DIR}/cmake/run_example.cmake")
550+
512551
foreach (THRUST_EXAMPLE_SOURCE IN LISTS THRUST_EXAMPLES)
513552
# TODO: Per-example flags.
514553

@@ -545,7 +584,11 @@ foreach (THRUST_EXAMPLE_SOURCE IN LISTS THRUST_EXAMPLES)
545584
target_link_libraries(${THRUST_EXAMPLE}
546585
${THRUST_ADDITIONAL_LIBRARIES})
547586

548-
add_test(${THRUST_EXAMPLE} ${THRUST_EXAMPLE})
587+
add_test(NAME ${THRUST_EXAMPLE}
588+
COMMAND ${CMAKE_COMMAND}
589+
-DTHRUST_EXAMPLE=${THRUST_EXAMPLE}
590+
-DTHRUST_BINARY=$<TARGET_FILE:${THRUST_EXAMPLE}>
591+
${THRUST_EXAMPLE_RUN_ARGUMENTS})
549592

550593
if ("CUDA" STREQUAL "${THRUST_DEVICE_SYSTEM}" AND THRUST_ENABLE_EXAMPLES_WITH_RDC)
551594
set(THRUST_EXAMPLE_RDC "thrust.example.${THRUST_EXAMPLE_CATEGORY}rdc.${THRUST_EXAMPLE_NAME}")
@@ -567,7 +610,11 @@ foreach (THRUST_EXAMPLE_SOURCE IN LISTS THRUST_EXAMPLES)
567610
set_target_properties(${THRUST_EXAMPLE_RDC}
568611
PROPERTIES CUDA_SEPERABLE_COMPILATION ON)
569612

570-
add_test(${THRUST_EXAMPLE_RDC} ${THRUST_EXAMPLE_RDC})
613+
add_test(NAME ${THRUST_EXAMPLE_RDC}
614+
COMMAND ${CMAKE_COMMAND}
615+
-DTHRUST_EXAMPLE=${THRUST_EXAMPLE}
616+
-DTHRUST_BINARY=$<TARGET_FILE:${THRUST_EXAMPLE_RDC}>
617+
${THRUST_EXAMPLE_RUN_ARGUMENTS})
571618
endif ()
572619
endforeach ()
573620

cmake/common_variables.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
set(THRUST_FILECHECK_DATA_PATH "${THRUST_SOURCE}/internal/test")

cmake/run_example.cmake

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
include("${THRUST_SOURCE}/cmake/common_variables.cmake")
2+
3+
if (THRUST_FILECHECK_ENABLED)
4+
set(DATA_FILE "${THRUST_FILECHECK_DATA_PATH}/${THRUST_EXAMPLE}.filecheck")
5+
file(READ "${DATA_FILE}" CONTENTS)
6+
string(LENGTH "${CONTENTS}" LENGTH)
7+
message(${LENGTH})
8+
9+
if (NOT ${LENGTH} EQUAL 0)
10+
set(FILECHECK_COMMAND
11+
COMMAND "${THRUST_FILECHECK}" "${THRUST_FILECHECK_DATA_PATH}/${THRUST_EXAMPLE}.filecheck")
12+
else ()
13+
set(CHECK_EMPTY_OUTPUT TRUE)
14+
endif ()
15+
endif ()
16+
17+
execute_process(
18+
COMMAND "${THRUST_BINARY}"
19+
${FILECHECK_COMMAND}
20+
RESULT_VARIABLE EXIT_CODE
21+
OUTPUT_VARIABLE STDOUT
22+
ERROR_VARIABLE STDERR
23+
)
24+
25+
if (NOT "0" STREQUAL "${EXIT_CODE}")
26+
message(FATAL_ERROR "${THRUST_BINARY} failed (${EXIT_CODE}):\n${STDERR}")
27+
endif ()
28+
29+
if (CHECK_EMPTY_OUTPUT)
30+
string(LENGTH "${OUTPUT_VARIABLE}" LENGTH)
31+
if (NOT ${LENGTH} EQUAL 0)
32+
message(FATAL_ERROR "${THRUST_BINARY}: output received, but not expected.")
33+
endif ()
34+
endif ()

cmake/run_test.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
execute_process(
2+
COMMAND "${THRUST_BINARY}"
3+
RESULT_VARIABLE EXIT_CODE
4+
)
5+
6+
if (NOT "0" STREQUAL "${EXIT_CODE}")
7+
message(FATAL_ERROR "${THRUST_BINARY} failed (${EXIT_CODE})")
8+
endif ()

cmake/sanity

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
SANITY
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
CHECK: pi is around 3.14151
1+
CHECK: pi is around 3.1415

0 commit comments

Comments
 (0)