ししちにじゅうはち 4x7=28

よんたったー https://twitter.com/keita44_f4

Xubuntu 64bitにおけるSML# 2.0.0のビルド

SML#2.0.0がリリースされました.
せっかくなのでパッケージではなくソースからビルド.*1
というわけでクリーンなXubuntu 12.04LTSでSML#をビルドしたときの経験まとめです.*2

32bit環境の整備

C/C++の32bitライブラリを用意しておきます.
GMPLLVM,SML#のビルドに必要.
たぶんこれで依存するg++も入ってくれる.

# aptitude install gcc-multilib g++-multilib

GMPライブラリのビルド

通常のGMPライブラリパッケージ(libgmp-dev)は64bitビルドされているので,SML#用に32bitでビルドする.*3
configureを走らせるときにABI=32オプションをつけて,32bitビルドを指定.

$ wget https://gmplib.org/download/gmp/gmp-6.0.0a.tar.lz
$ lzip -d gmp-6.0.0a.tar.lz
$ tar xf gmp-6.0.0a.tar
$ cd gmp-6.0.0a
# mkdir /opt/gmp32-6.0.0
# ./configure ABI=32 --prefix=/opt/gmp-6.0.0
$ make && make check
# make install

追記:runtimeでロードできるようにldconfのパスに加えて、リロードする。

# echo '/opt/gmp32-6.0.0/lib' > /etc/ld.so.conf.d/gmp32.conf
# ldconf

LLVMのビルド

配布されているUbuntu系用のLLVMバイナリは64bitビルドです.*4
なので自力で32bitビルド.
また,SML#は現時点での最新版であるLLVM3.4 32bitを必要としますので,多くのディストリビューションで自力ビルドが必要かと思います.

$ wgetやら解凍やら省略
# mkdir /opt/llvm32-3.4
$ ./configure CC='gcc -m32' CXX='g++ -m32' \
     --build=i686-pc-linux-gnu \
     --prefix=/opt/llvm32-3.4
$ make
# make install

*5

必要なライブラリ郡その他

なんか知らないけど./configure中に怒られたので,libzやlibinfoをいれる.
INSTALLとかの説明には書いてないけど必要なら仕方ない.

# aptitude install libz-dev
# aptitude install libinfo-dev

SML#のビルド

ここまでくればSML#をビルドするだけ!
fast-buildオプションが行方不明なのでコーヒーでも飲みながらまったり待ちましょう.
必要なオプションは32bit・GMPLLVMの指定です.インストール先のprefixはお好みで.
オプション長すぎぱない.

$ wgetやら解凍やら省略
# mkdir /opt/smlsharp-2.0.0
$ ./configure CC='gcc -m32' CXX='g++ -m32' \
    LD='ld -m elf_i386' \
    LDFLAGS='-L/opt/gmp32-6.0.0/lib' \
    CPPFLAGS='-I/opt/gmp32-6.0.0/include' \
    --with-llvm=/opt/llvm32-3.4 \
    --prefix=/opt/smlsharp-2.0.0
$ make
# make install

まとめ

  • 必要が無い限りSML#はビルドパッケージを使うと楽
  • SML#をビルドするなら32bitOSが楽
  • やれるものならやってみろ

*1:コンパイラ改造とかしたくなると必須ですし

*2:今まで使ってたUbuntu10.03はSML#のビルド準備中にlibcが壊れたなんて言えない

*3:libgmp32-devパッケージをいれて,そっちをオプションで指定すればよかった気もする

*4:SML#のビルド中に大量の-lLLVMhogehogeに関するエラーが出て泣いた

*5:LLVMのビルド長いとの噂だったけど,SML#に比べれば短かっt