プログラミング言語SML#解説 4.1.0版
5 SML#のインストール

5.8 ソースからビルドする場合

その他のシステムではソースからビルドしてください. ソースからのビルドには,以下の開発ツールとライブラリが事前に インストールされている必要があります.

  1. 1.

    プログラム開発用のツール群GNU binutils(GNU Binary Utilities).

  2. 2.

    CおよびC++コンパイラ(gccまたはclang)

  3. 3.

    make(GNU makeを推奨)

  4. 4.

    GMPライブラリ本体とヘッダーファイル

  5. 5.

    LLVMのライブラリ,ヘッダーファイル,およびコマンド (バージョン7.1.0から19.1まで)

  6. 6.

    MassiveThreadsライブラリ本体とヘッダーファイル

これらのソフトウェアがインストール済みならば,SML#は 標準的な3ステップ ./configure && make && make install で インストールすることができます.

特にこだわりがなければ,これらのソフトウェアは OS標準のパッケージシステムでインストールしてください. これらのソフトウェアがOSのパッケージシステムによって提供されていない 場合,これらもソースからビルドする必要があります. これらのコンパイルの詳細は,各ソフトウェアの公式ドキュメントなどを 参照してください.

本文書の執筆時点でのMassiveThreadsおよびLLVM 7.1.0の大まかな インストール手順は以下の通りです.

MassiveThreads

MassiveThreadsのWebページ https://github.com/massivethreads/massivethreadsなどからMassiveThreads 1.02のソースコード massivethreads-1.02.tar.gzを入手,展開し, 標準的な3ステップ ./configure && make && make install で インストールしてください.

LLVM 7.1.0

LLVMのWebページ http://llvm.org/ などからLLVMのソースコード llvm-7.1.0.src.tar.xzを入手,展開し,以下の5ステップでビルドします.

mkdir build
cd build
cmake -G "Unix Makefiles" \
     -DCMAKE_INSTALL_PREFIX=/where/llvm/is \
     -DCMAKE_BUILD_TYPE=Release \
     -DLLVM_BUILD_LLVM_DYLIB=On \
     -DLLVM_ENABLE_BINDINGS=Off
make
make install

上記例でcmakeに指定しているオプションは必須ではありませんが, 指定することをおすすめします. -DCMAKE_INSTALL_PREFIXは他のLLVMのインストールと衝突を 避けるために指定することをおすすめします. -DCMAKE_BUILD_TYPE=ReleaseはLLVM自体を最適化します. -DLLVM_BUILD_LLVM_DYLIB=Onオプションは共有ライブラリを ビルドします. -DLLVM_ENABLE_BINDINGS=OffはSML#に不要なモジュールの ビルドを防ぎます.

以上の環境の下で,以下の手順でSML#をソースからビルドします.

  1. 1.

    ソースパッケージ (https://github.com/smlsharp/smlsharp/releases/download/v4.1.0/smlsharp-4.1.0.tar.gz) をダウンロードします. 最新のソースパッケージは https://smlsharp.github.io/ja/downloads/からも取得できます.

  2. 2.

    適当なSML#ソースディレクトリを決め,そこにソースパッケージを 展開します. ただし,絶対パスに日本語が含まれるディレクトリは避けてください. SML#をビルドできません.

  3. 3.

    適当なSML#のインストール先ディレクトリを決めます. 以下,そのディレクトリをprefixとします.

  4. 4.

    SML#ソースディレクトリにてconfigureスクリプトを実行します. このとき,--prefixオプションにprefixを, --with-llvmにLLVMをインストールしたディレクトリを指定します.

    $ ./configure --prefix=prefix --with-llvm=/where/llvm/is

    --prefixオプションを省略した場合は /usr/localに インストールされます. --with-llvmオプションを省略した場合は,LLVMのライブラリ とコマンドを標準的な場所(/usr/binなど)から探します.

  5. 5.

    makeコマンドを実行しビルドを行います.

    $ make

    なお,ビルド終了後,以下のコマンドでSML#コンパイラをインストール する前に起動することができます.

    $ src/compiler/smlsharp -Bsrc

  6. 6.

    (オプション) 以下のコマンドで, ビルドしたSML#コンパイラで SML#コンパイラをビルドし直すことができます.

    $ make stage
    $ make

  7. 7.

    make installコマンドでインストールします.

    $ make install

    システム管理の都合上,インストールされるファイルを prefixとは異なるディレクトリprefixに出力させたい場合は, make installコマンドにDESTDIR=prefixオプションを 指定してください.

以上により,以下のファイルがインストールされます.

  1. 1.

    smlsharpコマンド:prefix/bin/smlsharp

  2. 2.

    smlformatコマンド:prefix/bin/smlformat

  3. 3.

    smllexコマンド:prefix/bin/smllex

  4. 4.

    smlyaccコマンド:prefix/bin/smlyacc

  5. 5.

    ライブラリファイル:prefix/lib/smlsharp/ディレクトリ以下のファイル

以下のコマンドでSML#コンパイラが起動できるはずです.

$ prefix/bin/smlsharp

補足とヒント:

  • マルチコアCPUをお使いの方は,GNU makeならばmakeコマンドを実行 するとき-jnスイッチを指定すると,並列にコンパイルされ, 実行時間が短縮される場合があります.nは並列度です.コアの数程度 に指定すると良い結果が得られると思います.

  • SML#コンパイラ自体を開発するためには, SML#コンパイラを動かすためのLLVMに加え,ブートストラップのために LLVM 7.1.0が必要です. 開発目的でSML#コンパイラをビルドする場合は, ./configure実行時に--with-llvm7オプションを加えて, LLVM 7.1.0がインストールされている場所を指定してください.