在windows上構建LLVM 7.0.1

卡卡西村長發表於2019-02-18

關於在windows上構建LLVM,網上有不少文章,但都是互相抄來的,寫作時極不認真,不是少這個,就是少那個,沒有一篇是可以完整照著做下來的,實在氣人。

本文的安裝和配置過程,我親自操作過好幾遍,不惜為此重灌作業系統,相信大家只要按照步驟嚴格操作,一般不會出意外的。

整個過程預計耗時4~5小時,具體取決於網速和機器配置,請大家在操作之前做好心裡準備。

 

我的作業系統是Win7x64,計劃以x64為目標平臺來構建。

 

準備清單:

1、Visual Studio 2017 Community

2、LLVM-7.0.1-win64 src

    【LLVM】http://releases.llvm.org/7.0.1/llvm-7.0.1.src.tar.xz
    【CLang】http://releases.llvm.org/7.0.1/cfe-7.0.1.src.tar.xz
    【Compiler-rt】http://releases.llvm.org/7.0.1/compiler-rt-7.0.1.src.tar.xz

3、CMake-3.14.0 x64

4、python-3.7.1-amd64

5、strawberry-perl-5.28.1.1-64bit

6、GetGnuWin32-0.6.3

準備上述資源時,請務必保證版本號不低於上述所列要求,最好和我的保持一致。

 

安裝步驟:

1、安裝CMake,安裝時注意勾選:把bin路徑加入PATH

 

2、安裝python,安裝時注意勾選:把bin路徑加入PATH

     如果忘了加入PATH,後面CMake配置VS工程會失敗。

 

3、安裝strawberry-perl,這也是CMake依賴的,它在安裝後會自動加入PATH。

 

4、安裝GetGnuWin32,把bin路徑加入PATH

    進入bin目錄,執行download.bat,下載所有元件,耗時很長,慢慢等待。

    一定要等所有元件全部下載完,否則,後面CMake配置VS工程會失敗。

 

5、安裝VS2017,把C++桌面開發通用桌面開發,都勾選上,裡面有C++編譯器和CMake相關工具。

 

6、解壓縮原始碼:

     解壓縮llvm-7.0.1.src.tar.xz,調整目錄為 E:/llvm

     解壓縮cfe-7.0.1.src.tar.xz,調整目錄為E:/llvm/tools/clang

     解壓縮compiler-rt-7.0.1.src.tar.xz,調整目錄為E:/llvm/projects/clang

 

7、執行VS2017的x64 本機工具命令列程式,執行以下命令來生成VS解決方案:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> e:
E:\> cd llvm
E:\llvm> mkdir build
E:\llvm\build> cd build
E:\llvm\build> cmake -G "Visual Studio 15 Win64" e:/llvm

注意,Visual Studio 15表示VS2017,Win64表示目標平臺是x64。

如果是64位平臺,請務必選Win64,否則編譯出的程式無法執行!

順便說一句,網上幾乎所有文章都會告訴你用 -Thost=x64來設定目標x64平臺,實際操作下來,根本無效!請嚴格按照我這裡的操作。

 

CMake生成過程中,肯定會出現很多looking for xxx - not found的提示,沒關係,不影響構建。

如果構建順利,最後會顯示如下結果:

-- Configuring done
-- Generating done
-- Build files have been written to: E:/llvm/build

 

8、開啟VS2017,開啟解決方案 E:/llvm/build/LLVM.sln,切換為Release模式。

     找到CMakePredefinedTargets目錄下的ALL_BUILD工程,開始構建,耗時非常非常長,耐心等待!

     構建完成後,輸出的bin和lib在以下位置:E:/llvm/build/Release

 

9、確認編譯出的bin是x86還是x64的

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> clang -v 

clang version 7.0.1(tags/RELEASE_701/final)

Target:x86_64-pc-windows-msvc

Thread model: posix

InstallerDir: E:\llvm\build\Release\bin

 

10、編譯測試程式:

#include <stdio.h>

int main() {
    printf("Hello world!");
    return 0;
}

 執行VS2017的x64 本機工具命令列程式,透過以下命令進行編譯:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> D:
D:\> clang --target=x86_64-pc-windows-msvc hello.c -o hello.exe
D:\> hello.exe
Hello world!

 

如果包含中文,會有亂碼問題。程式碼如下:

#include <stdio.h>

int main() {
    printf("你好 world!");
    return 0;
}

 

做了各種嘗試,結論如下:

1、把檔案儲存為UTF-8格式是沒有用的!

2、呼叫setlocale函式也是沒有用的!

 

可行方案如下:

把檔案儲存為ASCII格式,編譯時產生一個警告:

warning: illegal character encoding in string literal

    [-Winvalid-source-encoding]

需要帶上一個引數,忽略這個警告。如下:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> D:
D:\> clang --target=x86_64-pc-windows-msvc -Wno-invalid-source-encoding hello.c -o hello.exe
D:\> hello.exe
你好 world!

 

最後再測試一下lli.exe

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community> D:
D:\> clang -emit-llvm -c hello.c -o hello.bc -Wno-invalid-source-encoding
D:\> lli hello.bc
你好 world!

 

相關文章