Browse Source

Tests: Add case for CUDA with C but not C++

An executable using CUDA and C should link as CUDA.
Brad King 8 years ago
parent
commit
8d75d8dc72
4 changed files with 35 additions and 0 deletions
  1. 1 0
      Tests/Cuda/CMakeLists.txt
  2. 12 0
      Tests/Cuda/WithC/CMakeLists.txt
  3. 16 0
      Tests/Cuda/WithC/cuda.cu
  4. 6 0
      Tests/Cuda/WithC/main.c

+ 1 - 0
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)

+ 12 - 0
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()

+ 16 - 0
Tests/Cuda/WithC/cuda.cu

@@ -0,0 +1,16 @@
+#include <cuda.h>
+
+#include <iostream>
+
+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;
+}

+ 6 - 0
Tests/Cuda/WithC/main.c

@@ -0,0 +1,6 @@
+extern int use_cuda(void);
+
+int main()
+{
+  return use_cuda();
+}