在windows上構建LLVM 7.0.1

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

本文的安裝和配置過程,我親自操做過好幾遍,不惜爲此重裝操做系統,相信你們只要按照步驟嚴格操做,通常不會出意外的。windows

整個過程預計耗時4~5小時,具體取決於網速和機器配置,請你們在操做以前作好內心準備。函數

 

個人操做系統是Win7x64,計劃以x64爲目標平臺來構建。工具

 

準備清單:測試

一、Visual Studio 2017 Communityui

二、LLVM-7.0.1-win64 srcspa

    【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操作系統

三、CMake-3.14.0 x64命令行

四、python-3.7.1-amd64code

五、strawberry-perl-5.28.1.1-64bit

六、GetGnuWin32-0.6.3

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

 

安裝步驟:

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

 

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

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

 

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

 

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

    進入bin目錄,執行download.bat,下載全部組件,耗時很長,慢慢等待。

    必定要等全部組件所有下載完,不然,後面CMake配置VS工程會失敗。

 

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

 

六、解壓縮源代碼:

     解壓縮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

 

七、運行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

 

八、打開VS2017,打開解決方案 E:/llvm/build/LLVM.sln,切換爲Release模式。

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

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

 

九、確認編譯出的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

 

十、編譯測試程序:

#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; }

 

作了各類嘗試,結論以下:

一、把文件保存爲UTF-8格式是沒有用的!

二、調用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!
相關文章
相關標籤/搜索