我正在尝试构建
release/16.x
的llvm-project
;但遇到了麻烦:
首先,我所在的系统如下
Inside my Oracle VirtualBox 7.0, I have
RAM: 5 GiB
CPU: 3 x Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
OS: Ubuntu 22.04.2 LTS
Clang: Ubuntu clang version 14.0.0-1ubuntu1
CMake: cmake version 3.22.1
Ninja: 1.10.1
Gold: GNU gold (GNU Binutils for Ubuntu 2.38) 1.16
Python: Python 3.10
克隆
release/16.x
分支后,我使用以下配置:
mkdir -p build; mkdir -p installed; cd build; \
cmake -G "Ninja" \
-DCMAKE_C_COMPILER=$(which clang) \
-DCMAKE_CXX_COMPILER=$(which clang++) \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_TARGETS_TO_BUILD="X86;RISCV" \
-DCMAKE_BUILD_TYPE="Debug" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_PARALLEL_COMPILE_JOBS=2 \
-DCMAKE_INSTALL_PREFIX=$(pwd)/../installed \
-DLLVM_PARALLEL_LINK_JOBS=2 \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DBUILD_SHARED_LIBS=OFF \
-DLLVM_USE_SPLIT_DWARF=ON \
-DLLVM_USE_LINKER=gold \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DCMAKE_EXE_LINKER_FLAGS='-Wl,-no-keep-memory,-fuse-ld=gold' \
../llvm
cmake
配置成功完成,构建文件写入:
...
...
-- Configuring done
-- Generating done
-- Build files have been written to: /media/sf_shared_folder/myProject/llvm-project/build
随后,当我尝试使用
ninja
构建项目时,我面临以下问题:
ninja -j2 all
[243/3771] Building native llvm-tblgen...
[236/236] Linking CXX executable bin/llvm-tblgen
[326/3771] Building Attributes.inc...
FAILED: include/llvm/IR/Attributes.inc /media/sf_shared_folder/myProject/llvm-project/build/include/llvm/IR/Attributes.inc
cd /media/sf_shared_folder/myProject/llvm-project/build && /media/sf_shared_folder/myProject/llvm-project/build/NATIVE/bin/llvm-tblgen -gen-attrs -I /media/sf_shared_folder/myProject/llvm-project/llvm/include/llvm/IR -I/media/sf_shared_folder/myProject/llvm-project/build/include -I/media/sf_shared_folder/myProject/llvm-project/llvm/include /media/sf_shared_folder/myProject/llvm-project/llvm/include/llvm/IR/Attributes.td --write-if-changed -o include/llvm/IR/Attributes.inc -d include/llvm/IR/Attributes.inc.d
/bin/sh: 1: /media/sf_shared_folder/myProject/llvm-project/build/NATIVE/bin/llvm-tblgen: Exec format error
[327/3771] Building CXX object tools/clang/utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangAttrEmitter.cpp.o
ninja: build stopped: subcommand failed.
现在,这是什么llvm-tblgen: Exec format error 我该如何解决这个问题才能成功构建?
我还在 llvm-project 的 github repo 上提出了这个问题,issue 62429
所以修复甚至与 LLVM 无关。真正的问题是我已经将 LLVM 项目克隆到一个 shared_folder(一个在 VirtualBox 下的来宾操作系统和主机操作系统之间共享的目录)。现在,对于 Windows 10 主机,来宾操作系统的符号链接创建变得一团糟。
由于 LLVM 没有抛出特定于此的错误,因此我无法检测到这一点。所以我尝试使用以下命令:
cmake -G "Ninja" \
-DCMAKE_C_COMPILER=$(which clang) \
-DCMAKE_CXX_COMPILER=$(which clang++) \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_TARGETS_TO_BUILD="X86;RISCV" \
-DCMAKE_BUILD_TYPE="Debug" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_PARALLEL_COMPILE_JOBS=2 \
-DCMAKE_INSTALL_PREFIX=$(pwd)/../installed \
-DLLVM_PARALLEL_LINK_JOBS=2 \
-DLLVM_BUILD_LLVM_DYLIB=OFF \
-DLLVM_LINK_LLVM_DYLIB=OFF \
-DBUILD_SHARED_LIBS=ON \
-DLLVM_USE_SPLIT_DWARF=ON \
-DLLVM_USE_LINKER=gold \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DCMAKE_EXE_LINKER_FLAGS='-Wl,-no-keep-memory,-fuse-ld=gold' \
../llvm
与
BUILD_SHARED_LIBS=ON
,在ninja -j2
期间构建系统立即抱怨它无法创建符号链接。有了这些信息后,我将项目克隆到客户操作系统内部的路径上并运行原始命令(如上述问题)。这导致构建成功。