Interesting. So it's sysroot option that's somehow to blame. --cuda-path=<long path> works.
I'll disable part of the test that uses sysroot for now and will submit a proper fix once I figure it out. --Artem On Wed, Sep 23, 2015 at 5:07 PM, Rui Ueyama <r...@google.com> wrote: > I don't know the exact condition, but here's my results. > > OK > > $ bin/clang -v -target=i386-unknown-linux > --sysroot=/tmp/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/CUDA > clang-3.7: error: unknown argument: '-target=i386-unknown-linux' > clang version 3.8.0 (http://llvm.org/git/clang.git > 261b6512ccd334c6fc80d0d254a98627b053b07d) (llvm/trunk 248446) > Target: x86_64-unknown-linux-gnu > Thread model: posix > InstalledDir: /ssd/build/bin > Found CUDA installation: > /tmp/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/CUDA/usr/local/cuda > > NG > > $ bin/clang -v -target=i386-unknown-linux > --sysroot=/tmp/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/CUDA > clang-3.7: error: unknown argument: '-target=i386-unknown-linux' > clang version 3.8.0 (http://llvm.org/git/clang.git > 261b6512ccd334c6fc80d0d254a98627b053b07d) (llvm/trunk 248446) > Target: x86_64-unknown-linux-gnu > Thread model: posix > InstalledDir: /ssd/build/bin > > (no "Found CUDA installation") > > On Wed, Sep 23, 2015 at 5:00 PM, Artem Belevich <t...@google.com> wrote: > >> 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 >> > > -- --Artem Belevich
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits