Help us understand the problem. What is going on with this article?

【2018年11月版】コンパイラ基盤LLVM+Clangをゼロからコンパイル/ビルドする(AWS + CentOS7)。

More than 1 year has passed since last update.

はじめに

AWS上に新規に構築したCentOS上で、LLVMとClangをビルドした際にやったことの全てです。
作業日時点(2018年11月10日)の最新版のソースで作業しています。

環境構築

ビルド環境はAWS+CentOS7です。

CentOS7はマーケットプレイスにある公式のものを使用しました。

https://aws.amazon.com/marketplace/pp/B00O7WM7QW
AWS Marketplace: CentOS 7 (x86_64) - with Updates HVM
Version:1805_01

当初はt2.medium (CPU:2core, Memory:4GB)に30GBのディスクを付けて作業を開始したのですが、この構成ではビルド不可能でした。

必要なのは、
・できるだけ高速なCPU
(makeがシングルスレッドで処理するのでコア数は無視できそうです。make -jxは試していません。)
・32GB程度のメモリー
(一時的にスワップしますが16GBでもぎりぎりビルド可能と思います)
・80GB以上のディスク空き容量
(ビルド完了時の出力フォルダの容量は70GBでした)
・3~4時間
(何度もインスタンスのグレードアップやディスク拡張を行ったため不正確ですがとにかく時間がかかります)

最終的に私が使用した構成は、
c5.4xlarge + 100GB Volume
です。

事前準備

おきまりとして。

・Yumのアップデート

sudo yum update

・TimezoneをTokyoへ

sudo timedatectl set-timezone Asia/Tokyo

・Swapボリュームを作成

# スワップファイルを作成し、有効化
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo echo "/swapfile  swap        swap    defaults        0   0" >> /etc/fstab

# スワップファイルがオンになっていることを確認
free
# 数字が出ていればOK

必要ソフトウェアをインストール

LLVMの公式サイトによると、次のソフトウェアが必要とのこと。

Package Version Notes
GNU Make 3.79, 3.79.1 Makefile/build processor
GCC >=4.8.0 C/C++ compiler1
python >=2.7 Automated test suite2
zlib >=1.2.3.4 Compression library3

次のコマンドで確認すると、

yum list installed | grep -e ^make -e gcc -e ^python.x86 -e zlib
libgcc.x86_64                           4.8.5-28.el7_5.1               installed
make.x86_64                             1:3.82-23.el7                  installed
python.x86_64                           2.7.5-69.el7_5                 @updates
zlib.x86_64                             1.2.7-17.el7                   installed

gccが無いのでインストールする。
gcc-c++は要件にはないですが、入れておかないとcmake実行時にエラーが発生します。

sudo yum install gcc
sudo yum install gcc-c++

さらに、次のコマンドが入っていることが想定されるとのこと

    ar - archive library builder
    bzip2 - bzip2 command for distribution generation
    bunzip2 - bunzip2 command for distribution checking
    chmod - change permissions on a file
    cat - output concatenation utility
    cp - copy files
    date - print the current date/time
    echo - print to standard output
    egrep - extended regular expression search utility
    find - find files/dirs in a file system
    grep - regular expression search utility
    gzip - gzip command for distribution generation
    gunzip - gunzip command for distribution checking
    install - install directories/files
    mkdir - create a directory
    mv - move (rename) files
    ranlib - symbol table builder for archive libraries
    rm - remove (delete) files and directories
    sed - stream editor for transforming output
    sh - Bourne shell for make build scripts
    tar - tape archive for distribution generation
    test - test things in file system
    unzip ? unzip command for distribution checking
    zip - zip command for distribution generation

これ、、、普通入っているのでは?

その他、次のツール+バージョンではエラーが出るとのことなので注意が必要です。

Package ダメな!Version Note
GNU ld 2.16.X 2.17以上ならOK
GNU binutils 2.17 2.17.50.0.4以上ならOK
GNU Binutils 2.19.1 Gold 最新VerならOK

次のコマンドで確認。

ld --version
> GNU ld version 2.27-28.base.el7_5.1

yum list installed | grep binutils
> binutils.x86_64                         2.27-28.base.el7_5.1           @updates

作業ディレクトリの作成と移動

次のコマンドで、作業ディレクトリを作成して移動します。

mkdir install-llvm
cd install-llvm

cmakeのインストール

ビルドで使用するcmakeはyumでインストールされるバージョン(2.8.12.2)では使えない(3.4.3以上が必要)ので、公式からダウンロードしてインストールします。

はじめに、cmakeのページでダウンロードするファイルのURLをコピーしておく。
https://cmake.org/download/

上記リンクに移動し、
Binary distributions: -> Linux x86_64 のリストにある
cmake-3.13.....x86_64.shのURLをコピー

今回は次のURLを使用
https://cmake.org/files/v3.13/cmake-3.13.0-rc3-Linux-x86_64.sh

次のコマンドを順に実行し、上でコピーしたURLからcmakeのバイナリをダウンロードしてインストールする。

# ダウンロードにwgetを使うのでインストールする
sudo yum install wget

# cmake用作業ディレクトリを作成して移動
mkdir cmake
cd cmake

# 先ほどコピーしたファイルをダウンロードする
wget https://cmake.org/files/v3.13/cmake-3.13.0-rc3-Linux-x86_64.sh

# インストール(ただの自己解凍だけれど)を実行
sh ./cmake-3.13.0-rc3-Linux-x86_64.sh

# 利用規約が表示されるのでyで答える。
Do you accept the license? [yN]:
y

# 解凍先を聞かれるのでYで答える
Saying no will install in: "/home/centos/install-llvm/cmake" [Yn]:
Y

# 独自パッケージ置き場(/opt)へコピーする(自分ルールがある方はご自由に)
sudo mv cmake-3.13.0-rc3-Linux-x86_64 /opt/cmake

# 今回は簡易環境なので/opt/cmake/binをパスへ追加
# (真面目な方はシンボリックリンク使うなりご自由に)
echo 'export PATH=$PATH:/opt/cmake/bin' >> ~/.bashrc
source ~/.bashrc

# 確認
cmake]$ cmake --version
cmake version 3.13.0-rc3

LLVM + Clangのビルド

やっとメインの作業です。
以下、公式のインストールページを参照して作業を進めます。

しかし、公式の「Getting Start with the LLVM」を開くと、
https://llvm.org/docs/GettingStarted.html

The LLVM Getting Started documentation may be out of date. So, the Clang Getting Started page might also be a good place to start.

Google翻訳によると

LLVM Getting Startedのドキュメントは古くなっている可能性があります。 だから、Clang Getting Startedのページも始めるのが良いかもしれない。

え!

どうせClangも入れますし、ClangのガイドでLLVMもインストールしているので、素直にClangのドキュメントに従って作業することにします。
http://clang.llvm.org/get_started.html

ドキュメントにありますが、ここで紹介する手順でインストールされるClangはデバッグモードとのことです。気になる方はビルドオプションなど調べてみたほうが良いかもしれません。

Get the required tools.

「必要なソフトウェアをインストール」で済ませていますが、ソース取得にsvnも必要なので入れます。

sudo yum install svn

Check out LLVM:

llvmのソースコードをダウンロードします。

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

Check out Clang:

Clangのソースコードをダウンロードします。

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

Check out extra Clang tools: (optional)

Clang toolsのソースコードをダウンロードします。

cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd ../../../..

Check out Compiler-RT (optional):

Compiler-RTのソースコードをダウンロードします。

cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..

Check out libcxx:

only required to build and run Compiler-RT tests on OS X, optional otherwise
OS XでCompiler-RTテストをビルドして実行するためにのみ必要です。それ以外の場合はオプションです

とのことなので無視します。

Build LLVM and Clang:

いよいよビルドです。
makeのコマンドが終了するまで数時間かかります。

mkdir build
cd build
cmake -G "Unix Makefiles" ../llvm
make

コンソールが帰ってきたらビルド終了です。

確認

build/binというディレクトリに実行ファイルが出力されます。
次のコマンドで確認してみます。

./bin/clang --version
##########出力結果##########
clang version 8.0.0 (trunk 346584)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/centos/install-llvm/build/bin/.
###########################

ソースのバージョン(8.0.0)の実行ファイルが生成されています。

その他

最後に、ビルド時に消費したディスク容量を確認してみます。

du -m install-llvm
##########出力結果(の一部)##########
67377   install-llvm/build
1169    install-llvm/llvm
37      install-llvm/cmake
68582   install-llvm
##################################

ソース一式で1GBを超えているのも凄いですが。
buildディレクトリが67GBというのが驚きです。

fnlp
金融データ処理や自然言語処理に興味のあるメンバーがあつまって情報交換するコミュニティです
https://github.com/fnlp-group
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした