# 安裝 LLVM toolchain > 不想麻煩的可以直接看這篇:[How to install Clang 17 or 16 in Ubuntu 22.04 | 20.04](https://ubuntuhandbook.org/index.php/2023/09/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) ``` ### 安裝工具 `gcc`, `ninja`, `cmake`, `make`, `git`, `python3` > 選擇需要的工具安裝即可, `ninja`, `make` 同樣都是建構工具,則一即可 工具安裝方式: debian base linux : ```bash sudo apt install build-essential ninja cmake git python3 ``` ### 下載 llvm-project > 建議先決定把 llvm-project 放哪邊,我個人會放在自己建立的目錄 `~/ThirdPartyLib`,用來放置需要手動編譯的工具或函式庫。 1. 下載至當前目錄 ```bash git clone https://github.com/llvm/llvm-project.git ``` 2. 變更當前工作目錄 到下載完成的 llvm-project 目錄 ```bash cd llvm-project ``` > 這時可以在當前目錄下使用 git checkout 選擇想要的 llvm 版本 3. 在 llvm-project 目錄中建立 build 目錄 並切換工作目錄 至 build 目錄 ```bash mkdir -p build && cd build ``` ### 編譯設定 build 資料夾下用於設定編譯選項的 shell script,針對只想使用 clang, lld 的使用者而非 llvm 開發者,可依據需要自行修改。請參考:[Building LLVM with CMake](https://llvm.org/docs/CMake.html) ```bash #!/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) \ # Max CPU cores -DLLVM_PARALLEL_LINK_JOBS=$[$(nproc) / 2] \ # Half to conserve RAM -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON # verbose compile commands ``` > -D 是 define,加在 cmake 參數選項之前,用於覆蓋編譯選項而不用修改 CMakefile.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 一起使用。請注意這裡使用的工作數量除以 2,因為 linking 時期會需要使用大量記憶體(你也不希望連結到一半直接 OOM 吧) #### 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 ``` ## 參考 1. [Getting Started with the LLVM System](https://llvm.org/docs/GettingStarted.html) 1. [Building LLVM with CMake](https://llvm.org/docs/CMake.html) 1. [LLVM教學(2):llvm-project組成的3大類別與其資料夾結構介紹](https://bayareanotes.com/llvm-project-layout/) 1. [(一)LLVM概述——介绍与安装](https://zhuanlan.zhihu.com/p/102028114) 1. [LLVM教學(1): 5分鐘了解LLVM架構](https://bayareanotes.com/llvm-ir-intro/)