From 8d75d8dc72a0ac4502991891782a2c84df1f61c3 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 14 Feb 2017 10:32:44 -0500 Subject: Tests: Add case for CUDA with C but not C++ An executable using CUDA and C should link as CUDA. --- Tests/Cuda/CMakeLists.txt | 1 + Tests/Cuda/WithC/CMakeLists.txt | 12 ++++++++++++ Tests/Cuda/WithC/cuda.cu | 16 ++++++++++++++++ Tests/Cuda/WithC/main.c | 6 ++++++ 4 files changed, 35 insertions(+) create mode 100644 Tests/Cuda/WithC/CMakeLists.txt create mode 100644 Tests/Cuda/WithC/cuda.cu create mode 100644 Tests/Cuda/WithC/main.c diff --git a/Tests/Cuda/CMakeLists.txt b/Tests/Cuda/CMakeLists.txt index 42b00e1..de48501 100644 --- a/Tests/Cuda/CMakeLists.txt +++ b/Tests/Cuda/CMakeLists.txt @@ -4,3 +4,4 @@ ADD_TEST_MACRO(Cuda.ConsumeCompileFeatures CudaConsumeCompileFeatures) ADD_TEST_MACRO(Cuda.ObjectLibrary CudaObjectLibrary) ADD_TEST_MACRO(Cuda.ToolkitInclude CudaToolkitInclude) ADD_TEST_MACRO(Cuda.ProperLinkFlags ProperLinkFlags) +ADD_TEST_MACRO(Cuda.WithC CudaWithC) diff --git a/Tests/Cuda/WithC/CMakeLists.txt b/Tests/Cuda/WithC/CMakeLists.txt new file mode 100644 index 0000000..7596804 --- /dev/null +++ b/Tests/Cuda/WithC/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.7) +project(CudaComplex CUDA C) + +set(CMAKE_CUDA_FLAGS "-gencode arch=compute_30,code=compute_30") + +add_executable(CudaWithC main.c cuda.cu) + +if(APPLE) + # We need to add the default path to the driver (libcuda.dylib) as an rpath, so that + # the static cuda runtime can find it at runtime. + target_link_libraries(CudaWithC PRIVATE -Wl,-rpath,/usr/local/cuda/lib) +endif() diff --git a/Tests/Cuda/WithC/cuda.cu b/Tests/Cuda/WithC/cuda.cu new file mode 100644 index 0000000..06bd7b9 --- /dev/null +++ b/Tests/Cuda/WithC/cuda.cu @@ -0,0 +1,16 @@ +#include + +#include + +extern "C" int use_cuda(void) +{ + int nDevices = 0; + cudaError_t err = cudaGetDeviceCount(&nDevices); + if (err != cudaSuccess) { + std::cerr << "Failed to retrieve the number of CUDA enabled devices" + << std::endl; + return 1; + } + std::cout << "Found " << nDevices << " CUDA enabled devices" << std::endl; + return 0; +} diff --git a/Tests/Cuda/WithC/main.c b/Tests/Cuda/WithC/main.c new file mode 100644 index 0000000..f9101a7 --- /dev/null +++ b/Tests/Cuda/WithC/main.c @@ -0,0 +1,6 @@ +extern int use_cuda(void); + +int main() +{ + return use_cuda(); +} -- cgit v0.12