Re: r291131 - [Driver] Driver changes to support CUDA compilation on Windows.
chapuni pointed it out in the review thread a few minutes ago -- ongoing discussion there, would actually appreciate a pointer or two. -Justin On Fri, Jan 6, 2017 at 9:46 AM, Reid Kleckner wrote: > cuda-version-check.cu seems to be failing since this change: > http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/1768 > > The relevant failing part: > > $ > "C:/b/slave/clang-x86-windows-msvc2015/clang-x86-windows-msvc2015/stage1/./bin/clang.EXE" > "-v" "-###" "--cuda-gpu-arch=sm_60" > "--sysroot=C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver/Inputs/CUDA" > "C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver\cuda-version-check.cu" > $ > "C:/b/slave/clang-x86-windows-msvc2015/clang-x86-windows-msvc2015/stage1/./bin\FileCheck.EXE" > "C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver\cuda-version-check.cu" > "--check-prefix=ERR_SM60" > # command stderr: > C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver\cuda-version-check.cu:56:14: > error: expected string not found in input > // ERR_SM60: error: GPU arch sm_60 {{.*}} > ^ > :1:1: note: scanning from here > clang version 4.0.0 (trunk 291142) > ^ > :5:12: note: possible intended match here > clang.EXE: error: cannot find libdevice for sm_60. Provide path to different > CUDA installation via --cuda-path, or pass -nocudalib to build without > linking with libdevice. >^ > > On Thu, Jan 5, 2017 at 8:52 AM, Justin Lebar via cfe-commits > wrote: >> >> Author: jlebar >> Date: Thu Jan 5 10:52:29 2017 >> New Revision: 291131 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=291131&view=rev >> Log: >> [Driver] Driver changes to support CUDA compilation on Windows. >> >> Summary: >> For the most part this is straightforward: Just add a CudaInstallation >> object to the MSVC and MinGW toolchains. >> >> CudaToolChain has to override computeMSVCVersion so that >> Clang::constructJob passes the right version flag to cc1. We have to >> modify IsWindowsMSVC and friends in Clang::constructJob to be true when >> compiling CUDA device code on Windows for the same reason. >> >> Depends on: D28319 >> >> Reviewers: tra >> >> Subscribers: cfe-commits >> >> Differential Revision: https://reviews.llvm.org/D28320 >> >> Added: >> cfe/trunk/test/Driver/Inputs/CUDA-windows/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/bin/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/bin/.keep >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/include/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/include/.keep >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/lib/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/lib/.keep >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/nvvm/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/nvvm/libdevice/ >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/nvvm/libdevice/libdevice.compute_30.10.bc >> cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU >> Computing Toolkit/CUDA/v8.0/nvvm/libdevice/libdevice.compute_35.10.bc >> cfe/trunk/test/Driver/cuda-windows.cu >> Modified: >> cfe/trunk/include/clang/Driver/ToolChain.h >> cfe/trunk/lib/Driver/MSVCToolChain.cpp >> cfe/trunk/lib/Driver/MinGWToolChain.cpp >> cfe/trunk/lib/Driver/ToolChains.cpp >> cfe/trunk/lib/Driver/ToolChains.h >> cfe/trunk/lib/Driver/Tools.cpp >> >> Modified: cfe/trunk/include/clang/Driver/ToolChain.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=291131&r1=291130&r2=291131&view=diff >> >> == >> --- cfe/trunk/include/clang/Driver/ToolChain.h (original) >> +++ cfe/trunk/include/clang/Driver/ToolChain.h Thu Jan 5 10:52:29 2017 >> @@ -139,6 +139,13 @@ public: >>vfs::FileSystem &getVFS() const; >>const llvm::Triple &getTriple() const { return Triple; } >> >> + /// Get the toolchain's aux triple, if it has one. >> + /// >> + /// Exactly what the au
Re: r291131 - [Driver] Driver changes to support CUDA compilation on Windows.
cuda-version-check.cu seems to be failing since this change: http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/1768 The relevant failing part: $ "C:/b/slave/clang-x86-windows-msvc2015/clang-x86-windows-msvc2015/stage1/./bin/clang.EXE" "-v" "-###" "--cuda-gpu-arch=sm_60" "--sysroot=C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver/Inputs/CUDA" "C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver\ cuda-version-check.cu" $ "C:/b/slave/clang-x86-windows-msvc2015/clang-x86-windows-msvc2015/stage1/./bin\FileCheck.EXE" "C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver\ cuda-version-check.cu" "--check-prefix=ERR_SM60" # command stderr: C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\tools\clang\test\Driver\cuda-version-check.cu:56:14: error: expected string not found in input // ERR_SM60: error: GPU arch sm_60 {{.*}} ^ :1:1: note: scanning from here clang version 4.0.0 (trunk 291142) ^ :5:12: note: possible intended match here clang.EXE: error: cannot find libdevice for sm_60. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice. ^ On Thu, Jan 5, 2017 at 8:52 AM, Justin Lebar via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: jlebar > Date: Thu Jan 5 10:52:29 2017 > New Revision: 291131 > > URL: http://llvm.org/viewvc/llvm-project?rev=291131&view=rev > Log: > [Driver] Driver changes to support CUDA compilation on Windows. > > Summary: > For the most part this is straightforward: Just add a CudaInstallation > object to the MSVC and MinGW toolchains. > > CudaToolChain has to override computeMSVCVersion so that > Clang::constructJob passes the right version flag to cc1. We have to > modify IsWindowsMSVC and friends in Clang::constructJob to be true when > compiling CUDA device code on Windows for the same reason. > > Depends on: D28319 > > Reviewers: tra > > Subscribers: cfe-commits > > Differential Revision: https://reviews.llvm.org/D28320 > > Added: > cfe/trunk/test/Driver/Inputs/CUDA-windows/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/bin/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/bin/.keep > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/include/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/include/.keep > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/lib/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/lib/.keep > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/nvvm/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/nvvm/libdevice/ > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/nvvm/libdevice/libdevice.compute_30.10.bc > cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU > Computing Toolkit/CUDA/v8.0/nvvm/libdevice/libdevice.compute_35.10.bc > cfe/trunk/test/Driver/cuda-windows.cu > Modified: > cfe/trunk/include/clang/Driver/ToolChain.h > cfe/trunk/lib/Driver/MSVCToolChain.cpp > cfe/trunk/lib/Driver/MinGWToolChain.cpp > cfe/trunk/lib/Driver/ToolChains.cpp > cfe/trunk/lib/Driver/ToolChains.h > cfe/trunk/lib/Driver/Tools.cpp > > Modified: cfe/trunk/include/clang/Driver/ToolChain.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/Driver/ToolChain.h?rev=291131&r1=291130&r2=291131&view=diff > > == > --- cfe/trunk/include/clang/Driver/ToolChain.h (original) > +++ cfe/trunk/include/clang/Driver/ToolChain.h Thu Jan 5 10:52:29 2017 > @@ -139,6 +139,13 @@ public: >vfs::FileSystem &getVFS() const; >const llvm::Triple &getTriple() const { return Triple; } > > + /// Get the toolchain's aux triple, if it has one. > + /// > + /// Exactly what the aux triple represents depends on the toolchain, > but for > + /// example when compiling CUDA code for the GPU, the triple might be > NVPTX, > + /// while the aux triple is the host (CPU) toolchain, e.g. > x86-linux-gnu. > + virtual const llvm::Triple *getAuxTriple() const { return nullptr; } > + >
r291131 - [Driver] Driver changes to support CUDA compilation on Windows.
Author: jlebar Date: Thu Jan 5 10:52:29 2017 New Revision: 291131 URL: http://llvm.org/viewvc/llvm-project?rev=291131&view=rev Log: [Driver] Driver changes to support CUDA compilation on Windows. Summary: For the most part this is straightforward: Just add a CudaInstallation object to the MSVC and MinGW toolchains. CudaToolChain has to override computeMSVCVersion so that Clang::constructJob passes the right version flag to cc1. We have to modify IsWindowsMSVC and friends in Clang::constructJob to be true when compiling CUDA device code on Windows for the same reason. Depends on: D28319 Reviewers: tra Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D28320 Added: cfe/trunk/test/Driver/Inputs/CUDA-windows/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/bin/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/bin/.keep cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/include/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/include/.keep cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/.keep cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/nvvm/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/nvvm/libdevice/ cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/nvvm/libdevice/libdevice.compute_30.10.bc cfe/trunk/test/Driver/Inputs/CUDA-windows/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/nvvm/libdevice/libdevice.compute_35.10.bc cfe/trunk/test/Driver/cuda-windows.cu Modified: cfe/trunk/include/clang/Driver/ToolChain.h cfe/trunk/lib/Driver/MSVCToolChain.cpp cfe/trunk/lib/Driver/MinGWToolChain.cpp cfe/trunk/lib/Driver/ToolChains.cpp cfe/trunk/lib/Driver/ToolChains.h cfe/trunk/lib/Driver/Tools.cpp Modified: cfe/trunk/include/clang/Driver/ToolChain.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=291131&r1=291130&r2=291131&view=diff == --- cfe/trunk/include/clang/Driver/ToolChain.h (original) +++ cfe/trunk/include/clang/Driver/ToolChain.h Thu Jan 5 10:52:29 2017 @@ -139,6 +139,13 @@ public: vfs::FileSystem &getVFS() const; const llvm::Triple &getTriple() const { return Triple; } + /// Get the toolchain's aux triple, if it has one. + /// + /// Exactly what the aux triple represents depends on the toolchain, but for + /// example when compiling CUDA code for the GPU, the triple might be NVPTX, + /// while the aux triple is the host (CPU) toolchain, e.g. x86-linux-gnu. + virtual const llvm::Triple *getAuxTriple() const { return nullptr; } + llvm::Triple::ArchType getArch() const { return Triple.getArch(); } StringRef getArchName() const { return Triple.getArchName(); } StringRef getPlatform() const { return Triple.getVendorName(); } Modified: cfe/trunk/lib/Driver/MSVCToolChain.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/MSVCToolChain.cpp?rev=291131&r1=291130&r2=291131&view=diff == --- cfe/trunk/lib/Driver/MSVCToolChain.cpp (original) +++ cfe/trunk/lib/Driver/MSVCToolChain.cpp Thu Jan 5 10:52:29 2017 @@ -47,9 +47,9 @@ using namespace clang::driver::toolchain using namespace clang; using namespace llvm::opt; -MSVCToolChain::MSVCToolChain(const Driver &D, const llvm::Triple& Triple, +MSVCToolChain::MSVCToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) - : ToolChain(D, Triple, Args) { +: ToolChain(D, Triple, Args), CudaInstallation(D, Triple, Args) { getProgramPaths().push_back(getDriver().getInstalledDir()); if (getDriver().getInstalledDir() != getDriver().Dir) getProgramPaths().push_back(getDriver().Dir); @@ -94,6 +94,15 @@ bool MSVCToolChain::isPICDefaultForced() return getArch() == llvm::Triple::x86_64; } +void MSVCToolChain::AddCudaIncludeArgs(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + CudaInstallation.AddCudaIncludeArgs(DriverArgs, CC1Args); +} + +void MSVCToolChain::printVerboseInfo(raw_ostream &OS) const { + Cud