|
|
@@ -22,8 +22,11 @@
|
|
|
#include "cmake.h"
|
|
|
|
|
|
#include <cmsys/FStream.hxx>
|
|
|
+#include <cmsys/Glob.hxx>
|
|
|
#include <cmsys/RegularExpression.hxx>
|
|
|
|
|
|
+#include <algorithm>
|
|
|
+
|
|
|
static const char vs10generatorName[] = "Visual Studio 10 2010";
|
|
|
|
|
|
// Map generator name without year to name with year.
|
|
|
@@ -160,6 +163,13 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorPlatform(
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+static void cmCudaToolVersion(std::string& s)
|
|
|
+{
|
|
|
+ // "CUDA x.y.props" => "x.y"
|
|
|
+ s = s.substr(5);
|
|
|
+ s = s.substr(0, s.size() - 6);
|
|
|
+}
|
|
|
+
|
|
|
bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
|
|
|
std::string const& ts, cmMakefile* mf)
|
|
|
{
|
|
|
@@ -180,6 +190,23 @@ bool cmGlobalVisualStudio10Generator::SetGeneratorToolset(
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ if (this->GeneratorToolsetCuda.empty()) {
|
|
|
+ // Find the highest available version of the CUDA tools.
|
|
|
+ std::vector<std::string> cudaTools;
|
|
|
+ std::string const bcDir = this->VCTargetsPath + "/BuildCustomizations";
|
|
|
+ cmsys::Glob gl;
|
|
|
+ gl.SetRelative(bcDir.c_str());
|
|
|
+ if (gl.FindFiles(bcDir + "/CUDA *.props")) {
|
|
|
+ cudaTools = gl.GetFiles();
|
|
|
+ }
|
|
|
+ if (!cudaTools.empty()) {
|
|
|
+ std::for_each(cudaTools.begin(), cudaTools.end(), cmCudaToolVersion);
|
|
|
+ std::sort(cudaTools.begin(), cudaTools.end(),
|
|
|
+ cmSystemTools::VersionCompareGreater);
|
|
|
+ this->GeneratorToolsetCuda = cudaTools.at(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (const char* toolset = this->GetPlatformToolset()) {
|
|
|
mf->AddDefinition("CMAKE_VS_PLATFORM_TOOLSET", toolset);
|
|
|
}
|