#!/bin/sh
+set -e
# a quick and dirty way of partially rebuilding the system after a
# change
# This script is not a reliable way to build the system, but it is
# fast.:-| It can be useful if you are trying to debug a low-level
# problem, e.g. a problem in src/runtime/*.c or in
-# src/code/cold-init.lisp. Soon, you'll find yourself wanting to
+# src/code/cold-init.lisp. Soon, you'll find yourself wanting to
# test a small change in a file compiled into cold-sbcl.core without
# redoing the entire rebuild-the-system-from-scratch process. You may be
# able to avoid a complete make-host-2.sh by just letting this script
# file
# Mostly it looks as though such limitations aren't fixable without
# the aforementioned rearchitecting or solving the halting problem.
+#
+# To make this work, you need an after-xc.core file. To cause the
+# system to generate an after-xc.core file, you need
+# :SB-AFTER-XC-CORE in target features during an ordinary build.
+# See the comments in base-target-features.lisp-expr for the
+# recommended way to make that happen.
#######################################################################
-if [ "" != "$*" ]; then
- echo no command line arguments supported in this version of slam
- exit 1
-fi
+HOST_TYPE="${1:-sbcl}"
+
+echo //HOST_TYPE=\"$HOST_TYPE\"
# We don't try to be general about this in this script the way we are
# in make.sh, since the idiosyncrasies of SBCL command line argument
# and the SBCL-vs-CMUCL dependence of --core/-core argument syntax
# make it too messy to try deal with arbitrary SBCL_XC_HOST variants.
# So you have no choice:
-export SBCL_XC_HOST='sbcl --disable-debugger'
+case "$HOST_TYPE" in
+ cmucl) LISP="lisp -batch"
+ INIT="-noinit"
+ CORE="-core"
+ ;;
+ sbcl) LISP="${XC_LISP:-sbcl}"
+ INIT="--no-sysinit --no-userinit"
+ CORE="--core"
+ ;;
+ clisp) LISP="clisp"
+ INIT="-norc"
+ CORE="-M"
+ ;;
+ openmcl)
+ LISP="openmcl"
+ INIT="-b"
+ CORE="-I"
+ ;;
+ *) echo unknown host type: "$HOST_TYPE"
+ echo should be one of "sbcl", "cmucl", or "clisp"
+ exit 1
+esac
+
+SBCL_XC_HOST="$LISP ${XC_CORE:+$CORE $XC_CORE} $INIT"
+export SBCL_XC_HOST
# (We don't do make-host-1.sh at all. Hopefully nothing relevant has
# changed.)
-sh make-target-1.sh || exit 1
+. ./find-gnumake.sh
+find_gnumake
+
+sh make-target-1.sh
# Instead of doing the full make-host-2.sh, we (1) use after-xc.core
# to rebuild only obviously-out-of-date Lisp files, then (2) run
# GENESIS.
-sbcl --core output/after-xc.core --sysinit /dev/null --userinit /dev/null <<'EOF' || exit 1
+$LISP $CORE output/after-xc.core $INIT <<'EOF'
(load "src/cold/slam.lisp")
EOF
# (This ^ used to be
# rebuild-this-stem requests on the command line to supplement
# the rebuild-obviously-outdated-stems logic above.)
#
-sh make-genesis-2.sh || exit 1
+sh make-genesis-2.sh
-sh make-target-2.sh || exit 1
+sh make-target-2.sh
echo //ordinary termination of slam.sh
date