X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=make-host-2.sh;h=25be3482d5d53b0396918c51a37a04fe1ea7b3c0;hb=8dc064d2296902f01afd9107e89a81146e3771fe;hp=9100dfe887ec0f3afa6101a50934339e809c2eaf;hpb=a530bbe337109d898d5b4a001fc8f1afa3b5dc39;p=sbcl.git diff --git a/make-host-2.sh b/make-host-2.sh index 9100dfe..25be348 100644 --- a/make-host-2.sh +++ b/make-host-2.sh @@ -15,6 +15,12 @@ echo //entering make-host-2.sh +# In some cases, a debugging build of the system will creates a core +# file output/after-xc.core in the next step. In cases where it +# doesn't, it's confusing and basically useless to have any old copies +# lying around, so delete: +rm -f output/after-xc.core + # In a fresh host Lisp invocation, load and run the cross-compiler to # create the target object files describing the target SBCL. # @@ -44,7 +50,7 @@ $SBCL_XC_HOST <<-'EOF' || exit 1 (load "src/cold/defun-load-or-cload-xcompiler.lisp") (load-or-cload-xcompiler #'host-load-stem) (defun proclaim-target-optimization () - (let ((debug (if (find :sb-show *shebang-features*) 2 1))) + (let ((debug (if (position :sb-show *shebang-features*) 2 1))) (sb-xc:proclaim `(optimize (compilation-speed 1) (debug ,debug) (sb!ext:inhibit-warnings 2) @@ -56,16 +62,25 @@ $SBCL_XC_HOST <<-'EOF' || exit 1 "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 increase microefficiency of the target Lisp, + ;; enable old CMU CL defined-function-types-never-change + ;; optimizations. (ANSI says users aren't supposed to + ;; redefine our functions anyway; and developers can + ;; fend for themselves.) + #!-sb-fluid (sb!ext:*derive-function-types* t) ;; 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. (This can't be the compiler + ;; default in general since it's non-ANSI in the case + ;; of e.g. some package-side-effecting forms, but it's + ;; safe in all the code we cross-compile.) + (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 @@ -87,56 +102,24 @@ $SBCL_XC_HOST <<-'EOF' || exit 1 (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 (position :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. - (when (find :sb-show *shebang-features*) + ;; 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. (See slam.sh for an example.) + (when (position :sb-after-xc-core *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")) - EOF - -# Run GENESIS again in order to create cold-sbcl.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.) -# -# (This second invocation of GENESIS is done because 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.) -echo //loading and running GENESIS to create cold-sbcl.core -$SBCL_XC_HOST <<-'EOF' || exit 1 - (setf *print-level* 5 *print-length* 5) - (load "src/cold/shared.lisp") - (in-package "SB-COLD") - (setf *host-obj-prefix* "obj/from-host/" - *target-obj-prefix* "obj/from-xc/") - (load "src/cold/set-up-cold-packages.lisp") - (load "src/cold/defun-load-or-cload-xcompiler.lisp") - (load-or-cload-xcompiler #'host-load-stem) - (defparameter *target-object-file-names* - (with-open-file (s "output/object-filenames-for-genesis.lisp-expr" - :direction :input) - (read s))) - (host-load-stem "compiler/generic/genesis") - (sb!vm:genesis :object-file-names *target-object-file-names* - :c-header-file-name "output/sbcl2.h" - :symbol-table-file-name "src/runtime/sbcl.nm" - :core-file-name "output/cold-sbcl.core" - ;; The map file is not needed by the system, but can - ;; be very handy when debugging cold init problems. - :map-file-name "output/cold-sbcl.map") + #+sbcl (sb-ext:save-lisp-and-die "output/after-xc.core") + ) EOF -echo //testing for consistency of first and second GENESIS passes -if cmp src/runtime/sbcl.h output/sbcl2.h; then - echo //sbcl2.h matches sbcl.h -- good. -else - echo error: sbcl2.h does not match sbcl.h. - exit 1 -fi +# Run GENESIS (again) in order to create cold-sbcl.core. (The first +# time was before we ran the cross-compiler, in order to create the +# header file which was needed in order to run gcc on the runtime +# code.) +sh make-genesis-2.sh