LLVM を入れてみる

# LLVM とはなんじゃらホイホイ
LLVM は各種解析や様々な言語に対応できるように作られているナウでヤングにばかうけなコンパイラインフラストラクチャで、
コンパイラ屋さんが欲しい機能が入っているものです。
# LLVM を入れる
LLVM を入れるにはまず LLVM のページに行って最新版をダウンロードします。2020年5月9日現在では、10.0.0が最新のようです。
## Cmake を準備する。
私は古い人間なので、ディレクトリ内を見た時に、configure があるのですぐさま、

```
$ ./configure
```

としてしまいますが、これは大きな間違い。

```
$ ./configure 
################################################################################
################################################################################
The LLVM project no longer supports building with configure & make.

Please migrate to the CMake-based build system.
For more information see: http://llvm.org/docs/CMake.html
################################################################################
################################################################################
```

ほーら怒られた。Cmake を使えと言われてしまいます。
しかし、CentOS には標準で良さげな Cmake が入っていないのです。

そこで、以下を実行

```
$ sudo yum install cmake3
```

どうせ入れるなら新しい方が良いだろうと思いこのようにています。

## 早速コンパイル開始と思いきや
以下のようにmake環境を整えました、最近の流行りで、ソースのディレクトリで直接実行してしまうと怒られます。

```
$ cmake3 .
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- No build type selected, default to Debug
CMake Error at CMakeLists.txt:242 (message):
  In-source builds are not allowed.

  Please create a directory and run cmake from there, passing the path

  to this source directory as the last argument.

  This process created the file `CMakeCache.txt' and the directory
  `CMakeFiles'.

  Please delete them.


-- Configuring incomplete, errors occurred!
See also "/home/evakichi/Downloads/llvm-10.0.0.src/CMakeFiles/CMakeOutput.log".

```

ね 怒られるでしょ？

では気を取りなおして、LLVM のソースディレクトリの直下にbuildディレクトリを作成。

```
$ mkdir build
$ cd build
$ cmake3 -G "Unix Makefiles" ../.
```

## あらあら、またエラーですよ。

```
$ cmake3 -G "Unix Makefiles" ../.
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- No build type selected, default to Debug
-- Could NOT find Z3: Found unsuitable version "0.0.0", but required is at least "4.7.1" (found Z3_LIBRARIES-NOTFOUND)
CMake Error at cmake/modules/CheckCompilerVersion.cmake:38 (message):
  Host GCC version must be at least 5.1, your version is 4.8.5.
Call Stack (most recent call first):
  cmake/modules/CheckCompilerVersion.cmake:48 (check_compiler_version)
  cmake/config-ix.cmake:13 (include)
  CMakeLists.txt:623 (include)


-- Configuring incomplete, errors occurred!
See also "/home/evakichi/Downloads/llvm-10.0.0.src/build/CMakeFiles/CMakeOutput.log".

```

今度はZ3とかいうライブラリが(必ずではないですが)要るようです。あとGCCも5.1以上が必要とのこと。
ですからインストールをします。
Z3はパッケージが無いので Github から落としてきてインストールしてみます。

```
$ git clone https://github.com/Z3Prover/z3.git
Cloning into 'z3'...
remote: Enumerating objects: 134, done.
remote: Counting objects: 100% (134/134), done.
remote: Compressing objects: 100% (79/79), done.
remote: Total 109691 (delta 73), reused 84 (delta 55), pack-reused 109557
Receiving objects: 100% (109691/109691), 47.98 MiB | 12.94 MiB/s, done.
Resolving deltas: 100% (90330/90330), done.
```

ビルドを説明書に則ってします。

```
$ python scripts/mk_make.py --prefix=/usr/local/
$ cd build
$ make -j7
$ sudo make install
```
GCCについてはたくさん事例があるので割愛。

では、気を取りなおして、もう一度LLVMのビルドにチャレンジ。

```
$ cmake3 -G "Unix Makefiles" -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_INSTALL_PREFIX=/opt/llvm/ ../.
```
一説によると、コンパイルに 2〜3 時間かかるとか、ちょっとコア数を稼いで時間を短くしてみます。

```
make -j7
```
ビルドが終わったのでインストール。

```
$ sudo make install 
```
あとは PATH を追加してしゅーりょー。
使いかたはまた今度!!