# Erlangランタイムシステムのビルド

> Source: https://www.ymotongpoo.com/works/beam-book-ja/appendix/building/


<a id="AP-BuildingERTS"></a>

本章では、要件に合わせてErlang/OTPを設定・ビルドするさまざまな方法を見ていきます。
例のほとんどはUbuntu Linuxを使って進めます。
別のOSを使っている場合は、ソースコード内のドキュメント（`HOWTO/INSTALL.md`）や、Web上の[INSTALL.html](http://www.erlang.org/doc/installation_guide/INSTALL.html)に、そのOS向けの詳しい手順が載っています。

ランタイムシステムをビルドする方法は基本的に2通りあります。
autoconf、configure、makeを使う伝統的な方法と、[kerl](https://github.com/spawngrid/kerl)を使う方法です。

まずは伝統的な方法を試すことをお勧めします。
ビルド時に何が起きていて、どの設定を変更できるかをより深く理解できるからです。
そのあとで、日常的な設定とビルドの管理にはkerlを使うようにするとよいでしょう。

## 最初のビルド

<a id="_first_time_build"></a>

はじめの一歩として、システムをゼロからビルドする手順を順を追って見ていきます。
そのあとで、目的に応じてシステムを設定する方法を見ていきます。

この手順は、最近のUbuntu環境を前提としています。
OS XとWindowsでのビルド方法は、本章の後半で扱います。

### 前提条件

<a id="_prerequisites"></a>

ソースコードを取得し、展開し、ビルドするには、いくつかのツールが必要です。
もっとも重要なものは`HOWTO/INSTALL.md`にまとまっています。

最近のUbuntu環境から始めるのであれば、sed、tar、perlといったツールはすでにインストール済みのはずです。
一方でgit、make、gcc、m4、ncursesなどは、あらためてインストールする必要があるでしょう。

最近のUbuntu環境であれば、次のコマンドで必要なツールの大半を入手できます。

``` sh
> sudo apt-get install build-essential git autoconf m4 \
>   zlib1g-dev ncurses-dev libssl-dev
```

wxWidgetsのサポート付きでビルドしたい場合は、wxライブラリも追加でインストールする必要があります。

``` sh
> sudo apt-get install libwxgtk3.2-dev wx3.2-i18n \
>   wx3.2-examples wx3.2-doc
```

WXでWebViewをサポートしたい場合は、次もオプションでインストールします。

``` sh
> sudo apt-get install libwxgtk-webview3.2-1t64
```

Erlang/OTPのドキュメントもビルドできるようにしたい場合は、もう少しツールが必要です。

``` sh
> sudo apt-get install xsltproc libxml2-utils
```

### ソースの取得

<a id="_getting_the_source"></a>

ソースコードを取得する主な方法は2つあります。
[erlang.org](http://www.erlang.org/download.html)からtarballをダウンロードする方法と、[Github](https://github.com/erlang/otp)から直接ソースコードをチェックアウトする方法です。

安定版のソースコードを手早くダウンロードしたい場合は、次のようにします。

``` sh
> cd ~/otp
> wget http://erlang.org/download/otp_src_27.0.tar.gz
> tar -xzf otp_src_27.0.tar.gz
> cd otp_src_27.0
```

最新の開発版に手軽に追従したい場合や、コミュニティに修正を還元したい場合は、gitでソースコードをチェックアウトします。

``` sh
> git clone https://github.com/erlang/otp.git
> cd otp
```

古いバージョンのErlangをビルドする場合は、autoconfの実行が必要になることがあります。

``` sh
> ./otp_build autoconf
```

### 設定とビルド

<a id="_configuring_and_building"></a>

これでErlangをビルド・インストールする準備が整いました。
システム全体のインストールに影響を与えないように、インストール先のプレフィックスを自分専用のディレクトリに設定するとよいでしょう。

``` sh
> ./configure --prefix=$HOME/.local
> make
> make install
> export PATH="$HOME/.local/bin:$PATH"
```

### 代替のBeamエミュレータビルド

<a id="_alternative_beam_emulator_builds"></a>

現在、エミュレータのビルドには主に2つの*フレーバー*があります。
JITを有効にした`jit`（対応プラットフォームではこちらがデフォルト）と、JITを使わない`emu`です。
`smp`という名前を見かけることもありますが、これは単に現在のプラットフォームのデフォルトフレーバーを指すエイリアスです。

``` sh
> make TYPE=emu
```

あるいはJIT有効フレーバーのデバッグ版としては次のようにします。

``` sh
> make TYPE=debug
```

（当然ながら、`--disable-jit`を指定して設定していたり、プラットフォームがJITに対応していなかったりする場合は、`jit`フレーバーのビルドを指定しても実際にはビルドされません。）

*ビルドタイプ*を指定することで、計測用の機能を組み込んだ別のバリアントのエミュレータをビルドすることもできます。
実行時に`erlang:system_info(build_type)`を呼び出すと、いま動いているエミュレータがどのようにビルドされたかがわかります。
標準のビルドは`opt`と呼ばれます。

代替のエミュレータタイプをビルドするには、`TYPE`変数を設定します。
これは`FLAVOR`変数と組み合わせることもできます。

``` sh
> make
> make TYPE=debug
> make FLAVOR=emu TYPE=lcnt
```

`debug`のほかにも、`valgrind`など計測機能を組み込んだいくつかのバリアントをビルドできます。
ビルドツリーの外から（ソースコードのトップディレクトリから）これらを直接実行するには、専用の起動スクリプト`bin/cerl`を使って計測付きエミュレータを起動できます。

``` sh
> bin/cerl -debug
```

`cerl`スクリプトは、たとえば`valgrind`計測版エミュレータを実行したときに生成される追加の出力ファイルの扱いも助けてくれます。
詳しくは`HOWTO/INSTALL.md`と`HOWTO/DEVELOPMENT.md`を参照してください。

`make install`にデフォルトのビルドだけでなくこれらのバリアントビルドも含めたい場合は、組み合わせごとに個別に実行する必要があります。

``` sh
> make install
> make install TYPE=debug
> make install FLAVOR=emu TYPE=lcnt
```

こうすることで、ユーザーは`-emu_flavor`フラグと`-emu_type`フラグを使って、実行したいバリアントを選択できるようになります。

``` sh
> erl -emu_flavor emu -emu_type lcnt
```

## Kerlを使ったビルド

<a id="_building_with_kerl"></a>

とくに実験用にいくつも異なるビルドを用意しておきたい場合、より手軽にビルドする方法がKerlを使うことです。

