跳转至

编译和使用

1. 对SPIRV-LLVM-Translator单独进行编译(编译llvm-spirv)

需要先编译好对应的LLVM版本,被设置好PATH等,否则会报以下错误

Text Only
Could not find a configuration file for package "LLVM" that is compatible
with requested version "19.1.0".
The following configuration files were considered but not accepted:
 /usr/lib/cmake/llvm/LLVMConfig.cmake, version: 12.0.0

编译llvm-spirv和libLLVMSPIRVLib.a 该库提供OpenCL_Compiler/demo中所使用的!::llvm::writeSpirv(mod.get(), os, ErrMsg)函数

这里将该项目做为一个单独的项目进行编译,也可以将其放入llvm/tools中一起进行编译,参考官网的README文件。

Bash
which clang, 提前设置好clang的安装
mkdir build
mkdir install
cd build
如果无法下载依赖,使用外部头文件
cmake -DCMAKE_INSTALL_PREFIX=../install ..

以下为使用外部头文件,提前SPIRV-Headers下载好,放到某个位置如/home/ken/workspace/SPIRV-LLVM-Translator/build(在SPIRV-Tools的external已经存在该头文件),这里如果不放在build目录可能会报错
cmake -DCMAKE_INSTALL_PREFIX=/home/ken/workspace/SPIRV-LLVM-Translator/install ..  -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/home/ken/workspace/SPIRV-LLVM-Translator/build/SPIRV-Headers

cmake -DCMAKE_INSTALL_PREFIX=/run/media/sda5/ken/workspace/SPIRV-LLVM-Translator/install ..  -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/run/media/sda5/ken/workspace/SPIRV-LLVM-Translator/build/SPIRV-Headers

# 如果gcc版本有问题的话,可以使用cl
-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++

make --trace | tee make.log
make install --trace

安装完成后

Bash
# ken @ kylin-pc in ~/workspace/SPIRV-LLVM-Translator on git:llvm_release_170 x [16:56:06] 
$ tree install 
install
├── bin
   └── llvm-spirv
├── include
   └── LLVMSPIRVLib
       ├── LLVMSPIRVExtensions.inc
       ├── LLVMSPIRVLib.h
       └── LLVMSPIRVOpts.h
└── lib
    ├── libLLVMSPIRVLib.a
    └── pkgconfig
        └── LLVMSPIRVLib.pc

5 directories, 6 files

2. 和LLVM一起编译

llvm/tools/CMakeLists.txt增加如下行:

C++
add_llvm_tool_subdirectory(SPIRV-LLVM-Translator-9.0.1-1)


cmake  ../llvm -DCMAKE_INSTALL_PREFIX=../install -DLLVM_ENABLE_ASSERTIONS=On -DCMAKE_BUILD_TYPE=RELEASE -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra"  -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="SPIRV" -DLLVM_INCLUDE_SPIRV_TOOLS_TESTS=ON -DDLLVM_EXTERNAL_PROJECTS="SPIRV-Headers" -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=../llvm/tools/SPIRV-LLVM-Translator/SPIRV-Headers | tee cmake.log 

3. llvm-spirv使用

Text Only
llc -march=spirv -filetype=obj input.ll -o input.bc
llvm-spirv --spirv-max-version=1.3 input.bc -o output.spv