Claspをビルドする2020-05

Common Lisp処理系のClaspは、依存ライブラリやリビジョンが色々変わって中々出来ない事が多いので、現時点でビルド可能な組み合わせについて。

ホスト計算機はUbuntu 18.04.4 x86_64 で確認を行っている。 Ubuntuのパッケージ方針がよく分からないが、18.04でも時期によってLLVMのバージョンが色々あったりするので、例えばapt install clangとやると、Claspをビルドできないclangが入る可能性がある。 改めてUbuntu 18.04のLLVM関連パッケージをみると、現在では3.9から9までそろっているのでUbuntu 18.04だけを考えればexternals claspでLLVMをビルドする必要は無いかもしれない。

testingブランチ

ブランチの扱いが時々変わるのでよく分からないところがあるが、一応安定版に相当すると思われるブランチ。 現在の最新バージョンは2019-09-29の f0cb8960867be6ed58a82066abb0da2df9da72b3 でこれはgithub上 0.4.3 のタグがついている最新安定版と思われる。 LLVM 6を必要としており、現状のroswellからインストールできるのはこのブランチを追従してることが多い。

roswellからのインストール

完全な手順を目指して、dockerのubuntu:bionicでインストールを行う。

docker pull ubuntu:bionic
docker run -it --name roswell-clasp ubuntu:bionic

dockerのubuntuの中でroswellインストール。

apt update
apt -y install git build-essential automake libcurl4-openssl-dev
git clone -b release https://github.com/roswell/roswell.git
cd roswell
git checkout v20.04.14.105
sh bootstrap
./configure --prefix=$HOME/.local
make
make install
export PATH=$HOME/.local/bin:$PATH
ros setup
ros run -- --version

最終的にroswellが動いて、インストールされたSBCLは2.0.4だった。

SBCL 2.0.4

Claspをインストール。まずは依存ライブラリのビルド。

apt -y install cmake python binutils-dev
time ros install externals-clasp+/6.0.1

数十分待つとビルドが終わる。エラーになるようであれば、~/.roswell/lib/x86-64/linux/externals_clasp/6.0.1の中で make を実行してエラーに対処する。(環境合わせてこの手順通りならエラーにならないはずだが)

apt -y install libgmp-dev libgc-dev zlib1g-dev libelf-dev libncurses-dev libbsd-dev libboost-filesystem-dev libboost-date-time-dev libboost-program-options-dev libboost-iostreams-dev
time ros install clasp  

数十分待つとビルドが終わる。エラーになるようであれば、 ~/.roswell/src/clasp/2019-09-29 の中で ./waf configure build_dboehm を実行してエラーに対処する。(環境合わせてこの手順通りならエラーにならないはずだが)

ros run -- --version
clasp-boehm-0.4.2-1534-gf0cb89608

普通にビルド

公式ビルド方法でもそのままビルドできる。 Build Instructions · clasp-developers/clasp Wiki · GitHub

docker run -it --name clasp-testing ubuntu:bionic
apt update
apt install -y gcc g++ llvm clang-6.0 libclang-6.0-dev cmake libgc-dev libgmp-dev binutils-gold binutils-dev zlib1g-dev libncurses-dev libboost-filesystem-dev libboost-regex-dev libboost-date-time-dev libboost-program-options-dev libboost-system-dev libboost-iostreams-dev libunwind-dev liblzma-dev libelf1 libelf-dev libbsd-dev sbcl git
git clone https://github.com/clasp-developers/clasp.git
cd clasp
git checkout f0cb8960867be6ed58a82066abb0da2df9da72b3
time ./waf configure build_dboehm

数十分待つとビルドが終わる。

build/clasp 

実行するとREPLが起動する。

Starting cclasp-boehm-0.4.2-1534-gf0cb89608-cst ... loading image...
Top level in: #<PROCESS TOP-LEVEL @0x7900ea9>.
COMMON-LISP-USER> 

devブランチ

devブランチは最新開発版で現在の dee626ca92ce5b2154c1903b17d26444a7f69de6LLVM 9を必要としている。

docker run -it --name clasp-dev ubuntu:bionic
apt update
apt install -y git sbcl clang-9 libclang-9-dev libgmp-dev libgc-dev zlib1g-dev libelf-dev libncurses-dev libbsd-dev libboost-filesystem-dev libboost-date-time-dev libboost-program-options-dev libboost-iostreams-dev
git clone https://github.com/clasp-developers/clasp.git
cd clasp
git checkout dee626ca92ce5b2154c1903b17d26444a7f69de6
echo BOEHM_GC_ENUMERATE_REACHABLE_OBJECTS_INNER_AVAILABLE=False > wscript.config
time ./waf configure build_dboehm

数十分待つとビルドが終わる。

build/clasp

実行するとREPLが起動する。

Starting cclasp-boehm-0.4.2-2436-gdee626ca9-cst ... loading image...
Top level in: #<PROCESS TOP-LEVEL @0x9adbb69 (Running)>.
COMMON-LISP-USER> 

その他

  • ClaspはCMakeとWafとMakefileが混在しているのでよく分からんが、現状ビルドのメインはWaf部分だと思われる。
  • externals claspをroswellで使うようになったのも、当時ubuntuのパッケージにはLLVM 6がclaspに必要だったためだった気がする。