From 91e461fcf29f55338bdbc6da95ad5de5dfd8c9d0 Mon Sep 17 00:00:00 2001 From: Evgeny Mankov Date: Tue, 23 Jul 2019 19:18:17 +0300 Subject: [PATCH] HIPIFY] Clang 8.0.1 support + Tested on Windows and Linux; + Provide patch for clang's bug 38811; + Update Readme.md accordingly. P.S. With the next 9.0.0 release patches for Windows won't be needed, cause all fixes will be there. --- hipify-clang/README.md | 9 +++++---- .../patches/patch_for_clang_8.0.1_bug_38811.zip | Bin 0 -> 14641 bytes 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 hipify-clang/patches/patch_for_clang_8.0.1_bug_38811.zip diff --git a/hipify-clang/README.md b/hipify-clang/README.md index 37cbd8e069..a8664b9ce8 100644 --- a/hipify-clang/README.md +++ b/hipify-clang/README.md @@ -36,7 +36,7 @@ 2. **CUDA** at least version [7.0](https://developer.nvidia.com/cuda-toolkit-70), the latest supported version is [**9.0**](https://developer.nvidia.com/cuda-90-download-archive) on **Windows**, and [**10.0**](https://developer.nvidia.com/cuda-10.0-download-archive) on **Linux**. -If the target CUDA is [9.1](https://developer.nvidia.com/cuda-91-download-archive), [9.2](https://developer.nvidia.com/cuda-92-download-archive) or [10.0](https://developer.nvidia.com/cuda-10.0-download-archive), to work on Windows you may apply patches*: [for LLVM 7.0.0](patches/patch_for_clang_7.0.0_bug_38811.zip), [for LLVM 7.0.1](patches/patch_for_clang_7.0.1_bug_38811.zip), [for LLVM 8.0.0](patches/patch_for_clang_8.0.0_bug_38811.zip). +If the target CUDA is [9.1](https://developer.nvidia.com/cuda-91-download-archive), [9.2](https://developer.nvidia.com/cuda-92-download-archive) or [10.0](https://developer.nvidia.com/cuda-10.0-download-archive), to work on Windows you may apply patches* for LLVM: [7.0.0](patches/patch_for_clang_7.0.0_bug_38811.zip), [7.0.1](patches/patch_for_clang_7.0.1_bug_38811.zip), [7.1.0](patches/patch_for_clang_7.1.0_bug_38811.zip), [8.0.0](patches/patch_for_clang_8.0.0_bug_38811.zip), [8.0.1](patches/patch_for_clang_8.0.1_bug_38811.zip). | **LLVM release version** | **CUDA latest supported version** | **Windows** | **Linux** | |:----------------------------------------------------------:|:-------------------------------------------------------------------:|:------------:|:---------:| @@ -54,8 +54,9 @@ If the target CUDA is [9.1](https://developer.nvidia.com/cuda-91-download-archiv | [7.0.0](http://releases.llvm.org/download.html#7.0.0) | [9.2](https://developer.nvidia.com/cuda-92-download-archive) | -
not working due to
the clang's bug [38811](https://bugs.llvm.org/show_bug.cgi?id=38811)
+
[patch](patches/patch_for_clang_7.0.0_bug_38811.zip)*
| -
not working due to
the clang's bug [36384](https://bugs.llvm.org/show_bug.cgi?id=36384) | | [7.0.1](http://releases.llvm.org/download.html#7.0.1) | [9.2](https://developer.nvidia.com/cuda-92-download-archive) | -
not working due to
the clang's bug [38811](https://bugs.llvm.org/show_bug.cgi?id=38811)
+
[patch](patches/patch_for_clang_7.0.1_bug_38811.zip)*
| -
not working due to
the clang's bug [36384](https://bugs.llvm.org/show_bug.cgi?id=36384) | | [7.1.0](http://releases.llvm.org/download.html#7.1.0) | [9.2](https://developer.nvidia.com/cuda-92-download-archive) | -
not working due to
the clang's bug [38811](https://bugs.llvm.org/show_bug.cgi?id=38811)
+
[patch](patches/patch_for_clang_7.1.0_bug_38811.zip)*
| -
not working due to
the clang's bug [36384](https://bugs.llvm.org/show_bug.cgi?id=36384) | -| [**8.0.0**](http://releases.llvm.org/download.html#8.0.0) | [**10.0**](https://developer.nvidia.com/cuda-10.0-download-archive) | -
not working due to
the clang's bug [38811](https://bugs.llvm.org/show_bug.cgi?id=38811)
+
[patch](patches/patch_for_clang_8.0.0_bug_38811.zip)*
| +
**LATEST STABLE RELEASE** | -| 8.0.1 | 10.2 | -
LLVM 8.0.1
is not yet released | -
LLVM 8.0.1
is not yet released | +| [8.0.0](http://releases.llvm.org/download.html#8.0.0) | [10.0](https://developer.nvidia.com/cuda-10.0-download-archive) | -
not working due to
the clang's bug [38811](https://bugs.llvm.org/show_bug.cgi?id=38811)
+
[patch](patches/patch_for_clang_8.0.0_bug_38811.zip)*
| + | +| [**8.0.1**](http://releases.llvm.org/download.html#8.0.1) | [**10.0**](https://developer.nvidia.com/cuda-10.0-download-archive) | -
not working due to
the clang's bug [38811](https://bugs.llvm.org/show_bug.cgi?id=38811)
+
[patch](patches/patch_for_clang_8.0.1_bug_38811.zip)*
| +
**LATEST STABLE RELEASE** | +| 9.0.0 | 10.1 |
LLVM 9.0.0
is not yet released |
LLVM 9.0.0
is not yet released | `*` Download the patch and unpack it into your LLVM distributive directory; a few header files will be overwritten; rebuilding of LLVM is not needed. @@ -317,7 +318,7 @@ LLVM 7.0.0 - 8.0.0 (with patch*), CUDA 7.5 - 10.0, cudnn-7.0.5.15 - cudnn-7.6.1. Build system for the above configurations: -Python 3.6 (min), cmake 3.12.3 (min), Visual Studio 15.5.2 2017 - 16.0.4 2019. +Python 3.6 (min), cmake 3.12.3 (min), Visual Studio 15.5.2 2017 - 16.1.6 2019. Here is an example of building `hipify-clang` with testing support on `Windows 10` by `Visual Studio 15 2017`: diff --git a/hipify-clang/patches/patch_for_clang_8.0.1_bug_38811.zip b/hipify-clang/patches/patch_for_clang_8.0.1_bug_38811.zip new file mode 100644 index 0000000000000000000000000000000000000000..16d66a20621fce2101711a0cd3b9360830387e3f GIT binary patch literal 14641 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 Bw3+|_ literal 0 HcmV?d00001