mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 22:58:41 +00:00
VS: Place CUDA host compiler options in proper project file fields
The CUDA Toolkit's VS integration provides abstractions for host compiler options for `nvcc` to pass through `-Xcompiler` to the host MSVC. Populate our secondary flag table and use it to remove flags from the `AdditionalCompilerOptions` in favor of their abstractions. Unfortunately a bug in the CUDA 8.0 VS integration prevents us from passing anything in `AdditionalCompilerOptions` reliably. After taking out the flags that have dedicated abstractions, drop the rest.
This commit is contained in:
parent
29f07b0867
commit
4def02a385
@ -1 +1,9 @@
|
||||
static cmVS7FlagTable cmVS10CudaFlagTable[] = { { 0, 0, 0, 0, 0 } };
|
||||
static cmVS7FlagTable cmVS10CudaFlagTable[] = {
|
||||
// Collect options meant for the host compiler.
|
||||
{ "AdditionalCompilerOptions", "Xcompiler=", "Host compiler options", "",
|
||||
cmVS7FlagTable::UserValue | cmVS7FlagTable::SpaceAppendable },
|
||||
{ "AdditionalCompilerOptions", "Xcompiler", "Host compiler options", "",
|
||||
cmVS7FlagTable::UserFollowing | cmVS7FlagTable::SpaceAppendable },
|
||||
|
||||
{ 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
@ -1 +1,35 @@
|
||||
static cmVS7FlagTable cmVS10CudaHostFlagTable[] = { { 0, 0, 0, 0, 0 } };
|
||||
static cmVS7FlagTable cmVS10CudaHostFlagTable[] = {
|
||||
//{"Optimization", "", "<inherit from host>", "InheritFromHost", 0},
|
||||
{ "Optimization", "Od", "Disabled", "Od", 0 },
|
||||
{ "Optimization", "O1", "Minimize Size", "O1", 0 },
|
||||
{ "Optimization", "O2", "Maximize Speed", "O2", 0 },
|
||||
{ "Optimization", "Ox", "Full Optimization", "O3", 0 },
|
||||
|
||||
//{"Runtime", "", "<inherit from host>", "InheritFromHost", 0},
|
||||
{ "Runtime", "MT", "Multi-Threaded", "MT", 0 },
|
||||
{ "Runtime", "MTd", "Multi-Threaded Debug", "MTd", 0 },
|
||||
{ "Runtime", "MD", "Multi-Threaded DLL", "MD", 0 },
|
||||
{ "Runtime", "MDd", "Multi-threaded Debug DLL", "MDd", 0 },
|
||||
{ "Runtime", "ML", "Single-Threaded", "ML", 0 },
|
||||
{ "Runtime", "MLd", "Single-Threaded Debug", "MLd", 0 },
|
||||
|
||||
//{"RuntimeChecks", "", "<inherit from host>", "InheritFromHost", 0},
|
||||
//{"RuntimeChecks", "", "Default", "Default", 0},
|
||||
{ "RuntimeChecks", "RTCs", "Stack Frames", "RTCs", 0 },
|
||||
{ "RuntimeChecks", "RTCu", "Uninitialized Variables", "RTCu", 0 },
|
||||
{ "RuntimeChecks", "RTC1", "Both", "RTC1", 0 },
|
||||
|
||||
//{"TypeInfo", "", "<inherit from host>", "InheritFromHost", 0},
|
||||
{ "TypeInfo", "GR", "Yes", "true", 0 },
|
||||
{ "TypeInfo", "GR-", "No", "false", 0 },
|
||||
|
||||
//{"Warning", "", "<inherit from host>", "InheritFromHost", 0},
|
||||
{ "Warning", "W0", "Off: Turn Off All Warnings", "W0", 0 },
|
||||
{ "Warning", "W1", "Level 1", "W1", 0 },
|
||||
{ "Warning", "W2", "Level 2", "W2", 0 },
|
||||
{ "Warning", "W3", "Level 3", "W3", 0 },
|
||||
{ "Warning", "W4", "Level 4", "W4", 0 },
|
||||
{ "Warning", "Wall", "Enable All Warnings", "Wall", 0 },
|
||||
|
||||
{ 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
@ -2470,6 +2470,16 @@ bool cmVisualStudio10TargetGenerator::ComputeCudaOptions(
|
||||
cudaOptions.Parse(defineFlags.c_str());
|
||||
cudaOptions.ParseFinish();
|
||||
|
||||
// Convert the host compiler options to the toolset's abstractions
|
||||
// using a secondary flag table.
|
||||
cudaOptions.ClearTables();
|
||||
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");
|
||||
|
||||
std::vector<std::string> targetDefines;
|
||||
this->GeneratorTarget->GetCompileDefinitions(targetDefines,
|
||||
configName.c_str(), "CUDA");
|
||||
|
Loading…
Reference in New Issue
Block a user