1. 程式人生 > >一份關於各種安裝LLVM的方法的總結

一份關於各種安裝LLVM的方法的總結

這是一篇可能會持續更新的部落格,我想把安裝LLVM的方法都列出來,以便於自己的查閱,也希望能對需要的朋友有所幫助。

這裡面參考了很多前輩的資料,也有自己的摸索總結,前輩們的連結我會老老實實地在文章中貼好~(搓手手)

另:寫這篇部落格的前半年安裝的llvm,在寫這篇部落格的時候,沒有很多實時的截圖,很多是當時安裝的文字記錄,有機會補圖上來。

其中若有錯誤紕漏歡迎大家留言指正,我會及時更正。


首先貼一些基礎的參考連結:

官網主頁:http://llvm.org

中文官網主頁:https://www.llvm.org.cn  LLVM的首頁被翻譯成了中文,首頁中的很多連結裡面的內容還是英文的。

官網提供的安裝方法:http://clang.llvm.org/get_started.html

 

一、【方法一 】從LLVM官網下載預編譯好的包

1. 在官網主頁的左邊欄有下載連結:

點選“All Release”可以看到所有LLVM版本的下載列表。http://releases.llvm.org

 從左到右,各列分別對應版本的釋出時間、版本號、下載連結、釋出說明(包含一些更新的資訊)、開發文件

在查閱開發文件時,最好是檢視下載的版本對應的文件,會獲得準確的資訊

2. 選擇好版本之後,點選版本號後面的download,在Pre-Built Binaries下面,根據相應的作業系統下載不同的預編譯檔案。

 mac系統下載第一個Clang for Mac OS X(.sig),ubuntu系統根據具體情況下載Clang for x86_64 Ubuntu XXX(.sig).

3. 下載之後解壓到一個目錄下,解壓後的資料夾下包含bin,include,lib,libexec,share資料夾

將bin資料夾新增進環境變數

環境變數的新增可參考的連結很多,比如參照連結:https://www.cnblogs.com/shineqiujuan/p/4693404.html

在ubuntu下環境變數新增方法:

將下載的預編譯包解壓(clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-14.04)放在home目錄下,

在ubuntu中新增環境變數的命令:

sudo gedit /etc/profile

新增以下兩行命令:

export LLVM_HOME=/home/xxx(your usrname)/clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-14.04/bin

export PATH=$LLVM_HOME:$PATH

當然,如果覺得clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-14.04太長,改一個短一些的可識別的資料夾的名字即可。

在mac下環境變數新增方法之一:(單個使用者設定)

在命令列中,執行以下命令:

touch  ~/.bash_profile  建立

vim  ~/.bash_profile  開啟並編輯

點一下向下箭頭,點E 進入bash_profile檔案

點i進入編輯模式,進行編輯

編輯完成後,點esc 退出

直接輸入 ::wq!   這四個字元後,回車

一般環境變數修改後,重啟後生效,如果想立即生效,執行:

source  ~/.bash_profile 

4.下載cmake

ubuntu下載cmake直接:sudo apt install cmake

配置cmake環境變數

mac上是:export PATH=/Applications/CMake.app/Contents/bin:$PATH

5.通過以上步驟,簡單的llvm使用基本上就沒問題了。

 

二、【方法二】根據LLVM官網教程編譯原始碼進行安裝(Unix-like System)

安裝方法連結:http://clang.llvm.org/get_started.html

或者這個連結:http://llvm.org/docs/GettingStarted.html

按照官網步驟來即可,以下的內容是翻譯和少許採坑補充:

Overview概述

歡迎使用LLVM!為了開始上手,你首先需要知道以下的一些基礎資訊。

首先LLVM是由三部分組成的。LLVM suite + Clang front end + Test suite(optional)

  • LLVM suite包含使用LLVM時所需要的:工具(tools),庫(libraries),標頭檔案(header files),還包含一個assembler,disassembler,bitcode analyser,bitcode optimizer,也包含基本的迴歸測試regression tests,用於測試LLVM工具和Clang前端。
  • Clang front end負責將 C, C++, Objective C, and Objective C++ 程式碼編譯成LLVM的bitcode(一種中間程式碼)。一旦被編譯成LLVM的bitcode,程式就能被LLVM suite中的LLVM工具所操作。
  • Test Suite擁有一個testing harness,可以用於對LLVM的功能和效能進行更多的測試。

Getting Started Quickly 快速開始(命令列安裝教程)

http://clang.llvm.org/get_started.html這個連結中的Getting start更新會及時一些。

1.讀文件

2.讀文件

3.兩次提醒讀文件

4.Checkout LLVM

  • cd where-you-want-llvm-to-live(新增一個你想放置LLVM的路徑)
  • svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

5.Checkout Clang

  • cd where-you-want-llvm-to-live (跟4中相同的LLVM的路徑)
  • cd llvm/tools
  • svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

6.Checkout Extra Clang Tools [不是必須的,可選]

  • cd where-you-want-llvm-to-live(跟4中相同的LLVM的路徑)
  • cd llvm/tools/clang/tools
  • svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra

7.Checkout LLD linker [不是必須的,可選]

  • cd where-you-want-llvm-to-live(跟4中相同的LLVM的路徑)
  • cd llvm/tools
  • svn co http://llvm.org/svn/llvm-project/lld/trunk lld

8.Checkout Polly Loop Optomizer [不是必須的,可選]

  • cd where-you-want-llvm-to-live(跟4中相同的LLVM的路徑)
  • cd llvm/tools
  • svn co http://llvm.org/svn/llvm-project/polly/trunk polly

9.Checkout Compiler-RT(Required to build the sanitizers) [不是必須的,可選]

  • cd where-you-want-llvm-to-live(跟4中相同的LLVM的路徑)
  • cd llvm/projects
  • svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt

10.Checkout Libomp(required for OpenMP support) [不是必須的,可選]

  • cd where-you-want-llvm-to-live(跟4中相同的LLVM的路徑)
  • cd llvm/projects
  • svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp

11.Checkout libcxx and libcxxabi [不是必須的,可選]

  • cd where-you-want-llvm-to-live(跟4中相同的LLVM的路徑)
  • cd llvm/projects
  • svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
  • svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi

12.Get the Test Suite Source Code [不是必須的,可選]

  • cd where-you-want-llvm-to-live
  • cd llvm/projects
  • svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite

【注】:svn中checkout的意思是“遷出”,把程式碼從程式碼庫下載到本地。

               build=compile+link,build中文意思可以理解為“編譯連結”或一個籠統的“構建”

13.配置和構建(build)LLVM和Clang

需要使用cmake工具,在此之前需要確認已經有必要的所有的原始碼,在cmake的build過程中不會允許新增原始碼目錄。

LLVM需要CMake3.4.3及以上版本來build,通常建議使用最新版本的CMake,特別是在生成Ninja的build檔案的時候。因為Ninja的生成器(generator)與CMake的生成器(generator)有很大的關聯。

CMake的安裝、使用指南參見http://llvm.org/docs/CMake.html

安裝CMake之後需要為CMake配置環境變數,便於CMake在命令列中能夠使用。

不能夠在LLVM的原始碼目錄下build,這是不支援的。必須新建一個build目錄,在這個目錄下完成13的操作。

操作步驟如下:

  • cd where you want to build llvm 

  • mkdir build

  • cd build

  • cmake -G <generator> [options] <path to llvm sources>

  • make -j4

其中<generator>有以下選項:(也就是可以把<generator>這一坨,替換為以下選項之一)

  • Unix Makefiles      用於生成相容的parallel makefiles
  • Ninja                      用於生成Ninja的build檔案。大部分的llvm開發者都使用Ninja.(也就是說LLVM官方文件建議使用Ninja生成)
  • Visual Studio         用於生成Visual Studio的工程和解決方案
  • Xcode                    用於生成Xcode工程

其中[options]可以不寫,如果要寫的話,有以下選項:

  • -DCMAKE_INSTALL_PREFIX=directory       等號後面的“directory”表示需要寫清楚你想要LLVM tools和libraries安裝在哪個路徑下,預設路徑是/usr/local
  • -DCMAKE_BUILD_TYPE=type        等號後面的“type” 可以填:Debug或Release或RelWithDebInfo或MinSizeRel。預設值是Debug(這裡實際一般選Release,Debug版本太大)
  • -DCMAKE_ENABLE_ASSERTIONS=on         在編譯時開啟斷言檢查,預設開啟後只對Debug版本有用,對其他build版本無用

其中make工具的說明:

  • make 後面不填任何選項的話,是預設build整個LLVM工程
  • make 後面新增“check-all”,即 make check-all的話,會執行迴歸測試(regression tests)保證所有按順序工作
  • CMake會為每個工具和庫生成build target,並且很多LLVM的子工程(sub-projects)會生成自己的check-<project>的target
  • 執行一條build的話會很慢(是非常非常慢,親身試過),一定要使用parallel build的方式執行,對於make工具來說,用make -j.(make -4j)

如果在build的過程中,遇到了“internal compiler error(ICE)”或者是測試失敗,官網上建議:

(1)檢視http://llvm.org/docs/GettingStarted.html#getting-started-with-llvm這一章節瞭解清楚LLVM的配置和編譯的細節資訊

(2)瞭解一下原始碼樹的層次結構http://llvm.org/docs/GettingStarted.html#directory-layout

  (1)(2)中內容的翻譯,我會在我的其他的部落格中進行介紹,歡迎指正。