1. 程式人生 > >在Mac OS上Build、配置並使用LLVM

在Mac OS上Build、配置並使用LLVM

一、引言

LLVM這個名字最初的意思是底層虛擬機器(Low Level Virtual Machine)的縮寫,它是由美國伊利諾伊大學開發的一個開源專案。現在LLVM的意義已經遠遠超越它最初的意思,所以現在LLVM就是整個專案的名稱。

具體來說,LLVM是以C++編寫而成的編譯器(compiler)框架系統,或者說是一個模組化和可重複使用的編譯器和工具技術的集合其核心庫提供了與編譯器相關的支援,可以作為多種語言編譯器的後臺來使用。利用LLVM,能夠進行程式語言的編譯期優化、連結優化、線上編譯優化、程式碼生成。


如果上面的解釋仍然令你感覺不得要領,那麼簡而言之——LLVM就是一套類似於GCC(及其相關工具)的編譯工具。很多人會好奇二者的區別,或者孰優孰劣。相比而言,GCC歷史悠久、樹大根深,擁有龐大的使用者群體。而LLVM是後起之秀,方興未艾。既然是後來者,自然也就具有一定的後發優勢,例如LLVM的編譯速度很快(據說通常是GCC的三倍左右)、擁有獨到的IR表示形式等等。

近些年來,LLVM發展很快,特別是它的主要貢獻者Chris Lattner受僱於Apple專攻其編譯器的開發之後,LLVM更是得到了Apple的大力支援。在新版的Xcode中,LLVM已經成為預設的後端編譯器。2012年,LLVM榮獲ACM軟體系統獎,可見其價值已經得到學術界與產業界的廣泛認可。

二、在Mac OS上Build你的LLVM

說到LLVM,你想必應該還聽過另外一個產品Clang。如下圖所示,Clang主要負責完成類似前端的一些工作,它通常作為標準LLVM釋出版的一部分而被髮布(Clang is released as part of regular LLVM releases)。特別地,在Mac OS系統下,From Xcode 4.2, Clang is the default compiler for Mac OS X。


所以,如果你已經安裝了Xcode,其實你已經可以在命令列中使用Clang來編譯程式了(用法上跟GCC差不多)。但是如果你要做一些更加深入的、更酷的事情,你還需要獲得並安裝完整的LLVM。

前面已經提過,LLVM是一套編譯器和工具技術的集合,具體來說,此處所謂之常用的基本工具有如下這些:


所以在命令列中,其實並沒有一個單獨的命令叫LLVM(但是卻有一個可以執行的程式或者命令叫gcc或者g++)。正如前面所說,在Mac OS系統下,如果你已經安裝了Xcode(例如我電腦上的版本是9.0),那麼在命令列中你是可以直接使用Clang命令的。但是,由於你並沒有單獨安裝LLVM,所以你還無法使用上面列表中的命令,例如llc。

下面就來演示在Mac OS上安裝LLVM的過程(其實是下載原始碼後,自己Build)。首先,你要做一些檢查工作,確保你的電腦上已經安裝了稍後Build時會用到的工具,其實最主要的就是CMake,關於CMake的安裝你可以參考【1】。

然後,建立一個名叫llvm的資料夾用來存放稍後你要下載的LLVM程式碼。如下圖所示,使用命令它來完成,其中的最後的llvm就是你剛剛建立的資料夾的名字(當然如果你使用其他的資料夾,這裡要注意替換):

  • svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm


接下來是對Clang做類似的事情。Clang的原始檔需要被安裝到llvm/tools/clang這個資料夾下面,注意檢查一下路徑是否正確。

  • cd llvm/tools
  • svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
  • cd ../..
接下來是Check out附加的Clang工具(extra Clang tools),這一步是可選的,我們也follow著做一下。使用命令:
  • cd llvm/tools/clang/tools
  • svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
  • cd ../../../..

如下圖所示:


接下來還有幾個可選的安裝內容我們忽略掉它們,如果你需要安裝它們,可以參考【2】中的5~6步。接下來就是Build LLVM和Clang。注意,你要在llvm資料夾下面新建一個名為build的資料夾,然後在build路徑下使用命令:

  • cmake -G "Unix Makefiles" ../llvm
如下圖所示:


上一步完成後,在使用make命令來builds both LLVM and Clang for debug mode,如下圖所示:


整個過程大約需要1個小時左右,到出現下面這個介面,即100%時,所有的Build工作就都完成了!


三、配置環境變數

要想使用之前的表中羅列處理的各種LLVM工具,還需要配置一下環境變數。在Mac OS中一種臨時調整環境變數的方法如下圖所示:


從上圖中可以獲知,如此配置好環境變數之後,就已經可以使用llc了。但是這只是一種“臨時”的方法,一旦重新開啟一個命令列視窗後,環境變數還會消失。

Mac OS中配置環境變數的方法有很多,下面使用其中一種,即修改bash_profile檔案的方式。具體操作是在命令列視窗下輸入命令:sudo vi ~/.bash_profile,系統會提示你輸入管理員密碼。然後在vim中編輯檔案bash_profile,在其中加入一句:export PATH="你的llvm中的bin路徑:$PATH",如下圖所示:


儲存之後退出。再使用一下source命令使其生效,如下圖所示:


四、試用一下LLVM

最後來試用一下LLVM,首先在桌面上(或者其他你希望的路徑下)建立一個helloworld程式,如下圖所示:


你可以用clang命令來編譯它,這一點跟gcc的用法類似。下面來做一點不一樣的實驗。如下圖所示,第一句命令的意思是生成 .ll檔案,接下來,第二句再以此為基礎生成 .s檔案。


你可以觀察一下這兩個檔案的內容。不過理解它們並不是本文所要探討的。如果有機會,我會在日後的博文裡分享更多基於LLVM的黑科技。

參考文獻

【1】 http://blog.csdn.net/baimafujinji/article/details/78588488

【2】 http://clang.llvm.org/get_started.html

【3】https://www.cs.cornell.edu/~asampson/blog/llvm.html

相關推薦

Mac OSBuild配置使用LLVM

一、引言LLVM這個名字最初的意思是底層虛擬機器(Low Level Virtual Machine)的縮寫,它是由美國伊利諾伊大學開發的一個開源專案。現在LLVM的意義已經遠遠超越它最初的意思,所以現

Mac os安裝XamppiTop和phpMyAdmin遇到的坑

在Mac os上安裝Xampp和iTop(windows的請繞道) 參考資料: 方法一、手動配置環境安裝iTop 注意: Mac下Apache的預設資料夾為:/Library/WebServer/Documents 方法二、利用Xampp軟

Mac OS 配置Android studio的真機除錯環境

0:下載並安裝 androidfiletransfer.dmg 檔案,讓你的Mac 1:configure->Project Defaults->Project Structure 2: 複製SDK Location 中的路徑(/Users/a/Libra

How to Install wget in OS X如何在Mac OS X下安裝wget解決configure: error:

configure openssl usr local 解壓 fix 官網下載 .org get 1.ftp://ftp.gnu.org/gnu/wget/官網下載最新的安裝包 wget-1.19.tar.gz 2.打開終端輸入 tar zxvf wget-1.9.1.ta

2.Keepalived介紹 (接keepalived安裝配置測試)

cpu ash 說明 多臺 curl sta 配置 keepaliv ipaddress 2.Keepalived介紹在這裏我們使用Keeplived來實現高可用集群,因為heartbeat在centos6上有一些問題,影響實驗效果(切換不及時問題)keepalived通過

Mac OS X下安裝配置Android原始碼開發環境

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Mac OS 終端利器 iTerm2配置大全

之前一直使用 Mac OS 自帶的終端,用起來雖然有些不太方便,但總體來說還是可以接受的,是有想換個終端的想法,然後今天偶然看到一個終端利器 iTerm2,發現真的很強大,也非常的好用,按照網上配置了主題什麼的,還是有些坑的,這邊再記錄下,以便後面查閱。 1. 安裝 iTerm2 下載地址:

Mac終端下載檔案到阿里雲伺服器Ubuntu18.04

這裡直接在終端用scp命令進行傳輸,scp是secure copy即安全傳輸的簡寫,是用於在Linux下進行遠端拷貝檔案的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝,而scp是跨伺服器傳輸並且是加密的。 scp的幫助資訊 ElonJelinek:D

Mac OS安裝MySQL5.7.23

一、下載mysql dmg安裝包 方式二:百度雲下載(我下載後備份到了百度雲) 二、安裝 MySQL pkg檔案 下載完成後,開啟dmg檔案後,會出現字尾名為pkg的安裝檔案。 雙擊執行,驗證安裝包結束之後就會進入mysql的GUI安裝介面。 

Mac osApp開機自動啟動

Mac OS上執行的App,想要支援使用者登入後App自動啟動的功能,可以使用Service Management Framework 或 Shared File List實現。對於沙箱開啟的應用,蘋果推薦的做法是使用Service Management Framework;

Mac OS設定Django開發環境

                     首先安裝 Homebrew$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"1安裝 Postgresql安裝 Postgresql 軟體

Mac OS Mojave(10.14)配置 caffe cpu-only

配置環境homebrew + Anaconda Python 3.7 version 安裝步驟 安裝依賴項 brew install -vd snappy leveldb gflags glog szip lmdb brew install hdf5

使用MONO在MAC OS開發——同步日誌(二)

上一篇使用MONO在MAC OS上開發——同步日誌(一)講述了在MAC OS讀取配置檔案以及寫日誌,那麼只算是完成了基本的配置,下面的才是重點。 由於時間關係,就簡單描述下,並不具體分析原始碼。最後奉上原始碼。 一:安裝 第一步,安裝MONO框架。你可以在MONO官網去下載。注意“MonoFramewo

如何將NTFS格式的行動硬碟掛接到Mac OS進行讀寫(Read/Write)操作

現在硬碟便宜,很多同學都有行動硬碟,如果你同時使用Windows與Mac OS的話,行動硬碟最好不要使用NTFS檔案系統,否則在Mac OS上,你只能讀你的行動硬碟,不能寫。 但是實際上的情況是,行動硬碟上有很多東西了,且最初是格式化為了NTFS格式,這時候重新格式化是很麻煩的,要做資料移動。

初探OpenCL之Mac OS的hello world示例

瞭解了深度學習的崛起,引起了目前OpenCL的需求,大致瞭解一下。 相關內容:http://blog.csdn.net/leonwei/article/details/8880012 本身OpenCL可以用C/C++程式設計,所以,我們底層人員又可以浪了。 // // File: he

Mac OS安裝Hadoop1.0.0

1.先安裝javaSE,這裡不詳細說明; 2.去官網下載hadoop,這裡我下的1.0.0版本; 3.設定Hadoop環境變數 我們開啟〜/.profile,在結件處加上如下兩行指令碼(環境變數的值根據你自己的實際情況填寫) export

mac下cmake安裝配置和使用

目錄 1、cmake下載 2、cmake安裝 3、cmake配置 參考文件:https://blog.csdn.net/baimafujinji/article/details/78588488 1、cmake下載 官網下載地址:https://cmake.org/dow

Mac OS安裝IntelliJ IDEA

       這篇文章旨在介紹如何在Mac系統上安裝IntelliJ IDEA,至於IntelliJ IDEA的介紹和使用方法,大家另行查閱,本篇的文章不再詳細闡述。   簡短解說,IntelliJ IDEA是可以用來進行java web和android 開發的,當然還有開

[Mac OS X] 核心驅動除錯

Kernel Debug Kit是蘋果官方提供的除錯工具包。 每個正式版本的系統都會有對應的Kernel Debug Kit,裡面包括以下內容 1.系統所有驅動及其符號表(.dSYM格式) 2.系統核心及其符號表(.dSYM格式),還有個debug kernel,debug

在Ubuntu16.04.1安裝配置使用Nginx

實驗環境 ubuntu16.04.1 怎麼安裝 網上有很多安裝的教程,自己摸索吧 我是通過sudo apt-get install nginx命令安裝的nginx 上述命令執行完,都幹了什麼?如何找到它的檔案在哪呢? 使用locate ngi