[19cda1]: slam.sh Maximize Restore History

Download this file

slam.sh    130 lines (116 with data), 5.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/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="${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.)
. ./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