LoginSignup
3
2

More than 5 years have passed since last update.

SML# v3.3.0をWSLにインストールする

Last updated at Posted at 2017-08-14

Bash on Ubuntu on WindowsもといWindows Subsystem for Linux(WSL)でSML#をソースコードからインストールする方法。

先にまとめ

  • 実質Ubuntuなので、SML#は問題なくインストール可能で動作もする。
  • SML# v3.3.0は起動後にCPUパワーをひじょうに食うため、v3.2.0のREPLと併用するのがよい。

前提条件

  • OS:Windows10
  • SML#バージョン:v3.3.0

対象者

  • Windows10でSML#を利用したい人
  • ソースビルドする暇がある人
    • 公式パッケージのほうが簡単に入るはず

関連ライブラリのインストール

libyajl-devとか

SML#ソースに含まれるINSTALL書いてないけど、libz、libeditも必要だった。
Ubuntuの初期状態では入っていなかった。

aptitude install libyajl-dev libz-dev libedit-dev

LLVM(3.7.1)

SML#はLLVM v3.7.1のllvm-configllvm-asを要求する。1
Ubuntu xenialでのllvmパッケージはv3.8.0のため、llvm-3.7パッケージを利用する。
ただし、llvm-3.7パッケージが提供するコマンド名はllvm-config-3.7などと、
バージョン番号が後ろについている。
そこでupdate-alternativeを使い、llvm-configコマンドとして管理する。

aptitude install llvm-3.7
# 以下はあまりよくなかった
# update-alternative --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-3.7 100
# update-alternative --install /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-3.7 100

SML#公式のパッケージ内容を見てみると違う方法が見つかった。
Ubuntuのllvm-3.7パッケージは/usr/lib/llvm-3.7/binにllvm-configやllvm-asのコマンドを持っている。
/usr/lib/llvm-***に各バージョンのLLVMバイナリやライブラリが格納されている。
ここをSML#のビルドconfigureで指定すればいい。

Massive Threads

下記リンク先の手順に従う

インストール

/usr/local/に配置される。

git clone git@github.com:massivethreads/massivethreads.git
cd massivethreads
./configure CFLAGS="-Wall -Wextra -O3"
make
make install
cd tests
make build
make check

ライブラリリストを更新

これをやらないと、SML#のビルドでlibmyth.so.0が見つからない。

ldconfig

SML#のインストール

v3.2.0と共存方法は後述。
ここのインストールを飛ばし、次の説へ進む。

普通にインストールする方法

/usr/local/に配置される。

# ./configure
./configure --with-llvm=/usr/lib/llvm-3.7
make
make install

複数バージョンを共存させる

ここからは、個人的に使いやすい設定をメモする。

現状のSML# 3.3.0は起動するだけでCPUを大幅に食う。
私のCore i7-7600UでもCPUの70%がsmlsharpプロセスに割かれる。
SML#の起動とともに、CPUファンが一気に鳴り出す。
なので、複数バージョンを利用する。

SML#のアンインストール

用意されてないので手動で行う。

rm -rf /usr/local/lib/smlsharp
rm /usr/local/bin/smlformat
rm /usr/local/bin/smllex
rm /usr/local/bin/smlsharp
rm /usr/local/bin/smlyacc

他にsmlなんたらがなければ、rm /usr/local/bin/sml*で消せるはず

v3.3.0のインストール

インストール先を変更する。

mkdir /opt/smlsharp/v3.3.0
# ./configure --prefix=/opt/smlsharp/v3.3.0
./configure --prefix=/opt/smlsharp/v3.3.0 --with-llvm=/usr/lib/llvm-3.7
make
make install

v3.2.0のインストール

インストール先を変更する。

mkdir /opt/smlsharp/v3.2.0
# ./configure --prefix=/opt/smlsharp/v3.2.0
./configure --prefix=/opt/smlsharp/v3.2.0 --with-llvm=/usr/lib/llvm-3.7
make
make install

smlsharpの選択管理

REPLはsmlsharpという名前でv3.2.0を使い、
コンパイルはsmlsharpcという名前でv3.3.0を使うことにする。

update-alternative --install /usr/bin/smlsharp smlsharp /opt/smlsharp/v3.2.0/bin/smlsharp 100
update-alternative --install /usr/bin/smlsharpc smlsharpc /opt/smlsharp/v3.2.0/bin/smlsharp 80
update-alternative --install /usr/bin/smlsharp smlsharp /opt/smlsharp/v3.3.0/bin/smlsharp 80
update-alternative --install /usr/bin/smlsharpc smlsharpc /opt/smlsharp/v3.3.0/bin/smlsharp 100

蛇足

  • SML/NJは32bit前提のため、64bit前提のWSLではまだ動かないらしい。今後に期待。
  • MLtonは、パッケージインストールだけで問題なく動いた。

  1. configure --helpを見たところ、LLVMのディレクトリ指定はできるが、コマンド名指定は見つからなかった。 

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2