I'm looking into it. Can you reproduce it on linux?
On Wed, Sep 23, 2015 at 4:43 PM, Rui Ueyama <r...@google.com> wrote: > On Wed, Sep 23, 2015 at 2:49 PM, Artem Belevich via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: tra >> Date: Wed Sep 23 16:49:39 2015 >> New Revision: 248433 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=248433&view=rev >> Log: >> [CUDA] Added CUDA installation detector class. >> >> Added new option --cuda-path=<path> which allows >> overriding default search paths. >> If it's not specified we look for CUDA installation in >> /usr/include/cuda and /usr/include/cuda-7.0. >> >> Differential Revision: http://reviews.llvm.org/D12989 >> >> Added: >> cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/include/.keep >> cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/lib/.keep >> cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/lib64/.keep >> cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/nvvm/libdevice/.keep >> cfe/trunk/test/Driver/cuda-detect.cu >> Modified: >> cfe/trunk/include/clang/Driver/Options.td >> cfe/trunk/lib/Driver/ToolChains.cpp >> cfe/trunk/lib/Driver/ToolChains.h >> >> Modified: cfe/trunk/include/clang/Driver/Options.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=248433&r1=248432&r2=248433&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Driver/Options.td (original) >> +++ cfe/trunk/include/clang/Driver/Options.td Wed Sep 23 16:49:39 2015 >> @@ -359,6 +359,8 @@ def cuda_gpu_arch_EQ : Joined<["--"], "c >> Flags<[DriverOption, HelpHidden]>, HelpText<"CUDA GPU architecture">; >> def cuda_host_only : Flag<["--"], "cuda-host-only">, >> HelpText<"Do host-side CUDA compilation only">; >> +def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>, >> + HelpText<"CUDA installation path">; >> def dA : Flag<["-"], "dA">, Group<d_Group>; >> def dD : Flag<["-"], "dD">, Group<d_Group>, Flags<[CC1Option]>, >> HelpText<"Print macro definitions in -E mode in addition to normal >> output">; >> >> Modified: cfe/trunk/lib/Driver/ToolChains.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=248433&r1=248432&r2=248433&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/ToolChains.cpp (original) >> +++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Sep 23 16:49:39 2015 >> @@ -1482,6 +1482,48 @@ bool Generic_GCC::GCCInstallationDetecto >> BiarchTripleAliases.push_back(BiarchTriple.str()); >> } >> >> +// \brief -- try common CUDA installation paths looking for files we >> need for >> +// CUDA compilation. >> + >> +void >> +Generic_GCC::CudaInstallationDetector::init(const Driver &D, >> + const llvm::Triple >> &TargetTriple, >> + const llvm::opt::ArgList >> &Args) { >> + SmallVector<StringRef, 4> CudaPathCandidates; >> + >> + if (Args.hasArg(options::OPT_cuda_path_EQ)) >> + CudaPathCandidates.push_back( >> + Args.getLastArgValue(options::OPT_cuda_path_EQ)); >> + else { >> + CudaPathCandidates.push_back(D.SysRoot + "/usr/local/cuda"); >> + CudaPathCandidates.push_back(D.SysRoot + "/usr/local/cuda-7.0"); >> + } >> + >> + for (const auto CudaPath : CudaPathCandidates) { >> + if (CudaPath.empty() || !llvm::sys::fs::exists(CudaPath)) >> + continue; >> + >> + CudaInstallPath = CudaPath; >> + CudaIncludePath = CudaInstallPath + "/include"; >> + CudaLibDevicePath = CudaInstallPath + "/nvvm/libdevice"; >> + CudaLibPath = >> + CudaInstallPath + (TargetTriple.isArch64Bit() ? "/lib64" : >> "/lib"); >> + >> + if (!(llvm::sys::fs::exists(CudaIncludePath) && >> + llvm::sys::fs::exists(CudaLibPath) && >> + llvm::sys::fs::exists(CudaLibDevicePath))) >> + continue; >> + >> + IsValid = true; >> + break; >> + } >> +} >> + >> +void Generic_GCC::CudaInstallationDetector::print(raw_ostream &OS) const >> { >> + if (isValid()) >> + OS << "Found CUDA installation: " << CudaInstallPath << "\n"; >> +} >> + >> namespace { >> // Filter to remove Multilibs that don't exist as a suffix to Path >> class FilterNonExistent { >> @@ -2053,7 +2095,7 @@ void Generic_GCC::GCCInstallationDetecto >> >> Generic_GCC::Generic_GCC(const Driver &D, const llvm::Triple &Triple, >> const ArgList &Args) >> - : ToolChain(D, Triple, Args), GCCInstallation() { >> + : ToolChain(D, Triple, Args), GCCInstallation(), CudaInstallation() { >> getProgramPaths().push_back(getDriver().getInstalledDir()); >> if (getDriver().getInstalledDir() != getDriver().Dir) >> getProgramPaths().push_back(getDriver().Dir); >> @@ -2085,6 +2127,7 @@ Tool *Generic_GCC::buildLinker() const { >> void Generic_GCC::printVerboseInfo(raw_ostream &OS) const { >> // Print the information about how we detected the GCC installation. >> GCCInstallation.print(OS); >> + CudaInstallation.print(OS); >> } >> >> bool Generic_GCC::IsUnwindTablesDefault() const { >> @@ -3261,6 +3304,7 @@ static StringRef getOSLibDir(const llvm: >> Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList >> &Args) >> : Generic_ELF(D, Triple, Args) { >> GCCInstallation.init(D, Triple, Args); >> + CudaInstallation.init(D, Triple, Args); >> Multilibs = GCCInstallation.getMultilibs(); >> llvm::Triple::ArchType Arch = Triple.getArch(); >> std::string SysRoot = computeSysRoot(); >> >> Modified: cfe/trunk/lib/Driver/ToolChains.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=248433&r1=248432&r2=248433&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/ToolChains.h (original) >> +++ cfe/trunk/lib/Driver/ToolChains.h Wed Sep 23 16:49:39 2015 >> @@ -157,6 +157,38 @@ public: >> protected: >> GCCInstallationDetector GCCInstallation; >> >> + // \brief A class to find a viable CUDA installation >> + >> + class CudaInstallationDetector { >> + bool IsValid; >> + std::string CudaInstallPath; >> + std::string CudaLibPath; >> + std::string CudaLibDevicePath; >> + std::string CudaIncludePath; >> + >> + public: >> + CudaInstallationDetector() : IsValid(false) {} >> + void init(const Driver &D, const llvm::Triple &TargetTriple, >> + const llvm::opt::ArgList &Args); >> + >> + /// \brief Check whether we detected a valid Cuda install. >> + bool isValid() const { return IsValid; } >> + /// \brief Print information about the detected CUDA installation. >> + void print(raw_ostream &OS) const; >> + >> + /// \brief Get the detected Cuda installation path. >> + StringRef getInstallPath() const { return CudaInstallPath; } >> + /// \brief Get the detected Cuda Include path. >> + StringRef getIncludePath() const { return CudaIncludePath; } >> + /// \brief Get the detected Cuda library path. >> + StringRef getLibPath() const { return CudaLibPath; } >> + /// \brief Get the detected Cuda device library path. >> + StringRef getLibDevicePath() const { return CudaLibDevicePath; } >> + /// \brief Get libdevice file for given architecture >> + }; >> + >> + CudaInstallationDetector CudaInstallation; >> + >> public: >> Generic_GCC(const Driver &D, const llvm::Triple &Triple, >> const llvm::opt::ArgList &Args); >> >> Added: cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/include/.keep >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/include/.keep?rev=248433&view=auto >> >> ============================================================================== >> (empty) >> >> Added: cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/lib/.keep >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/lib/.keep?rev=248433&view=auto >> >> ============================================================================== >> (empty) >> >> Added: cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/lib64/.keep >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/lib64/.keep?rev=248433&view=auto >> >> ============================================================================== >> (empty) >> >> Added: >> cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/nvvm/libdevice/.keep >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/CUDA/usr/local/cuda/nvvm/libdevice/.keep?rev=248433&view=auto >> >> ============================================================================== >> (empty) >> >> Added: cfe/trunk/test/Driver/cuda-detect.cu >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cuda-detect.cu?rev=248433&view=auto >> >> ============================================================================== >> --- cfe/trunk/test/Driver/cuda-detect.cu (added) >> +++ cfe/trunk/test/Driver/cuda-detect.cu Wed Sep 23 16:49:39 2015 >> @@ -0,0 +1,12 @@ >> +// REQUIRES: clang-driver >> +// REQUIRES: x86-registered-target >> +// >> +// RUN: %clang -v --target=i386-unknown-linux \ >> +// RUN: --sysroot=/tmp/no-cuda-there 2>&1 | FileCheck %s -check-prefix >> NOCUDA >> +// RUN: %clang -v --target=i386-unknown-linux \ >> +// RUN: --sysroot=%S/Inputs/CUDA 2>&1 | FileCheck %s >> +// RUN: %clang -v --target=i386-unknown-linux \ >> +// RUN: --cuda-path=%S/Inputs/CUDA/usr/local/cuda 2>&1 | FileCheck %s >> + >> +// CHECK: Found CUDA installation: {{.*}}/Inputs/CUDA/usr/local/cuda >> +// NOCUDA-NOT: Found CUDA installation: >> > > This test seems to fail on Linux if the full path to Inputs directory is > very long because it fails to detect the cuda installation path. Can you > take a look? > -- --Artem Belevich
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits