書名: 深入理解LLVM:代碼生成作者名: 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉本章字數: 647字更新時間: 2024-12-18 16:44:27
1.3 LLVM構建與調試
本書涉及的后端架構、Pass和算法都是以LLVM 15為基礎的,具體代碼可以從github.com/llvm-project處直接下載,筆者維護了鏡像https://github.com/inside-compiler/llvm-project,讀者也可以直接通過該鏡像獲得源碼。
LLVM構建比較簡單,讀者可以參考官方項目中的構建說明進行操作,構建完成后就可以使用GDB或者LLDB進行調試,這里僅做一個簡單的介紹。下面以筆者使用的macOS環境為例介紹構建和調試工作。
1)環境準備:在macOS上構建LLVM需要安裝開發套件CMake、git等。
2)下載代碼:通過git clone,從https://github.com/inside-compiler/llvm-project鏡像下載代碼。該項目分支會默認切換到LLVM 15,讀者無須再次切換。
3)構建代碼:按照構建說明進行構建。本書主要以BPF后端為例進行說明,為了加快構建速度,可以通過命令行參數LLVM_TARGETS_TO_BUILD僅構建BPF后端。構建LLVM工程使用的命令如代碼清單1-1所示。
代碼清單1-1 構建LLVM工程使用的命令
cd llvm-project //進入當前代碼倉
mkdir build //創建build目錄
cd build //進入build目錄,構建過程中的中間文件和結果都放在該目錄中
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD=BPF
-DLLVM_ENABLE_PROJECTS="clang" ../llvm //生成makefile文件
make -j 32 //使用32線程進行并行構建
4)驗證:構建完成后,相應的可執行文件位于build/bin目錄下。以llc命令為例,執行llc --version可以得到如代碼清單1-2所示的結果。
代碼清單1-2 驗證結果
LLVM (http://llvm.org/):
LLVM version 15.0.1
DEBUG build with assertions.
Default target: arm64-apple-darwin22.5.0
Host CPU: cyclone
Registered Targets:
bpf - BPF (host endian)
bpfeb - BPF (big endian)
bpfel - BPF (little endian)
5)調試:開發者可以使用lldb調試llc,設置斷點并運行測試。例如,為了驗證尾代碼合并的功能,通過b TailDuplicateBase::runOnMachineFunction命令為函數設置斷點,同時設置lldb運行參數settings set -- target.run-args -debug -tail-dup-size=10 test.ll[4],然后執行run命令即可。關于lldb更多使用方法可以參考lldb使用文檔。lldb調試命令示例如代碼清單1-3所示:
代碼清單1-3 LLDB調試命令示例
(lldb) target create "../llvm-project/build/bin/llc"
Current executable set to
'/Users/ryanpeng/Project/llvm-project/build/bin/llc' (arm64).
(lldb) b TailDuplicateBase::runOnMachineFunction
Breakpoint 1: where=llc`(anonymous namespace)::TailDuplicateBase::runOnMachin
eFunction(llvm::MachineFunction&) + 28 at TailDuplication.cpp:84:20, address=
0x00000001011c9114
(lldb) settings set -- target.run-args -debug -tail-dup-size=10 test.ll
(lldb) run
- LaTeX Cookbook
- AWS Serverless架構:使用AWS從傳統部署方式向Serverless架構遷移
- Manga Studio Ex 5 Cookbook
- PostgreSQL技術內幕:事務處理深度探索
- Java游戲服務器架構實戰
- INSTANT Sencha Touch
- Extending Puppet(Second Edition)
- Creating Stunning Dashboards with QlikView
- Multithreading in C# 5.0 Cookbook
- Kotlin極簡教程
- SwiftUI極簡開發
- ABAQUS6.14中文版有限元分析與實例詳解
- Getting Started with hapi.js
- SOA Patterns with BizTalk Server 2013 and Microsoft Azure(Second Edition)
- Pandas入門與實戰應用:基于Python的數據分析與處理