X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=make-host-2.sh;h=303ec017c064d3ab52f074ba14e808a9b6b3f60b;hb=c8218514d751c4d777892b79bbf1ca6597f731c0;hp=bb6af7505cfef1a2c8515ab4b696d490afada720;hpb=4cf50b1896b25f5337e7c258b0b560da00d47993;p=sbcl.git diff --git a/make-host-2.sh b/make-host-2.sh index bb6af75..303ec01 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) @@ -58,10 +64,14 @@ $SBCL_XC_HOST <<-'EOF' || exit 1 (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) - ;; 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) + ;; 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) + ;; FIXME: *TOP-LEVEL-LAMBDA-MAX* should go away altogether. + (sb!c::*top-level-lambda-max* 1) ;; Let the target know that we're the cross-compiler. (*features* (cons :sb-xc *features*)) ;; We need to tweak the readtable.. @@ -90,61 +100,21 @@ $SBCL_XC_HOST <<-'EOF' || exit 1 ;; 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*) + (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*) + ;; 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, 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.) -# -# (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. 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) - (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 "src/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