安裝 LLVM toolchain
> 不想麻煩的可以直接看這篇:How to install Clang 17 or 16 in Ubuntu 22.04 | 20.04
Install LLVM project from source code
步驟
提供我的安裝環境:
OS: Ubuntu 22.04.3 LTS x86_64 Host: Predator PH317-52 V1.26 Kernel: 6.2.0-37-generic Shell: bash 5.1.16 CPU: Intel i7-8750H (12) @ 4.100GHz |
安裝工具
gcc, ninja, cmake, make, git, python3
> 選擇需要的工具安裝即可, ninja, make 同樣都是建構工具,則一即可
工具安裝方式:
debian base linux :
sudo apt install build-essential ninja cmake git python3 |
下載 llvm-project
> 建議先決定把 llvm-project 放哪邊,我個人會放在自己建立的目錄 ~/ThirdPartyLib,用來放置需要手動編譯的工具或函式庫。
1. 下載至當前目錄
git clone https://github.com/llvm/llvm-project.git |
2. 變更當前工作目錄 到下載完成的 llvm-project 目錄
這時可以在當前目錄下使用 git checkout 選擇想要的 llvm 版本
cd llvm-project |
mkdir -p build && cd build |
編譯設定
build 資料夾下用於設定編譯選項的 shell script,針對只想使用 clang, lld 的使用者而非 llvm 開發者,可依據需要自行修改。請參考:Building LLVM with CMake
#!/usr/bin/sh cmake -G Ninja ../llvm \ -DLLVM_TARGETS_TO_BUILD="X86" \ -DLLVM_ENABLE_PROJECTS=\ 'clang;lldb;lld;clang-tools-extra;compiler-rt;mlir' \ -DLLVM_USE_LINKER=gold \ -DLLVM_PARALLEL_COMPILE_JOBS=$(nproc) \ -DLLVM_PARALLEL_LINK_JOBS=$[$(nproc) / 2] \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON |
> -D 是 define,加在 cmake 參數選項之前,用於覆蓋編譯選項而不用修改 CMakefile.txt
使用 cmake 工具會在安裝完成後在 build 目錄底下生成 install_manifest.txt ,裡面紀錄了
llvm 選項
- LLVM_TARGETS_TO_BUILD :建構平台,llvm-project/llvm/lib/Target 目錄中有完整的清單。
- LLVM_ENABLE_PROJECTS :控制要啟用哪些 llvm project(我全都要)
- LLVM_USE_LINKER : 選擇要使用的連結器
- LLVM_PARALLEL_COMPILE_JOBS :定義編譯並行作業的最大數量。(請以當前電腦的最大 CPU 執行序數量自行設定)
- LLVM_PARALLEL_LINK_JOBS :將其設定為您希望同時運行的作業數。類似於 make 中使用的 -j 選項,但僅適用於連結作業。此選項只能與 ninja 一起使用。
cmake 選項
- G :選擇要使用的建構工具
- CMAKE_BUILD_TYPE :建構類型
- CMAKE_EXPORT_COMPILE_COMMANDS :在生成期間啟用/停用編譯命令的輸出。
編譯 & 安裝
在 llvm-project 目錄中 build 目錄底下執行
ninja |
可以選擇輸入參數 -v,主要是顯示編譯過程的完整資訊,同 --verbose
編譯完成後使用以下指令進行安裝 (注意指令權限)
ninja install |
使用 cmake 工具會在安裝完成後在 build 目錄底下生成 install_manifest.txt ,裡面紀錄了
各個工具的安裝位置,使用以下命令可移除安裝的工具 (注意指令權限)
xargs rm < install_manifest.txt |
參考
- Getting Started with the LLVM System
- Building LLVM with CMake
- LLVM教學(2):llvm-project組成的3大類別與其資料夾結構介紹
- (一)LLVM概述——介绍与安装