nptclのブログ

Common Lisp処理系nptの開発メモです。https://github.com/nptcl/npt

FreeBSD 13.0-RELEASEでclispをソースから構築

clispを使いたいなら、あまり難しいことを考えずに pkgとかportsを利用すればいいと思います。

ここでは、手動でclispを構築する方法について説明します。
以前にも同じ内容clispをFreeBSDにインストールする - nptclのブログを投稿しましたが、 13.0-RELEASEではうまく行かなかったので改良版です。

以前の投稿との違いは下記の通り。

  • binutilsを構築する必要がある
  • gccはall-gccでmake
  • clispのinstallで変なエラーが出るのでごまかす

gcc構築の前準備

説明の都合上、シェルをshにします。

% cd
% /bin/sh
$

下記の変数はインストール場所です。

$ work="${HOME}/work"
$ gcc="${HOME}/work/gcc"
$ clisp="${HOME}/work/clisp"

作業場所の作成

$ mkdir ${work}
$ mkdir ${work}/install

ダウンロード

$ cd ${work}/install
$ fetch http://ftp.jaist.ac.jp/pub/GNU/gmp/gmp-6.1.2.tar.xz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/mpfr/mpfr-4.1.0.tar.xz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/mpc/mpc-1.2.1.tar.gz
$ fetch http://isl.gforge.inria.fr/isl-0.24.tar.xz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/make/make-4.3.tar.gz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/binutils/binutils-2.36.tar.xz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/gcc/gcc-11.1.0/gcc-11.1.0.tar.xz

ミラーサイトjaistさんを利用させていただきました。
ありがとうございます。

gmpの導入

$ cd ${work}/install
$ tar Jxf gmp-6.1.2.tar.xz
$ cd gmp-6.1.2
$ ./configure --prefix=${gcc}
$ make
$ make install
$ make clean

mpfrの導入

$ cd ${work}/install
$ tar Jxf mpfr-4.1.0.tar.xz
$ cd mpfr-4.1.0
$ ./configure --prefix=${gcc} --with-gmp=${gcc}
$ make
$ make install
$ make clean

mpcの導入

$ cd ${work}/install
$ tar zxf mpc-1.2.1.tar.gz
$ cd mpc-1.2.1
$ ./configure --prefix=${gcc} --with-gmp=${gcc} --with-mpfr=${gcc}
$ make
$ make install
$ make clean

islの導入

$ cd ${work}/install
$ tar Jxf isl-0.24.tar.xz
$ cd isl-0.24
$ ./configure --prefix=${gcc} --with-gmp-prefix=${gcc}
$ make
$ make install
$ make clean

GNU makeの導入

$ cd ${work}/install
$ tar zxf make-4.3.tar.gz
$ cd make-4.3
$ ./configure --prefix=${gcc}
$ make
$ make install
$ make clean

binutilsの導入

$ cd ${work}/install
$ tar Jxf binutils-2.36.tar.xz
$ cd binutils-2.36
$ export LD_LIBRARY_PATH=${gcc}/lib
$ ./configure \
--enable-languages=c \
--prefix=${gcc} \
--with-gmp=${gcc} \
--with-mpfr=${gcc} \
--with-mpc=${gcc} \
--with-isl=${gcc} \
--disable-multilib \
--disable-bootstrap
$ ${gcc}/bin/make
$ ${gcc}/bin/make install
$ ${gcc}/bin/make clean

gccの導入

$ cd ${work}/install
$ tar Jxf gcc-11.1.0.tar.xz
$ mkdir gcc-work
$ cd gcc-work
$ export LD_LIBRARY_PATH=${gcc}/lib
$ ../gcc-11.1.0/configure \
--enable-languages=c \
--prefix=${gcc} \
--with-gmp=${gcc} \
--with-mpfr=${gcc} \
--with-mpc=${gcc} \
--with-isl=${gcc} \
--disable-multilib \
--disable-bootstrap
$ ${gcc}/bin/make all-gcc
$ ${gcc}/bin/make install-gcc
$ ${gcc}/bin/make clean

gccの確認

$ ${gcc}/bin/gcc --version
gcc (GCC) 11.1.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

clisp構築の前準備

説明の都合上、シェルをshにします。

% cd
% /bin/sh
$

下記の変数はインストール場所です。

$ work="${HOME}/work"
$ gcc="${HOME}/work/gcc"
$ clisp="${HOME}/work/clisp"

gccのための環境変数の設定

$ export CC=${gcc}/bin/gcc
$ export LD_LIBRARY_PATH=${gcc}/lib:$LD_LIBRARY_PATH
$ export LIBRARY_PATH=${gcc}/lib
$ export C_INCLUDE_PATH=${gcc}/include
$ export CPLUS_INCLUDE_PATH=${gcc}/include

ダウンロード

$ cd ${work}/install
$ fetch http://ftp.jaist.ac.jp/pub/GNU/libsigsegv/libsigsegv-2.13.tar.gz
$ fetch http://www.haible.de/bruno/gnu/ffcall-1.10.tar.gz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/readline/readline-8.1.tar.gz
$ fetch https://gitlab.com/gnu-clisp/clisp/-/archive/master/clisp-master.tar.bz2

libsigsegvの導入

$ cd ${work}/install
$ tar zxf libsigsegv-2.13.tar.gz
$ cd libsigsegv-2.13
$ ./configure --prefix=${clisp}
$ make
$ make install
$ make clean

ffcallの導入

★注意:-jによる並列実行はしないこと

$ cd ${work}/install
$ tar zxf ffcall-1.10.tar.gz
$ cd ffcall-1.10
$ ./configure --prefix=${clisp}
$ make
$ make install
$ make clean

readlineの導入

$ cd ${work}/install
$ tar zxf readline-8.1.tar.gz
$ cd readline-8.1
$ ./configure --prefix=${clisp}
$ make
$ make install
$ make clean

clispの導入

★注意:-jによる並列実行はしないこと

$ cd ${work}/install
$ tar jxf clisp-master.tar.bz2
$ cd clisp-master
$ ./configure --prefix=${clisp} \
--with-libsigsegv-prefix=${clisp} \
--with-libffcall-prefix=${clisp} \
--with-readline-prefix=${clisp} \
--disable-mmap
$ cd src
$ ${gcc}/bin/make
$ ${gcc}/bin/make install

もしclhs.elに関するエラーが出た場合

・・・
mkdir -p /home/user/work/clisp/share/emacs/site-lisp
/usr/bin/install -c -m 644 ../emacs/clhs.el /home/user/work/clisp/share/emacs/site-lisp/clhs.el
install: ../emacs/clhs.el: No such file or directory
*** Error code 71

Stop.

$

次のような手順で回避する。

$ vi Makefile

2550行目付近の

    $(INSTALL_DATA) ../emacs/clhs.el $(DESTDIR)$(elispdir)/clhs.el

#   $(INSTALL_DATA) ../emacs/clhs.el $(DESTDIR)$(elispdir)/clhs.el

のようにしてコメント。

$ ${gcc}/bin/make install
$ ${gcc}/bin/make clean

clispの起動確認

$ cd
$ ${clisp}/bin/clisp
  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+' /  I      8         8           8     8        8    8
   \  `-+-'  /       8         8           8      ooooo   8oooo
    `-__|__-'        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Welcome to GNU CLISP 2.49.93+ (2018-02-18) <http://clisp.org/>

Copyright (c) Bruno Haible, Michael Stoll 1992-1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2018

Type :h and hit Enter for context help.

[1]> (quit)
Bye.
$