mirror of
https://github.com/reactos/CMake.git
synced 2024-12-04 09:54:15 +00:00
VS: Improve workaround for CUDA -Xcompiler placement bug
In commit v3.9.0-rc1~431^2~6 (VS: Place CUDA host compiler options in proper project file fields, 2017-03-07) we worked around a bug in the CUDA VS integration by dropping `AdditionalCompilerOptions`. However, this silently drops `-Xcompiler=` options given by the user that don't map to one of CudaCompile's dedicated settings. Improve the workaround to instead put the remaining `AdditionalCompilerOptions` into the `AdditionalOptions` field behind `-Xcompiler=` ourselves.
This commit is contained in:
parent
f2059585e6
commit
3b75421515
@ -2523,9 +2523,16 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaOptions(
|
||||
cudaOptions.AddTable(gg->GetCudaHostFlagTable());
|
||||
cudaOptions.Reparse("AdditionalCompilerOptions");
|
||||
|
||||
// `CUDA 8.0.targets` places these before nvcc! Just drop whatever
|
||||
// did not parse and hope it works.
|
||||
cudaOptions.RemoveFlag("AdditionalCompilerOptions");
|
||||
// `CUDA 8.0.targets` places AdditionalCompilerOptions before nvcc!
|
||||
// Pass them through -Xcompiler in AdditionalOptions instead.
|
||||
if (const char* acoPtr = cudaOptions.GetFlag("AdditionalCompilerOptions")) {
|
||||
std::string aco = acoPtr;
|
||||
cudaOptions.RemoveFlag("AdditionalCompilerOptions");
|
||||
if (!aco.empty()) {
|
||||
aco = this->LocalGenerator->EscapeForShell(aco, false);
|
||||
cudaOptions.AppendFlag("AdditionalOptions", "-Xcompiler=" + aco);
|
||||
}
|
||||
}
|
||||
|
||||
cudaOptions.FixCudaCodeGeneration();
|
||||
|
||||
|
@ -15,6 +15,10 @@ set(CMAKE_CUDA_STANDARD 11)
|
||||
|
||||
add_library(CUDASeparateLibA STATIC file1.cu file2.cu file3.cu)
|
||||
|
||||
if(CMAKE_CUDA_SIMULATE_ID STREQUAL "MSVC")
|
||||
target_compile_options(CUDASeparateLibA PRIVATE -Xcompiler=-bigobj)
|
||||
endif()
|
||||
|
||||
#Having file4/file5 in a shared library causes serious problems
|
||||
#with the nvcc linker and it will generate bad entries that will
|
||||
#cause a segv when trying to run the executable
|
||||
|
Loading…
Reference in New Issue
Block a user