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 >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits