Skip to content
No description, website, or topics provided.
C++ CMake C
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
cl_headers Fix for attaching opencl-c-base.h into ress Aug 28, 2019
cmake/modules Fix several build issues on Windows Jan 17, 2019
linux_linker Structural changes Jan 17, 2019
LICENSE Add file with the license Jan 17, 2019 Upgrade to llvm 10 Sep 12, 2019
common_clang.h Remove Link and GetKernelArgInfo API Jan 17, 2019 Fix for attaching opencl-c-base.h into ress Aug 28, 2019
options.h Fix build failure after "ArrayRef'ized CompilerInvocation::CreateFrom… Sep 12, 2019

Build Status

Common clang is a thin wrapper library around clang. Common clang has OpenCL-oriented API and is capable to compile OpenCL C kernels to SPIR-V modules.


Source code in this repo can be built in different manners:

  • in-tree as an LLVM project
  • out-of-tree using pre-built LLVM

In-tree build

Before the build all dependencies must be downloaded and layed out as the following:

`-- llvm
    |-- tools
    |   `-- clang
    `-- projects
        |-- llvm-spirv
        `-- common-clang

This can be done using the following commands:

cd <workspace>
git clone
cd tools
git clone
cd <workspace>/llvm/projects
git clone llvm-spirv
git clone

Then we need to create a build directory and run the build:

cd <workspace>
mkdir build && cd build
cmake -DLLVM_TARGETS_TO_BUILD="X86" ../llvm
make opencl-clang -j`nproc`

For sanity check of the built please run make check-clang and make check-llvm-spirv

Out-of-tree build

To build Common clang as standalone project, you need to obtain pre-built LLVM and SPIR-V Translator libraries. Note: currently this kind of build is supported on Linux only.

Integration with pre-built LLVM is done using standard find_package way as documented in Embedding LLVM in your project.

Commands to checkout sources and build:

cd <workspace>
git clone
mkdir build && cd build
cmake ../opencl-clang
make all -j`nproc`

Configuration options

Preferred LLVM version

By default, Common clang's cmake script is searching for LLVM 10.0.0. You can override target version of LLVM by using PREFERRED_LLVM_VERSION cmake option:


cmake -DPREFERRED_LLVM_VERSION="10.0.0" ../opencl-clang
Custom LLVM installation

If LLVM is installed somewhere in custom (non-system directories) location, you could point to it using LLVM_DIR cmake option. Note: You need to specify a' path to a directory containing LLVMConfig.cmake file.

This file is available in two different locations.

  • <INSTALL_PREFIX>/lib/cmake/llvm/LLVMConfig.cmake where <INSTALL_PREFIX> is the install prefix of an installed version of LLVM. On Linux typically this is /usr/lib/cmake/llvm/LLVMConfig.cmake.
  • <LLVM_BUILD_ROOT>/lib/cmake/llvm/LLVMConfig.cmake where <LLVM_BUILD_ROOT> is the root of the LLVM build tree. Note: this is only available when building LLVM with CMake.


cmake -DLLVM_DIR=/path/to/installed/llvm/lib/cmake/llvm ../opencl-clang
Location of SPIR-V Translator library

By default, Common clang's cmake script assumes that SPIR-V Translator library is built as part of LLVM, installed in the same place and libLLVMSPIRVLib is linked into libLLVM.

If that is not true for you, you can override this: firstly, you need to set LLVMSPIRV_INCLUDED_IN_LLVM cmake option to OFF. Then you need to specify directory where SPIR-V Translator is installed by using SPIRV_TRANSLATOR_DIR cmake option.


cmake -DLLVMSPIRV_INCLUDED_IN_LLVM=OFF -DSPIRV_TRANSLATOR_DIR=/path/to/installed/spirv/translator ../opencl-clang

There is a known issue (linker crash) for this kind of build on Ubuntu 16.04 Xenial. In this case the following cmake option should fix it:


Installation directory of SPIR-V Translator is expected to contain the following files:

|-- include
|   `-- LLVMSPIRVLib
|       `-- LLVMSPIRVLib.h
`-- lib64
You can’t perform that action at this time.