This guide explains how to make your own local builds of various Scheme implementations. That’s useful if you want to:
-
use pre-release versions to get the very latest features
-
use custom build options
-
use an operating system that does not have a ready-to-run package of the Scheme you want
On Unix-like operating systems, programs intended for all users are
usually installed into /usr
or /usr/local
.
For your own personal use, an emerging convention is to install into
~/.local
, i.e. a directory named .local
under your home directory.
This guide adopts that convention.
Most Schemes have a prefix option in their build system that can be
used to set the installation prefix to any directory you like. Hence,
if you want something different than ~/.local
, just change the
prefix.
Implementation language: |
C interpreter and OS interface, Scheme libraries |
Version control: |
Git |
Build system: |
GNU make |
Full build with bootstrap: |
2 minutes |
Documentation: |
|
git clone https://github.com/ashinn/chibi-scheme.git cd chibi-scheme make PREFIX=$HOME/.local make install PREFIX=$HOME/.local
To run installed chibi you need to setup $CHIBI_MODULE_PATH
(running
uninstalled does not need this because chibi can detect in that case).
export CHIBI_MODULE_PATH=$HOME/.local/share/chibi:$HOME/.local/lib/chibi
You may need to adjust $LD_LIBRARY_PATH
as well because chibi-scheme
binary does not have a default path for libchibi-scheme.so (you should
see "error while loading shared libraries" if it’s the case)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/.local/lib
Chibi requires GNU make
. On BSD systems, use gmake
in place of
make
.
When you first run make
it creates the file
include/chibi/install.h
. The constant sexp_default_module_path
in
that file is seeded from the PREFIX
you gave to make
. If you later
run make
with a different PREFIX
that .h
file will not be
regenerated and will have a stale library path. Even make clean
won’t get rid of it. The solution is make cleaner
.
Implementation language: |
Scheme, some C |
Version control: |
Git |
Build system: |
GNU make |
Full build with bootstrap: |
7 minutes |
Documentation: |
|
The CHICKEN project occasionally publishes prerelease development snapshots which you can use to bootstrap from when you want to build from Git.
These snapshots require just a C compiler and specifically GNU make.
If you are on a system where make
refers to BSD make, use gmake
or
gnumake
instead of make
in the command below.
To make things easy, there’s a script in the git repository which will perform the bootstrapping for you:
git clone git://code.call-cc.org/chicken-core PLATFORM=linux ./scripts/bootstrap.sh
When the bootstrap script is done, it prints instructions on what to do next:
Now, build chicken by passing "CHICKEN=./chicken-boot" to make, in addition to PREFIX, PLATFORM, and other parameters.
Let’s do just that:
make PLATFORM=linux CHICKEN=./chicken-boot PREFIX=$HOME/.local install
Implementation language: |
TBD |
Version control: |
Git |
Build system: |
make |
Full build with bootstrap: |
TBD |
Documentation: |
TBD |
Cyclone requires an installed version to bootstrap. If you haven’t had
any, get it from cyclone-bootstrap
repository
git clone https://github.com/justinethier/cyclone-bootstrap.git cd cyclone-boostrap make PREFIX=$HOME/.local make PREFIX=$HOME/.local install
Now you can build latest cyclone version, the steps are exactly the same:
git clone https://github.com/justinethier/cyclone.git cd cyclone make PREFIX=$HOME/.local make PREFIX=$HOME/.local install
Implementation language: |
Scheme, with C for system interface |
Version control: |
Git |
Build system: |
GNU autotools & make |
Full build with bootstrap: |
30 minutes |
Gambit requires a pre-built version of its gsc
compiler in order to
bootstrap itself. gsc
is written in Scheme, then transpiled into C
which is compiled into native executables using the system C compiler.
The C files are committed into Gambit’s Git repository so that a
builder does not necessarily need to obtain a binary executable of
gsc
to build Gambit on a new computer. It’s enough to obtain the
Gambit Git repository and a C compiler.
The bootstrap compiler is an executable at the root of its source
directory by the name gsc-boot
. If gsc-boot
does not exist, make
tries to find a suitable compiler in the history of the local git
clone. For this reason, a shallow clone (git clone --depth 1
) of
Gambit generally does not work.
The usual way to get Gambit going on a new machine is to first install the latest release version, then use that to bootstrap the latest git master.
git clone https://github.com/gambit/gambit.git cd gambit ./configure --prefix=$HOME/.local make make modules make install
make -j
can significantly speed up Gambit builds if you have a fast
multi-core CPU and lots of RAM.
./configure --enable-single-host
generates a version of Gambit on
which a good C compiler is able to do whole-program optimization. The
resulting Gambit binaries can be significantly faster for
performance-sensitive software. However, building Gambit this way
takes a lot longer and requires more than a gigabyte of RAM.
For pedestrian Scheme code there is little to no perceptible speed difference, so a non-single-host build is fine. Even a non-single-host Gambit is easily one of the fastest Scheme implementations available.
Pre-packaged binaries of Gambit are generally single-host builds.
GNU’s gcc
compiler builds Gambit significantly faster than LLVM’s
clang
compiler. Once Gambit has been built, there can be also
substantial speed difference (about 2x in some cases) between the
resulting executables.
On some operating systems, notably MacOS, the gcc
command actually
runs clang
(whose command-line interface is largely compatible with
GNU gcc
). You can check this with gcc --version
: the output should
say LLVM
if it’s actually clang.
On MacOS, you can install the real GNU GCC from Homebrew with:
brew install gcc
Homebrew installs GCC as gcc-9
(where 9
is GCC’s major version
number). You can find the precise command name with:
brew list gcc | grep -E '/bin/gcc-[0-9]+$' | xargs basename
You can set the compiler used to build Gambit like so:
./configure CC=gcc-9
Sometimes big changes are made to Gambit which break your build,
causing compiler errors (or in rare cases, a crashing gsc
or gsi
executable). In that case, try deleting the boot
directory and the
gsc-boot
executable within Gambit’s source directory (rm -rf boot/
gsc-boot
). That forces make
to do a full bootstrap. Beware that
this can take 30 minutes or more.
Implementation language: |
C and Scheme |
Version control: |
Git |
Build system: |
GNU autotools & make |
Full build with bootstrap: |
5 minutes |
Documentation: |
HACKING.adoc |
Gauche requires the latest released version installed before you can
build from Git repository. Follow the documentation link below to get
the tarball and install. Remember to add --prefix
when you
configure:
# Browse http://practical-scheme.net/gauche/download.html tar -xf Gauche-0.9.9.tgz cd Gauche-0.9.9 ./configure --prefix=$HOME/.local make make install
After this, make sure "gosh" is available. If not adjust $PATH
for
the current shell:
export PATH=$PATH:$HOME/.local/bin
Now you can build from Git, the steps are almost identical as before,
except the new step ./DIST gen
.
git clone https://github.com/shirok/Gauche.git gauche cd gauche ./DIST gen ./configure --prefix=$HOME/.local make make install
Implementation language: |
TBD |
Version control: |
Git |
Build system: |
Scheme |
Full build with bootstrap: |
TBD |
Documentation: |
doc/guide/README.md and .travis.yml |
Gerbil requires latest(?) Gambit Scheme installed. See above for more instructions. After that the build instructions are quite simple.
git clone https://github.com/vyzo/gerbil.git cd gerbil/src ./build.sh stage0 ./build.sh stage1 final ./build.sh stdlib ./build.sh lang ./build.sh tools
Note that because parallel builds are not supported and build.sh simply rebuilds everything. If you make changes in one part, stdlib for instance, just run build.sh for that part only. Otherwise it make take a long time.
Note sure about installation. Gerbil documents seem to encourage
running directly from source. The binaries are bin/gxi
and
bin/gxc
.
Implementation language: |
Scheme |
Version control: |
Git |
Build system: |
Scheme and gcc |
Full build without bootstrap: |
3 minutes |
Documentation: |
doc/HOWTO-BUILD and doc/HOWTO-INSTALL |
To build Larceny you need a Scheme system that can host Larceny. The easiest option is the prebuilt Larceny from http://www.larcenists.org/download.html if you don’t have Larceny installed.
The below build instructions are for linux on x86, taken from doc/HOWTO-BUILD. See that document for more details. The instructions are made for copy-pasting (or even put in a script and just run)
tar -xf larceny-1.3-bin-native-ia32-linux86.tar.gz git clone https://github.com/larcenists/larceny.git cd larceny ../larceny-1.3-bin-native-ia32-linux86/larceny <<EOF (load "setup.sch") (setup 'scheme: 'larceny 'host: 'linux86 'sassy) (build-config-files) (load-compiler) (build-heap) (build-runtime) (build-executable) (build-larceny-files) (build-twobit) (exit) EOF ./larceny.bin -stopcopy -- src/Build/iasn-larceny-heap.fasl <<EOF (exit) EOF ./larceny.bin -stopcopy -- src/Build/iasn-twobit-heap.fasl <<EOF (exit) EOF # At this point, you can delete the prebuilt binaries cp larceny twobit ./larceny <<EOF (require 'r7rsmode) (larceny:compile-r7rs-runtime) (exit) EOF
At this point you can just use larceny directly without installing
(e.g. adjust $PATH
to search for larceny script). See
doc/HOWTO-INSTALL if you really want to install it.
Implementation language: |
C and Scheme |
Version control: |
Git |
Build system: |
cmake & make |
Full build with bootstrap: |
TBD |
Documentation: |
README.md and HACKING |
Sagittarius requires the latest released version installed before you can build from Git repository. Follow the documentation link below to get the tarball and install. Remember to add prefix when you run cmake:
tar -xf sagittarius-0.9.5.tar.gz cd sagittarius-0.9.5 cmake -DCMAKE_INSTALL_PREFIX:PATH=$HOME/.local . make make install
Now you can build from Git, the steps are almost identical as before
except the new step ./dist.sh gen
:
git clone https://bitbucket.org/ktakashi/sagittarius-scheme.git cd sagittarius-scheme ./dist.sh gen cmake -DCMAKE_INSTALL_PREFIX:PATH=$HOME/.local . make make install
Implementation language: |
C and Scheme |
Version control: |
Git |
Build system: |
GNU autotools & make |
Full build with bootstrap: |
5 minutes |
Documentation: |
|
git clone https://github.com/egallesio/STklos.git stklos cd stklos ./configure --prefix=$HOME/.local make make install