Index: cfe/trunk/lib/Driver/ToolChains.h =================================================================== --- cfe/trunk/lib/Driver/ToolChains.h +++ cfe/trunk/lib/Driver/ToolChains.h @@ -158,19 +158,19 @@ GCCInstallationDetector GCCInstallation; // \brief A class to find a viable CUDA installation - class CudaInstallationDetector { - bool IsValid; + private: const Driver &D; - std::string CudaInstallPath; - std::string CudaBinPath; - std::string CudaLibPath; - std::string CudaLibDevicePath; - std::string CudaIncludePath; - llvm::StringMap CudaLibDeviceMap; + bool IsValid = false; + std::string InstallPath; + std::string BinPath; + std::string LibPath; + std::string LibDevicePath; + std::string IncludePath; + llvm::StringMap LibDeviceMap; public: - CudaInstallationDetector(const Driver &D) : IsValid(false), D(D) {} + CudaInstallationDetector(const Driver &D) : D(D) {} void init(const llvm::Triple &TargetTriple, const llvm::opt::ArgList &Args); /// \brief Check whether we detected a valid Cuda install. @@ -179,18 +179,18 @@ void print(raw_ostream &OS) const; /// \brief Get the detected Cuda installation path. - StringRef getInstallPath() const { return CudaInstallPath; } + StringRef getInstallPath() const { return InstallPath; } /// \brief Get the detected path to Cuda's bin directory. - StringRef getBinPath() const { return CudaBinPath; } + StringRef getBinPath() const { return BinPath; } /// \brief Get the detected Cuda Include path. - StringRef getIncludePath() const { return CudaIncludePath; } + StringRef getIncludePath() const { return IncludePath; } /// \brief Get the detected Cuda library path. - StringRef getLibPath() const { return CudaLibPath; } + StringRef getLibPath() const { return LibPath; } /// \brief Get the detected Cuda device library path. - StringRef getLibDevicePath() const { return CudaLibDevicePath; } + StringRef getLibDevicePath() const { return LibDevicePath; } /// \brief Get libdevice file for given architecture std::string getLibDeviceFile(StringRef Gpu) const { - return CudaLibDeviceMap.lookup(Gpu); + return LibDeviceMap.lookup(Gpu); } }; Index: cfe/trunk/lib/Driver/ToolChains.cpp =================================================================== --- cfe/trunk/lib/Driver/ToolChains.cpp +++ cfe/trunk/lib/Driver/ToolChains.cpp @@ -1725,20 +1725,19 @@ if (CudaPath.empty() || !D.getVFS().exists(CudaPath)) continue; - CudaInstallPath = CudaPath; - CudaBinPath = CudaPath + "/bin"; - CudaIncludePath = CudaInstallPath + "/include"; - CudaLibDevicePath = CudaInstallPath + "/nvvm/libdevice"; - CudaLibPath = - CudaInstallPath + (TargetTriple.isArch64Bit() ? "/lib64" : "/lib"); - - if (!(D.getVFS().exists(CudaIncludePath) && - D.getVFS().exists(CudaBinPath) && D.getVFS().exists(CudaLibPath) && - D.getVFS().exists(CudaLibDevicePath))) + InstallPath = CudaPath; + BinPath = CudaPath + "/bin"; + IncludePath = InstallPath + "/include"; + LibDevicePath = InstallPath + "/nvvm/libdevice"; + LibPath = InstallPath + (TargetTriple.isArch64Bit() ? "/lib64" : "/lib"); + + auto &FS = D.getVFS(); + if (!(FS.exists(IncludePath) && FS.exists(BinPath) && FS.exists(LibPath) && + FS.exists(LibDevicePath))) continue; std::error_code EC; - for (llvm::sys::fs::directory_iterator LI(CudaLibDevicePath, EC), LE; + for (llvm::sys::fs::directory_iterator LI(LibDevicePath, EC), LE; !EC && LI != LE; LI = LI.increment(EC)) { StringRef FilePath = LI->path(); StringRef FileName = llvm::sys::path::filename(FilePath); @@ -1748,24 +1747,24 @@ continue; StringRef GpuArch = FileName.slice( LibDeviceName.size(), FileName.find('.', LibDeviceName.size())); - CudaLibDeviceMap[GpuArch] = FilePath.str(); + LibDeviceMap[GpuArch] = FilePath.str(); // Insert map entries for specifc devices with this compute capability. if (GpuArch == "compute_20") { - CudaLibDeviceMap["sm_20"] = FilePath; - CudaLibDeviceMap["sm_21"] = FilePath; + LibDeviceMap["sm_20"] = FilePath; + LibDeviceMap["sm_21"] = FilePath; } else if (GpuArch == "compute_30") { - CudaLibDeviceMap["sm_30"] = FilePath; - CudaLibDeviceMap["sm_32"] = FilePath; + LibDeviceMap["sm_30"] = FilePath; + LibDeviceMap["sm_32"] = FilePath; } else if (GpuArch == "compute_35") { - CudaLibDeviceMap["sm_35"] = FilePath; - CudaLibDeviceMap["sm_37"] = FilePath; + LibDeviceMap["sm_35"] = FilePath; + LibDeviceMap["sm_37"] = FilePath; } else if (GpuArch == "compute_50") { - CudaLibDeviceMap["sm_50"] = FilePath; - CudaLibDeviceMap["sm_52"] = FilePath; - CudaLibDeviceMap["sm_53"] = FilePath; - CudaLibDeviceMap["sm_60"] = FilePath; - CudaLibDeviceMap["sm_61"] = FilePath; - CudaLibDeviceMap["sm_62"] = FilePath; + LibDeviceMap["sm_50"] = FilePath; + LibDeviceMap["sm_52"] = FilePath; + LibDeviceMap["sm_53"] = FilePath; + LibDeviceMap["sm_60"] = FilePath; + LibDeviceMap["sm_61"] = FilePath; + LibDeviceMap["sm_62"] = FilePath; } } @@ -1776,7 +1775,7 @@ void Generic_GCC::CudaInstallationDetector::print(raw_ostream &OS) const { if (isValid()) - OS << "Found CUDA installation: " << CudaInstallPath << "\n"; + OS << "Found CUDA installation: " << InstallPath << "\n"; } namespace {