使用 Microsoft Visual Studio 開發 LLVM 系統

概述

歡迎來到 Windows 上的 LLVM!本文僅涵蓋使用 Visual Studio 在 Windows 上使用 LLVM,不包括 WSL、mingw 或 cygwin。為了開始使用,您首先需要了解一些基本資訊。

LLVM 由許多不同的專案組成。第一個部分是 LLVM 套件。它包含使用 LLVM 所需的所有工具、程式庫和標頭檔。它包含一個組譯器、反組譯器、位元碼分析器和位元碼優化器。它還包含可用於測試 LLVM 工具和 Clang 前端的基礎迴歸測試。

第二個部分是 Clang 前端。此元件將 C、C++、Objective C 和 Objective C++ 程式碼編譯成 LLVM 位元碼。Clang 通常使用 LLVM 程式庫來優化位元碼並產生機器碼。LLVM 完全支援 COFF 物件檔案格式,該格式與所有其他現有的 Windows 工具鏈相容。

還有更多 LLVM 專案,本文檔沒有討論。

需求

在開始使用 LLVM 系統之前,請先查看以下需求。事先了解您需要的硬體和軟體可以為您省去一些麻煩。

硬體

任何可以充分執行 Visual Studio 2019 的系統都可以。包含 git 索引的 LLVM 原始程式碼樹大約佔用 3GB。物件檔案、程式庫和可執行檔在發布模式下大約佔用 5GB,在偵錯模式下則更多。建議使用 SSD 固態硬碟和 >16GB RAM。

軟體

您需要安裝了最新更新的 Visual Studio 2019 或更高版本。Visual Studio 社群版就足夠了。

您還需要 CMake 建置系統,因為它會產生您將用於建置的專案檔。CMake 與 Visual Studio 2019 捆綁在一起,因此不需要單獨安裝。如果您確實單獨安裝了 CMake,Visual Studio 2022 將需要 CMake 3.21 或更高版本。

如果您想執行 LLVM 測試,您需要 Python。版本 3.8 和更新版本已知可以正常運作。您可以使用 Visual Studio 2019、從 Microsoft 商店或從 Python 網站 安裝 Python。我們建議使用後者,因為它允許您調整安裝選項。

您也需要安裝 適用於 Windows 的 Git 和 bash 工具。適用於 Windows 的 Git 也與 Visual Studio 2019 捆綁在一起。

開始使用

以下是快速啟動和運行 LLVM 的簡要說明。這些說明已使用 Visual Studio 2019 和 Python 3.9.6 進行測試。

  1. 下載並安裝 Visual Studio

  2. 在 Visual Studio 安裝程式的「工作負載」索引標籤中,選擇「使用 C++ 進行桌面開發」工作負載。在「個別元件」索引標籤下,選擇「適用於 Windows 的 Git」。

  3. 完成 Visual Studio 安裝。

  4. 下載並安裝最新的 Python 3 版本

  5. 在第一個安裝畫面中,選擇「為所有使用者安裝啟動器」和「將 Python 新增至 PATH」。這將允許為所有使用者安裝 psutil 以進行迴歸測試,並讓 Python 可從命令列使用。

  6. 在第二個安裝畫面中,選擇(再次)「為所有使用者安裝」,如果您想開發 lldb,選擇「下載偵錯符號檔」會很有用。

  7. 完成 Python 安裝。

  8. **以管理員身分**執行「VS 2019 開發人員命令提示字元」。這個命令

    提示字元會提供正確的路徑和環境變數給 Visual Studio 和已安裝的工具。

  9. 在終端機視窗中,輸入以下命令

    c:
    cd \
    

您可以將 llvm 來源安裝在 c:\llvm 以外的其他位置,但請勿安裝到包含空格的路徑中(例如 c:\Documents and Settings\...),因為安裝將會失敗。

  1. 註冊 Microsoft 偵錯介面存取 (DIA) DLL

    regsvr32 "%VSINSTALLDIR%\DIA SDK\bin\msdia140.dll"
    regsvr32 "%VSINSTALLDIR%\DIA SDK\bin\amd64\msdia140.dll"
    

LLVM PDB 測試和 LLDB 開發需要 DIA 程式庫。

  1. 安裝 psutil 並取得 LLVM 原始碼

    pip install psutil
    git clone https://github.com/llvm/llvm-project.git llvm
    

除了 git clone 之外,您也可以從 版本頁面下載壓縮的原始碼發行版。選擇最後一個連結:原始碼 (zip),然後使用 Windows 檔案總管內建的 zip 支援或任何其他解壓縮工具解壓縮下載的檔案。

  1. 最後,使用 CMake 設定 LLVM

    cmake -S llvm\llvm -B build -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=X86 -Thost=x64
    exit
    

LLVM_ENABLE_PROJECTS 指定您要建置的任何其他 LLVM 專案,而 LLVM_TARGETS_TO_BUILD 則選擇編譯器目標。如果省略 LLVM_TARGETS_TO_BUILD,則預設會建置所有目標,這會減慢編譯速度並使用更多磁碟空間。有關如何設定 LLVM 建置的詳細資訊,請參閱 LLVM CMake 指南

cmake 命令列工具與 Visual Studio 捆綁在一起,但其 GUI 則沒有。您可以安裝 CMake 以使用其 GUI 來變更 CMake 變數或修改上述命令列。

  • 安裝 CMake 後,最簡單的方法就是啟動 CMake GUI,選擇您解壓縮 LLVM 的目錄,預設選項應該都沒問題。無論如何,您可能真的想變更的一個選項是 CMAKE_INSTALL_PREFIX 設定,以選擇在編譯完成後要安裝到的目錄,不過安裝對於使用 LLVM 來說並非強制性的。另一個重要的選項是 LLVM_TARGETS_TO_BUILD,它控制建置中包含的 LLVM 目標架構。

  • CMake 會為所有建置類型產生專案檔案。若要選擇特定建置類型,請使用 VS IDE 中的組態管理員,或是在使用 MSBuild 時使用命令列選項 /property:Configuration

  • 預設情況下,CMake 產生的 Visual Studio 專案檔案會使用 32 位元工具組。如果您在 64 位元版本的 Windows 上進行開發,並且想要使用 64 位元工具組,請在產生 Visual Studio 解決方案時傳遞 -Thost=x64 旗標。這需要 CMake 3.8.0 或更新版本。

  1. 啟動 Visual Studio 並選擇組態

在您建立專案檔案的目錄中,會有一個 llvm.sln 檔案,只要雙擊該檔案即可開啟 Visual Studio。預設的 Visual Studio 組態是「偵錯」,這種組態速度較慢,而且會在磁碟上產生大量的偵錯資訊。目前,我們建議為 LLVM 專案選擇「發行」組態,這樣建置速度最快,或者選擇「RelWithDebInfo」,這種組態的大小也比「發行」大上好幾倍。另一種技巧是以「發行」模式建置整個 LLVM,並且只針對您實際需要偵錯的特定程式庫或原始程式檔變更編譯器旗標,停用最佳化並啟用偵錯資訊。

  1. 在 Visual Studio 中測試 LLVM

您只需建置「check-all」專案,即可執行 LLVM 測試。測試結果會顯示在 VS 輸出視窗中。建置成功後,就表示您已經驗證了 LLVM 開發環境可以正常運作!

您應該不會看到任何非預期的錯誤,但會看到許多不受支援的測試和預期的錯誤

114>Testing Time: 1124.66s
114>  Skipped          :    39
114>  Unsupported      : 21649
114>  Passed           : 51615
114>  Expectedly Failed:    93
========== Build: 114 succeeded, 0 failed, 321 up-to-date, 0 skipped ==========``

手動安裝的替代方案

您可以使用 Chocolatey 作為套件管理員,來簡化安裝程序,而不必執行上述步驟。在 安裝 Chocolatey 之後,請在管理員 shell 中執行以下命令來安裝所需的工具

choco install -y git cmake python3
pip3 install psutil

還有一個 Windows Dockerfile,其中包含整個建置工具鏈。這可以用於使用與主機安裝不同的工具鏈來測試建置,或用於建立建置伺服器。

後續步驟

  1. 閱讀文件。

  2. 說真的,請閱讀文件。

  3. 請記住,我們已經警告過您兩次要閱讀文件。

在命令列上測試 LLVM:

只要將目錄變更為 llvm 原始程式碼目錄並執行以下命令,即可執行 LLVM 測試

c:\llvm> python ..\build\Release\bin\llvm-lit.py llvm\test

此範例假設 Python 位於您的 PATH 變數中,這會在 Python 安裝期間選擇「將 Python 新增至 PATH」之後發生。如果您在安裝 Python 之前已經開啟命令視窗,則必須關閉並重新開啟它,才能取得更新的 PATH。

可以使用以下命令執行特定的測試或測試目錄

c:\llvm> python ..\build\Release\bin\llvm-lit.py llvm\test\Transforms\Util

建置 LLVM 套件:

  • 這些專案仍然可以個別建置,但若要全部建置,請勿在批次建置中選取所有專案(因為有些專案是作為組態專案),而是只選取並建置 ALL_BUILD 專案即可建置所有項目,或者建置 INSTALL 專案,這個專案會先建置 ALL_BUILD 專案,然後將 LLVM 標頭、程式庫和其他實用的項目安裝到您第一次設定 CMake 時 CMAKE_INSTALL_PREFIX 設定所設定的目錄。

  • Fibonacci 專案是一個使用 JIT 的範例程式。請修改專案的偵錯屬性,以便提供數字命令列引數,或從命令列執行它。程式將會印出對應的費氏數列值。