diff options
author | Robert Maynard <robert.maynard@kitware.com> | 2018-01-18 21:05:59 (GMT) |
---|---|---|
committer | Robert Maynard <robert.maynard@kitware.com> | 2018-01-30 14:14:02 (GMT) |
commit | fa583869f7e75cdc4c7499f0dbfab2cdac5061bd (patch) | |
tree | 325e7e091628ed0e901a800d2ceb5f99cf7a299a /Tests | |
parent | 142938225e572d846c956f9b1f54d24a960379ab (diff) | |
download | CMake-fa583869f7e75cdc4c7499f0dbfab2cdac5061bd.zip CMake-fa583869f7e75cdc4c7499f0dbfab2cdac5061bd.tar.gz CMake-fa583869f7e75cdc4c7499f0dbfab2cdac5061bd.tar.bz2 |
CUDA: Use MSVC default pattern for naming object files
The default that CUDA uses causes failures when you try to embed
CUDA obj's into another target.
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/Cuda/ObjectLibrary/CMakeLists.txt | 11 | ||||
-rw-r--r-- | Tests/Cuda/ObjectLibrary/Conflicts/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Tests/Cuda/ObjectLibrary/Conflicts/static.cu | 17 | ||||
-rw-r--r-- | Tests/Cuda/ObjectLibrary/main.cpp | 20 | ||||
-rw-r--r-- | Tests/Cuda/ObjectLibrary/static.cpp | 4 | ||||
-rw-r--r-- | Tests/Cuda/ObjectLibrary/static.cu | 6 |
6 files changed, 37 insertions, 23 deletions
diff --git a/Tests/Cuda/ObjectLibrary/CMakeLists.txt b/Tests/Cuda/ObjectLibrary/CMakeLists.txt index 276dc92..da5fb87 100644 --- a/Tests/Cuda/ObjectLibrary/CMakeLists.txt +++ b/Tests/Cuda/ObjectLibrary/CMakeLists.txt @@ -1,15 +1,18 @@ cmake_minimum_required(VERSION 3.7) project (CudaObjectLibrary CUDA CXX) #Goal for this example: - -#build a object files some with cuda and some without than -#embed these into an executable +# +#Build C++ and CUDA object files and than use them to make an executable +#Make sure that CMake logic to handle object output when multiple files +#with the same name works +add_subdirectory(Conflicts) add_library(CudaMixedObjectLib OBJECT static.cu static.cpp) add_executable(CudaObjectLibrary main.cpp - $<TARGET_OBJECTS:CudaMixedObjectLib>) + $<TARGET_OBJECTS:CudaMixedObjectLib> + $<TARGET_OBJECTS:CudaConflicts>) if(APPLE) # Help the static cuda runtime find the driver (libcuda.dyllib) at runtime. diff --git a/Tests/Cuda/ObjectLibrary/Conflicts/CMakeLists.txt b/Tests/Cuda/ObjectLibrary/Conflicts/CMakeLists.txt new file mode 100644 index 0000000..1602f8a --- /dev/null +++ b/Tests/Cuda/ObjectLibrary/Conflicts/CMakeLists.txt @@ -0,0 +1,2 @@ + +add_library(CudaConflicts OBJECT static.cu) diff --git a/Tests/Cuda/ObjectLibrary/Conflicts/static.cu b/Tests/Cuda/ObjectLibrary/Conflicts/static.cu new file mode 100644 index 0000000..586e8c6 --- /dev/null +++ b/Tests/Cuda/ObjectLibrary/Conflicts/static.cu @@ -0,0 +1,17 @@ + +#include <cuda.h> +#include <cuda_runtime.h> +#include <iostream> + +int __host__ cu2_sq_func(int x) +{ + cudaError_t err; + int nDevices = 0; + err = cudaGetDeviceCount(&nDevices); + if (err != cudaSuccess) { + std::cerr << "nDevices: " << nDevices << std::endl; + std::cerr << "err: " << err << std::endl; + return 1; + } + return x * x; +} diff --git a/Tests/Cuda/ObjectLibrary/main.cpp b/Tests/Cuda/ObjectLibrary/main.cpp index 4d2f890..e28f088 100644 --- a/Tests/Cuda/ObjectLibrary/main.cpp +++ b/Tests/Cuda/ObjectLibrary/main.cpp @@ -1,22 +1,18 @@ #include <iostream> -int static_func(int); -int file1_sq_func(int); +int cpp_sq_func(int); +int cu1_sq_func(int); +int cu2_sq_func(int); -int test_functions() +bool test_functions() { - return file1_sq_func(static_func(42)); + return (cu1_sq_func(42) == cpp_sq_func(42)) && + (cu2_sq_func(42) == cpp_sq_func(42)); } int main(int argc, char** argv) { - if (test_functions() == 1) { - return 1; - } - std::cout - << "this executable doesn't use cuda code, just call methods defined" - << std::endl; - std::cout << "in object files that have cuda code" << std::endl; - return 0; + int result = test_functions() ? 0 : 1; + return result; } diff --git a/Tests/Cuda/ObjectLibrary/static.cpp b/Tests/Cuda/ObjectLibrary/static.cpp index 6db1f91..527f7f5 100644 --- a/Tests/Cuda/ObjectLibrary/static.cpp +++ b/Tests/Cuda/ObjectLibrary/static.cpp @@ -1,6 +1,6 @@ int file1_sq_func(int); -int static_func(int x) +int cpp_sq_func(int x) { - return file1_sq_func(x); + return x * x; } diff --git a/Tests/Cuda/ObjectLibrary/static.cu b/Tests/Cuda/ObjectLibrary/static.cu index aa35729..37bb839 100644 --- a/Tests/Cuda/ObjectLibrary/static.cu +++ b/Tests/Cuda/ObjectLibrary/static.cu @@ -3,7 +3,7 @@ #include <cuda_runtime.h> #include <iostream> -int __host__ file1_sq_func(int x) +int __host__ cu1_sq_func(int x) { cudaError_t err; int nDevices = 0; @@ -13,9 +13,5 @@ int __host__ file1_sq_func(int x) std::cerr << "err: " << err << std::endl; return 1; } - std::cout << "this library uses cuda code" << std::endl; - std::cout << "you have " << nDevices << " devices that support cuda" - << std::endl; - return x * x; } |