GitHub - intel/opencl-clang (original) (raw)

Scheduled verification OpenSSF Best Practices

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

Build

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

In-tree build

Before the build all dependencies must be downloaded and laid out as follows:

<workspace>
|-- llvm
|-- clang
|-- SPIRV-LLVM-Translator
`-- opencl-clang

This can be done using the following commands:

cd git clone https://github.com/llvm/llvm-project.git . git clone https://github.com/KhronosGroup/SPIRV-LLVM-Translator.git git clone https://github.com/intel/opencl-clang.git

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

export OCL_CLANG_WS= cd $OCL_CLANG_WS mkdir build && cd build cmake -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang"
-DLLVM_EXTERNAL_PROJECTS="llvm-spirv;opencl-clang"
-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR="$OCL_CLANG_WS/SPIRV-LLVM-Translator"
-DLLVM_EXTERNAL_OPENCL_CLANG_SOURCE_DIR="$OCL_CLANG_WS/opencl-clang"
-DCMAKE_BUILD_TYPE=Release $OCL_CLANG_WS/llvm make opencl-clang -jnproc

For sanity check of the build please run make check-clang andmake check-llvm-spirv

Out-of-tree build

To build opencl-clang as a 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.

If opencl-clang is used as part of another CMake project, you will need to define OPENCL_CLANG_BUILD_EXTERNAL.

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 git clone https://github.com/intel/opencl-clang.git mkdir build && cd build cmake ../opencl-clang make all -jnproc

Configuration options

Preferred LLVM version

By default, opencl-clang's cmake script is searching for LLVM which is built based on the latest verion of current branch. You can override target version of LLVM by using the PREFERRED_LLVM_VERSION cmake option:

Example:

cmake -DPREFERRED_LLVM_VERSION="20.0" ../opencl-clang

Custom LLVM installation

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

This file is available in two different locations.

Example:

cmake -DLLVM_DIR=/path/to/installed/llvm/lib/cmake/llvm ../opencl-clang

Location of SPIR-V Translator library

By default, opencl-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 setLLVMSPIRV_INCLUDED_IN_LLVM cmake option to OFF. Then you need to specify directory where SPIR-V Translator is installed by using SPIRV_TRANSLATOR_DIRcmake option.

Example:

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:

<installation_dir>
|-- include
|   `-- LLVMSPIRVLib
|       `-- LLVMSPIRVLib.h
`-- lib64
    `-- libLLVMSPIRVLib.so

Contribution

Please submit a pull request to contribute.

Please follow LLVM coding standards

Report a problem

Please submit an issue