Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

130 lines (116 sloc) 5.035 kb
#!/bin/sh
set -e
# a quick and dirty way of partially rebuilding the system after a
# change
#
# ("smooth duct tape: the mark of a true craftsman":-)
# This software is part of the SBCL system. See the README file for
# more information.
#
# This software is derived from the CMU CL system, which was
# written at Carnegie Mellon University and released into the
# public domain. The software is in the public domain and is
# provided with absolutely no warranty. See the COPYING and CREDITS
# files for more information.
#######################################################################
# 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
# order dependence, the meaninglessness of duplicate --core arguments,
# 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:
case "$HOST_TYPE" in
cmucl) LISP="lisp -batch"
INIT="-noinit"
CORE="-core"
;;
sbcl) LISP="sbcl"
INIT="--sysinit version.lisp-expr --userinit version.lisp-expr"
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 $INIT"
export SBCL_XC_HOST
# (We don't do make-host-1.sh at all. Hopefully nothing relevant has
# changed.)
. ./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.
$LISP $CORE output/after-xc.core $INIT <<'EOF'
(load "src/cold/slam.lisp")
EOF
# (This ^ used to be
# for f in $*; do echo "(target-compile-stem \"$f\")"; done \
# | sbcl --core output/after-xc.core || exit 1
# and perhaps we do something like this again, allowing explicit
# rebuild-this-stem requests on the command line to supplement
# the rebuild-obviously-outdated-stems logic above.)
#
sh make-genesis-2.sh
sh make-target-2.sh
echo //ordinary termination of slam.sh
date
Jump to Line
Something went wrong with that request. Please try again.