From 70ea7795526d1ddc10da8999a0f0e46ef2612318 Mon Sep 17 00:00:00 2001 From: Andreas Fuchs Date: Wed, 28 Feb 2007 13:01:58 +0000 Subject: [PATCH] 1.0.3.4: make-target-2.lisp split into compile and dump phases. * Split make-target-2.lisp into make-target-2.lisp and make-target-2-load.lisp, reducing unnecessary state that was kept around. Not keeping symbols that were interned during the compilation of PCL saves us 400kB on x86 and between 1MB and 1.5MB on x86_86. * Unintern symbols that are internal to CL-USER before dumping the core. This doesn't save any space; just removes confusion. --- make-target-2-load.lisp | 63 +++++++++++++++++++++++++++++++++++++++++++++++ make-target-2.lisp | 43 ++------------------------------ make-target-2.sh | 6 ++++- src/cold/warm.lisp | 4 ++- version.lisp-expr | 2 +- 5 files changed, 74 insertions(+), 44 deletions(-) create mode 100644 make-target-2-load.lisp diff --git a/make-target-2-load.lisp b/make-target-2-load.lisp new file mode 100644 index 0000000..9d7dff6 --- /dev/null +++ b/make-target-2-load.lisp @@ -0,0 +1,63 @@ +;;; Now that we use the compiler for macros, interpreted /SHOW doesn't +;;; work until later in init. +#+sb-show (print "/hello, world!") + +;;; Until PRINT-OBJECT and other machinery is set up, we want limits +;;; on printing to avoid infinite output. (Don't forget to undo these +;;; tweaks after the printer is set up. It'd be cleaner to use LET to +;;; make sure that happens automatically, but LET is implemented in +;;; terms of the compiler, and the compiler isn't initialized yet.) +(setq *print-length* 10) +(setq *print-level* 5) +(setq *print-circle* t) + +;;; Do warm init without compiling files. +(defvar *compile-files-p* nil) +#+sb-show (print "/about to LOAD warm.lisp (with *compile-files-p* = NIL)") +(load "src/cold/warm.lisp") + +;;; Unintern no-longer-needed stuff before the possible PURIFY in +;;; SAVE-LISP-AND-DIE. +#-sb-fluid (sb-impl::!unintern-init-only-stuff) + +;;; Now that the whole system is built, we don't need to hobble the +;;; printer any more, so we can restore printer control variables to +;;; their ANSI defaults. +(setq *print-length* nil) +(setq *print-level* nil) +(setq *print-circle* nil) + +(sb-int:/show "done with warm.lisp, about to GC :FULL T") +(sb-ext:gc :full t) + +;;; resetting compilation policy to neutral values in preparation for +;;; SAVE-LISP-AND-DIE as final SBCL core (not in warm.lisp because +;;; SB-C::*POLICY* has file scope) +(sb-int:/show "setting compilation policy to neutral values") +(proclaim + '(optimize + (compilation-speed 1) (debug 1) (inhibit-warnings 1) + (safety 1) (space 1) (speed 1))) + +;;; Lock internal packages +#+sb-package-locks +(dolist (p (list-all-packages)) + (unless (member p (mapcar #'find-package '("KEYWORD" "CL-USER"))) + (sb-ext:lock-package p))) + +(sb-int:/show "done with warm.lisp, about to SAVE-LISP-AND-DIE") +;;; Even if /SHOW output was wanted during build, it's probably +;;; not wanted by default after build is complete. (And if it's +;;; wanted, it can easily be turned back on.) +#+sb-show (setf sb-int:*/show* nil) +;;; The system is complete now, all standard functions are +;;; defined. +(sb-kernel::ctype-of-cache-clear) +(setq sb-c::*flame-on-necessarily-undefined-function* t) + +;;; Clean up stray symbols from the CL-USER package. +(do-symbols (symbol "CL-USER") + (when (eq (symbol-package symbol) (find-package "CL-USER")) + (unintern symbol "CL-USER"))) + +(sb-ext:save-lisp-and-die "output/sbcl.core") diff --git a/make-target-2.lisp b/make-target-2.lisp index 9a82e37..634c37a 100644 --- a/make-target-2.lisp +++ b/make-target-2.lisp @@ -12,45 +12,6 @@ (setq *print-circle* t) ;;; Do warm init. -#+sb-show (print "/about to LOAD warm.lisp") +(defvar *compile-files-p* t) +#+sb-show (print "/about to LOAD warm.lisp (with *compile-files-p* = T)") (load "src/cold/warm.lisp") - -;;; Unintern no-longer-needed stuff before the possible PURIFY in -;;; SAVE-LISP-AND-DIE. -#-sb-fluid (sb-impl::!unintern-init-only-stuff) - -;;; Now that the whole system is built, we don't need to hobble the -;;; printer any more, so we can restore printer control variables to -;;; their ANSI defaults. -(setq *print-length* nil) -(setq *print-level* nil) -(setq *print-circle* nil) - -(sb-int:/show "done with warm.lisp, about to GC :FULL T") -(gc :full t) - -;;; resetting compilation policy to neutral values in preparation for -;;; SAVE-LISP-AND-DIE as final SBCL core (not in warm.lisp because -;;; SB-C::*POLICY* has file scope) -(sb-int:/show "setting compilation policy to neutral values") -(proclaim - '(optimize - (compilation-speed 1) (debug 1) (inhibit-warnings 1) - (safety 1) (space 1) (speed 1))) - -;;; Lock internal packages -#+sb-package-locks -(dolist (p (list-all-packages)) - (unless (member p (mapcar #'find-package '(:keyword :cl-user))) - (lock-package p))) - -(sb-int:/show "done with warm.lisp, about to SAVE-LISP-AND-DIE") -;;; Even if /SHOW output was wanted during build, it's probably -;;; not wanted by default after build is complete. (And if it's -;;; wanted, it can easily be turned back on.) -#+sb-show (setf sb-int:*/show* nil) -;;; The system is complete now, all standard functions are -;;; defined. -(sb-kernel::ctype-of-cache-clear) -(setq sb-c::*flame-on-necessarily-undefined-function* t) -(sb-ext:save-lisp-and-die "output/sbcl.core") diff --git a/make-target-2.sh b/make-target-2.sh index 803c44e..48b7a1a 100644 --- a/make-target-2.sh +++ b/make-target-2.sh @@ -29,7 +29,11 @@ export LANG LC_ALL # system with the :SB-SHOW feature enabled, it does it rather silently, # without trying to tell you about what it's doing. So unless it hangs # for much longer than that, don't worry, it's likely to be normal. -echo //doing warm init +echo //doing warm init - compilation phase ./src/runtime/sbcl \ --core output/cold-sbcl.core \ --no-sysinit --no-userinit < make-target-2.lisp +echo //doing warm init - load and dump phase +./src/runtime/sbcl \ +--core output/cold-sbcl.core \ +--no-sysinit --no-userinit < make-target-2-load.lisp diff --git a/src/cold/warm.lisp b/src/cold/warm.lisp index 4f0b476..475377d 100644 --- a/src/cold/warm.lisp +++ b/src/cold/warm.lisp @@ -193,7 +193,9 @@ (tagbody retry-compile-file (multiple-value-bind (output-truename warnings-p failure-p) - (compile-file fullname) + (if *compile-files-p* + (compile-file fullname) + (compile-file-pathname fullname)) (declare (ignore warnings-p)) (sb-int:/show "done compiling" fullname) (cond ((not output-truename) diff --git a/version.lisp-expr b/version.lisp-expr index 0cea3f8..a300f9c 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.3.3" +"1.0.3.4" -- 1.7.10.4