Fix make-array transforms.
[sbcl.git] / slam.sh
diff --git a/slam.sh b/slam.sh
index c7d245e..202c8aa 100644 (file)
--- a/slam.sh
+++ b/slam.sh
@@ -1,20 +1,10 @@
 #!/bin/sh
-
-# ("smooth duct tape: the mark of a true craftsman":-)
+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, and you find yourself wanting to make a
-# small change and test it without going through the entire
-# build-the-system-from-scratch cycle.
-#
-# You probably don't want to be using this script unless you
-# understand the system build process well enough to be able to guess
-# when it won't work.
+# ("smooth duct tape: the mark of a true craftsman":-)
 
 # This software is part of the SBCL system. See the README file for
 # more information.
 # provided with absolutely no warranty. See the COPYING and CREDITS
 # files for more information.
 
-if [ "" != "$*" ]; then
-    echo no command line arguments supported in this version of slam
-    exit 1
-fi
+#######################################################################
+# You probably don't want to be using this script unless you
+# understand the ordinary system build process pretty well already.
+#
+# 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
+# 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
+# rebuild only files that have changed. On the other hand, it might
+# not work...
+#
+# It's not anywhere rigorously correct for all small changes, much
+# less for all large changes. It can't be, unless we either solve the
+# halting problem or totally rearchitect the SBCL sources to support
+# incremental recompilation. Beyond that fundamental limitation, even
+# an easy special case might not work unless someone's paid attention
+# to making it work. Here are some highlights to help you understand
+# when it will work:
+#  * It will rebuild a .fasl file when the corresponding
+#    .lisp file is out of date.
+#  * It rebuilds the src/runtime/ files completely, since that
+#    doesn't take very long anyway.
+#  * Apparently it will not rebuild assembly-code-in-.lisp files
+#    even when the sources are out of date. This is probably not a
+#    fundamental limitation, it's just that I (WHN 2002-01-16)
+#    have made vanishingly nontrivial changes to assembler files,
+#    so I'm not motivated. If you're motivated, please send a patch.
+#  * It will not notice when you change something in one .lisp file
+#    which should affect the compilation of code in another .lisp
+#    file. E.g.
+#    ** changing the definition of a macro used in another file (or a
+#       function or a variable which is used at macroexpansion time)
+#    ** changing the value of a DEFCONSTANT used in another file
+#    ** changing the layout of a structure used in another file
+#    ** changing the PROCLAIMed type of something used in another
+#       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.
+#######################################################################
+
+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
@@ -36,17 +74,44 @@ fi
 # 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 --noprogrammer'
+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
@@ -56,8 +121,9 @@ EOF
 # 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
+echo //ordinary termination of slam.sh
+date