在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 ../..
- 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 OS上Build、配置並使用LLVM
一、引言LLVM這個名字最初的意思是底層虛擬機器(Low Level Virtual Machine)的縮寫,它是由美國伊利諾伊大學開發的一個開源專案。現在LLVM的意義已經遠遠超越它最初的意思,所以現
在Mac os上安裝Xampp、iTop和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 os上App開機自動啟動
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