読者です 読者をやめる 読者になる 読者になる

反省はしても後悔はしない

Vim とか備忘録とか。それと関数型言語勉強中

Arch Linux (64bit) における SML# のビルド

どうやら巷では SML# をビルドするのが流行っているようなので、僕も乗っかってみました。 僕のメイン環境は Arch Linux (64bit) なのですが色々試行錯誤したらビルドできたので記録として残しときます。

Xubuntu 64bit でのビルドは、すでによんたさん (id:keita44_f4) が成功させているので僕もそれを参考にしました。

Xubuntu 64bitにおけるSML# 2.0.0のビルド - ししちにじゅうはち 4x7=28

32bit 用の gcc のインストール

32bit のバイナリを吐き出すために gcc-multilib を入れます。

sudo pacman -S gcc-multilib

普通の gcc とコンフリクトするというメッセージと共に上書きするか聞いてくるので yes と答えます。 なお、32bit のバイナリをインストールするには/etc/pacman.confmultilibリポジトリを有効にする必要があります。

GMP ライブラリのインストール

Arch Linux なら 32bit 版でもバイナリがあります。

sudo pacman -S lib32-gmp

LLVM ライブラリのインストール

Arch Linux なら 32bit 版でもバイナリがあります。

sudo pacman -S lib32-llvm

SML# のビルドの前に...

SML# のビルドでは LLVM 関連のパスを取得するのに llvm-config という実行ファイルを使っているみたいなのですが、Arch Linuxpacmanlib32-llvm をインストールした場合は llvm-config32 という名前になります。 これに対応させるため、SML# のソースに含まれる configure ファイルを編集します。

# configure の 4288 行目くらい
- set dummy llvm-config; ac_word=$2
+ set dummy llvm-config32; ac_word=$2

SML# のビルド

ここまでくればあとは SML# をビルドするだけ! ちなみに pacman 経由で 32bit バイナリを入れると /usr/lib32 以下にものができるのでそれをオプションで指定してやります。

./configure CC='gcc -m32' CXX='g++ -m32' \
    LD='ld -m elf_i386' \
    LDFLAGS='-L/usr/lib32' \
    --prefix=/opt/smlsharp-2.0 
make
sudo make install

まとめ

  • やっぱり 64bit は茨の道だった
  • そもそも SML# 書いたことないし文法も知らない
  • やってみたらできました