Commit 4499cc8b authored by Brad King's avatar Brad King Committed by Kitware Robot
Browse files

Merge topic 'msvc_cuda_files_use_consistent_obj_names'

fa583869

 CUDA: Use MSVC default pattern for naming object files
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !1722
parents a7ee918f fa583869
Pipeline #89852 failed with stage
in 0 seconds
......@@ -2078,9 +2078,15 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
(*this->BuildFileStream) << firstString;
firstString = "";
hasFlags = true;
this->WriteString("<ObjectFileName>", 3);
(*this->BuildFileStream) << "$(IntDir)/" << objectName
<< "</ObjectFileName>\n";
if (lang == "CUDA") {
this->WriteString("<CompileOut>", 3);
(*this->BuildFileStream) << "$(IntDir)/" << objectName
<< "</CompileOut>\n";
} else {
this->WriteString("<ObjectFileName>", 3);
(*this->BuildFileStream) << "$(IntDir)/" << objectName
<< "</ObjectFileName>\n";
}
}
for (std::string const& config : this->Configurations) {
std::string configUpper = cmSystemTools::UpperCase(config);
......@@ -2688,6 +2694,11 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaOptions(
cudaOptions.AddFlag("GPUDebugInfo", "false");
}
// The extension on object libraries the CUDA gives isn't
// consistent with how MSVC generates object libraries for C+, so set
// the default to not have any extension
cudaOptions.AddFlag("CompileOut", "$(IntDir)%(Filename).obj");
bool notPtx = true;
if (this->GeneratorTarget->GetPropertyAsBool("CUDA_SEPARABLE_COMPILATION")) {
cudaOptions.AddFlag("GenerateRelocatableDeviceCode", "true");
......
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.
......
add_library(CudaConflicts OBJECT static.cu)
#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;
}
#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;
}
int file1_sq_func(int);
int static_func(int x)
int cpp_sq_func(int x)
{
return file1_sq_func(x);
return x * x;
}
......@@ -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;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment