Clspv is a compiler for OpenCL C targeting Vulkan compute shaders.
It consists of:
- A set of LLVM Module passes to transform a dialect of LLVM IR into a SPIR-V module containing Vulkan compute shaders.
- A command line compiler tool called 'clspv' to compile a subset of OpenCL C into a Vulkan compute shader.
Clspv depends on external projects:
- Top-of-tree versions of Clang and LLVM
- SPIRV-Tools
- SPIRV-Headers
Clspv is licensed under the terms of the Apache 2.0 license. The AUTHORS file lists the copyright owners, while individual credit is given in the CONTRIBUTORS file. To contribute, see CONTRIBUTING.md.
Materials in projects Clspv depends on are licensed under their own terms.
Clspv is not an official Google product.
Clspv has passed OpenCL3.0 conformance with:
- clvk as the runtime driver (submission 419)
using the following tags:
- clvk: khronos-submission-419
- clspv: clvk-khronos-submission-419
The input language is OpenCL C version 1.2. Read the OpenCL C on Vulkan Specification for more information on the support and the mapping into Vulkan compute shaders.
Compile a set of kernels into a SPIR-V binary module:
clspv foo.cl -o foo.spv
Emit the binary as a C initializer list, for easy embedding of a shader in in a C or C++ program source:
clspv -mfmt=c foo.cl -o -
Predefine some preprocessor symbols:
clspv -DWIDTH=32 -DHEIGHT=64 foo.cl -o foo.spv
Use OpenCL compiler options:
clspv -cl-fast-relaxed-math -cl-single-precision-constant foo.cl -o foo.spv
Show help:
clspv -help
Compiler Explorer is an interactive compiler exploration website. Edit code in C, C++, C#, F#, Rust, Go, D, Haskell, Swift, Pascal, ispc, Python, Java or in any of the other 30+ supported languages, and see how that code looks after being compiled in real time. Multiple compilers are supported for each language, many different tools and visualisations are available, and the UI layout is configurable (thanks to GoldenLayout).
-- https://github.com/compiler-explorer/compiler-explorer#readme
clspv is available in compiler-explorer among the OpenCL C
compilers.
It is built daily by the compiler-explorer infrastructure.
You will need:
- CMake
- Python3
- A C++ compiler
- git
Clspv depends on the sources for other projects, at specific commits.
Run the following command to download those dependencies, and place them
in the third_party
directory:
python3 utils/fetch_sources.py
Then, create a build directory:
cd <clspv-dir>
mkdir build
cd build
Then configure and build the code:
cmake <clspv-dir>
cmake --build .
This will build the clspv
command line compiler and place it in
location bin/clspv
under the build directory.
We recommend you use the Ninja build tool if it's available. To do so, replace the last two commands with:
cmake -G Ninja <clspv-dir>
ninja
Other useful configuration options (the first cmake
command):
-DCMAKE_BUILD_TYPE=RelWithDebInfo
: Build in release mode, with debugging information. Default is a debug build.
See the CMake documentation for more generic options.
To run the test suite from within the build directory:
cmake --build . --target check-spirv
Or if you are using Ninja:
ninja check-spirv
Clspv includes two LLVM IR libraries (cmake/clspv--.bc, cmake/clspv64--.bc) containing implementations of some OpenCL builtin functions, for the spir and spir64 targets respectively. These files are distributed under the LLVM license (included in LICENSE) as they are generated from the LLVM sub-project libclc. Refer to the source for the relevant copyrights.
You will need a pre-built version of LLVM for your system, CMake, and (optionally) Ninja.
To rebuild the library run the following commands:
cmake -GNinja <libclc dir> -DLIBCLC_TARGETS_TO_BUILD="clspv--;clspv64--" -DLLVM_CMAKE_DIR=</path/to/llvm_installation/lib/cmake/>
ninja
Copy the resulting clspv--.bc
and clspv64--.bc
files into the cmake/
directory and rebuild clspv.