"Call FN with everything set up appropriately for cross-compiling
a target file."
(let (;; Life is simpler at genesis/cold-load time if we
- ;; needn't worry about byte-compiled code.
- (sb!ext:*byte-compile-top-level* nil)
- ;; Let the target know that we're the cross-compiler.
- (*features* (cons :sb-xc *features*))
- ;; We need to tweak the readtable..
- (*readtable* (copy-readtable))
+ ;; needn't worry about byte-compiled code.
+ (sb!ext:*byte-compile-top-level* nil)
;; In order to reduce peak memory usage during GENESIS,
;; it helps to stuff several toplevel forms together
- ;; into the same function.
- (sb!c::*top-level-lambda-max* 10))
+ ;; into the same function.
+ (sb!c::*top-level-lambda-max* 10)
+ ;; Let the target know that we're the cross-compiler.
+ (*features* (cons :sb-xc *features*))
+ ;; We need to tweak the readtable..
+ (*readtable* (copy-readtable)))
;; ..in order to make backquotes expand into target code
;; instead of host code.
;; FIXME: Isn't this now taken care of automatically by
(ensure-directories-exist filename :verbose t)
(with-open-file (s filename :direction :output)
(write *target-object-file-names* :stream s :readably t)))
+ ;; Let's check that the type system was reasonably sane. (It's
+ ;; easy to spend a long time wandering around confused trying
+ ;; to debug cold init if it wasn't.)
+ (when (find :sb-test *shebang-features*)
+ (load "tests/type.after-xc.lisp"))
;; If you're experimenting with the system under a
;; cross-compilation host which supports CMU-CL-style SAVE-LISP,
- ;; this can be a good time to run it,
- ;; The resulting core isn't used in the normal build, but
- ;; can be handy for experimenting with the system.
+ ;; this can be a good time to run it. The resulting core isn't
+ ;; used in the normal build, but can be handy for experimenting
+ ;; with the system.
(when (find :sb-show *shebang-features*)
#+cmu (ext:save-lisp "output/after-xc.core" :load-init-file nil)
#+sbcl (sb-ext:save-lisp-and-die "output/after-xc.core"))
#
# In a fresh host Lisp invocation, load the cross-compiler (in order
# to get various definitions that GENESIS needs, not in order to
-# cross-compile GENESIS, compile and load GENESIS, then run GENESIS.
-# (We use a fresh host Lisp invocation here for basically the same
-# reasons we did before when loading and running the cross-compiler.)
+# cross-compile GENESIS, then load and run GENESIS. (We use a fresh
+# host Lisp invocation here for basically the same reasons we did
+# before when loading and running the cross-compiler.)
#
-# (This second invocation of GENESIS is done because in order to
+# (Why do we need this second invocation of GENESIS? In order to
# create a .core file, as opposed to just a .h file, GENESIS needs
-# symbol table data on the C runtime, which we can get only after the
-# C runtime has been built.)
+# symbol table data on the C runtime. And we can get that symbol
+# data only after the C runtime has been built. Therefore, even
+# though we ran GENESIS earlier, we couldn't get it to make a .core
+# file at that time; but we needed to run it earlier in order to
+# get to where we can write a .core file.)
echo //loading and running GENESIS to create cold-sbcl.core
$SBCL_XC_HOST <<-'EOF' || exit 1
(setf *print-level* 5 *print-length* 5)