How long is very long? I've tested on ubuntu with ~1600-character-long path and it works.
Buildbot filed with a much shorter path: http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_check/7416/consoleFull#-1841136826a1ca8a51-895e-46c6-af87-ce24fa4cd561 I'll unroll my change if I fail to figure out how to fix it shortly. --Artem On Wed, Sep 23, 2015 at 4:51 PM, Rui Ueyama <r...@google.com> wrote: > Yes I can. Create a deep nested directly, create a symlink from there to > your Inputs/CUDA, and run "clang -v --target=i386-unknown-linux > --sysroot=<very long directory>/Inputs/CUDA". > > On Wed, Sep 23, 2015 at 4:47 PM, Artem Belevich <t...@google.com> wrote: > >> 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 >> > > -- --Artem Belevich
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits