Clspv is a prototype compiler for a subset of OpenCL C to 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:
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.
The compiler is an incomplete prototype, with many rough edges.
The input language is a subset of OpenCL C version 1.2. The OpenCL C on Vulkan Specification describes the specific subset, and also 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
You will need:
- A C++ compiler
Getting sources for dependencies
Clspv depends on the sources for other projects, at specific commits.
Run the following command to download those dependencies, and place them
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
bin/clspv under the build directory.
Using Ninja to build, and other build options
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
-DCMAKE_BUILD_TYPE=RelWithDebInfo: Build in release mode, with debugging information. Default is a debug build.
To run the test suite from within the build directory:
cmake --build . --target check-spirv
Or if you are using Ninja:
Clspv includes an LLVM IR library (cmake/clspv--.bc) containing implementations of some OpenCL builtin functions. This file is distributed under the LLVM license (included in LICENSE) as it is generated from the LLVM sub-project libclc. Refer to the source for the relevant copyrights.
Rebuilding the Library
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 -DLIBCLC_TARGETS_TO_BUILD="clspv--" -DLLVM_CONFIG= ninja
Copy the resulting
clspv--.bc into the cmake/ directory and rebuild clspv.