在Windows下面進行LLVM與CLANG的安裝

來源:互聯網
上載者:User

在Windows下面進行LLVM與CLANG的安裝(轉載)


原文連結:在Windows下面進行LLVM與CLANG的安裝

在Windows下面進行LLVM與CLANG的安裝

目錄

§ 1 需要環境

§ 2 用SVN下載source code

§ 3 編譯llvm及clang

§ 4 安裝

§ 5 驗證與練習

需要環境

本文假設你已經有下面的工具安裝在系統中,並且可以正確的使用。

§ SVN client (這是為了抓最新的llvm與clang的source code)

§ cmake

§ mingw32

用SVN下載source code

假設我們要將所有的LLVM與Clang程式碼放到c:\llvm_src,並且要將最後的llvm放到c:\llvm的目錄下。要注意,clang必須放在llvm source code目錄下的tools\clang目錄,否則會編不出來。

> cd /d c:\

> svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm_src

> cd llvm_src\tools

> svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

 

編譯llvm及clang

接著要進行編譯的動作:

> cd /d c:\llvm_src

> mkdir build

> cd build

> cmake.exe -DCLANG_BUILD_EXAMPLES=ON -DCMAKE_INSTALL_PREFIX=/llvm -G ”MinGW Makefiles” ..

> mingw32-make ENABLE_OPTIMIZED=1

 

安裝

同樣在c:\llvm_src\build的目錄下輸入下面的指令來安裝:

> mingw32-make install

 

成功的話,就會發現在c:\llvm目錄下面至少有以下的目錄。基本上就代表llvm及clang已經成功安裝了。

bin

docs

examples

include

lib

share

 

把c:\llvm\bin放到path的環境變數中,就可以進行編譯了。為了方便,我做了一個批次檔,並且將相關編譯的工具環境當放入path中。

REM llvm-env.bat

set QTDIR=C:\Qt\SDK_1.1\Desktop\Qt\4.7.3\mingw

set PATH=C:\Qt\SDK_1.1\mingw\bin;%QTDIR%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

set PATH=d:\llvm\bin;C:\Tools;C:\Program Files (x86)\CMake 2.8\bin;%PATH%

 

並且透過捷徑的方式執行它,以得到命令視窗。

§ C:\Windows\System32\cmd.exe /A /Q /K c:\llvm\bin\llvm-env.bat

驗證與練習

我們來準備一個簡單的小程式來練習並且確認llvm與clang已經成功安裝了

#include <stdio.h>

int main(int argc, char ** argv)

{

printf(“Hello World!\n”);

}

 

在剛剛準備好的命令視窗內輸入clang的編譯命令:

> clang -o myhello.exe hello.c -lmsvcrt -Ic:\qt\sdk_1.1\mingw\include -Lc:\qt\sdk_1.1\mingw\lib

 

因為我是直接使用Qt的mingw環境進行編譯,所以就拿了Qt下面的include目錄與lib目錄來用。如果你是另外自己裝mingw,記得修改這些目錄以符合你的環境。

成功的話,會看到myhello.exe產出。執行它會在視窗內印出“Hello World!”的字樣。

接著,我們來試試llvm相關的功能。首先,我們用clang來產出llvm的bitcode。

> clang -emit-llvm -o hello.bc -c hello.c -Ic:\qt\sdk_1.1\mingw\include

 

應該可以看到hello.bc這個bitcode檔案出現。讓我們透過lli用llvm的環境來執行它!

> lli hello.bc

 

然後,我們透過llvm-dis來反組譯它。

> llvm-dis hello.bc -o hello.ll

 

可以看到hello.ll的內容如下。

; ModuleID = ’hello.bc’

target datalayout = ”e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S32″

target triple = ”i686-pc-mingw32″

@.str = private unnamed_addr constant [14 x i8] c”Hello World!\0A\00″, align 1

define i32 @main(i32 %argc, i8** %argv) nounwind {

entry:

%retval = alloca i32, align 4

%argc.addr = alloca i32, align 4

%argv.addr = alloca i8**, align 4

store i32 0, i32* %retval

store i32 %argc, i32* %argc.addr, align 4

store i8** %argv, i8*** %argv.addr, align 4

%call = call i32 (i8*, …)* @printf(i8* getelementptr inbounds ([14 x i8]* @.str, i32 0, i32 0)) nounwind

%0 = load i32* %retval

ret i32 %0

}

declare i32 @printf(i8*, …) nounwind

 

到此為止,你成功的建立了一個確定可以工作的llvm與clang的環境囉!

參考資料:

§ http://clang.llvm.org/get_started.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.