Re: r291131 - [Driver] Driver changes to support CUDA compilation on Windows.

2017-01-06 Thread Justin Lebar via cfe-commits
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.

2017-01-06 Thread Reid Kleckner via cfe-commits
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.

2017-01-05 Thread Justin Lebar via cfe-commits
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