编译和使用
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