diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2020-03-26 17:40:50 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2020-03-26 17:40:50 +0000 | 
| commit | eb4ff84dc5f98e31aebadff6c8aa38454c69a572 (patch) | |
| tree | 8723b8c0adc27ae1b38a51dcacd3c810caffd783 /clang/lib/Driver/ToolChains/Cuda.cpp | |
| parent | 2fc9bb9ce23aec06620745773d24e59944b87ffc (diff) | |
Notes
Diffstat (limited to 'clang/lib/Driver/ToolChains/Cuda.cpp')
| -rw-r--r-- | clang/lib/Driver/ToolChains/Cuda.cpp | 32 | 
1 files changed, 19 insertions, 13 deletions
diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 8a7da4f86b39..50d22a2a8ea7 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -32,24 +32,28 @@ using namespace llvm::opt;  // Parses the contents of version.txt in an CUDA installation.  It should  // contain one line of the from e.g. "CUDA Version 7.5.2". -static CudaVersion ParseCudaVersionFile(const Driver &D, llvm::StringRef V) { +void CudaInstallationDetector::ParseCudaVersionFile(llvm::StringRef V) { +  Version = CudaVersion::UNKNOWN;    if (!V.startswith("CUDA Version ")) -    return CudaVersion::UNKNOWN; +    return;    V = V.substr(strlen("CUDA Version "));    SmallVector<StringRef,4> VersionParts;    V.split(VersionParts, '.');    if (VersionParts.size() < 2) -    return CudaVersion::UNKNOWN; -  std::string MajorMinor = join_items(".", VersionParts[0], VersionParts[1]); -  CudaVersion Version = CudaStringToVersion(MajorMinor); +    return; +  DetectedVersion = join_items(".", VersionParts[0], VersionParts[1]); +  Version = CudaStringToVersion(DetectedVersion);    if (Version != CudaVersion::UNKNOWN) -    return Version; +    return; -  // Issue a warning and assume that the version we've found is compatible with -  // the latest version we support. -  D.Diag(diag::warn_drv_unknown_cuda_version) -      << MajorMinor << CudaVersionToString(CudaVersion::LATEST); -  return CudaVersion::LATEST; +  Version = CudaVersion::LATEST; +  DetectedVersionIsNotSupported = true; +} + +void CudaInstallationDetector::WarnIfUnsupportedVersion() { +  if (DetectedVersionIsNotSupported) +    D.Diag(diag::warn_drv_unknown_cuda_version) +        << DetectedVersion << CudaVersionToString(Version);  }  CudaInstallationDetector::CudaInstallationDetector( @@ -147,7 +151,7 @@ CudaInstallationDetector::CudaInstallationDetector(        // version.txt isn't present.        Version = CudaVersion::CUDA_70;      } else { -      Version = ParseCudaVersionFile(D, (*VersionFile)->getBuffer()); +      ParseCudaVersionFile((*VersionFile)->getBuffer());      }      if (Version >= CudaVersion::CUDA_90) { @@ -565,8 +569,10 @@ CudaToolChain::CudaToolChain(const Driver &D, const llvm::Triple &Triple,                               const Action::OffloadKind OK)      : ToolChain(D, Triple, Args), HostTC(HostTC),        CudaInstallation(D, HostTC.getTriple(), Args), OK(OK) { -  if (CudaInstallation.isValid()) +  if (CudaInstallation.isValid()) { +    CudaInstallation.WarnIfUnsupportedVersion();      getProgramPaths().push_back(CudaInstallation.getBinPath()); +  }    // Lookup binaries into the driver directory, this is used to    // discover the clang-offload-bundler executable.    getProgramPaths().push_back(getDriver().Dir);  | 
