r248433 - [CUDA] Added CUDA installation detector class.
Rui Ueyama via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 23 17:07:46 PDT 2015
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 <tra at 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 <ruiu at 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 <tra at 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 <ruiu at google.com> wrote:
>>>
>>>> On Wed, Sep 23, 2015 at 2:49 PM, Artem Belevich via cfe-commits <
>>>> cfe-commits at 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150923/687dc401/attachment-0001.html>
More information about the cfe-commits
mailing list