1.0.3.4: make-target-2.lisp split into compile and dump phases.
authorAndreas Fuchs <asf@boinkor.net>
Wed, 28 Feb 2007 13:01:58 +0000 (13:01 +0000)
committerAndreas Fuchs <asf@boinkor.net>
Wed, 28 Feb 2007 13:01:58 +0000 (13:01 +0000)
* 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 [new file with mode: 0644]
make-target-2.lisp
make-target-2.sh
src/cold/warm.lisp
version.lisp-expr

diff --git a/make-target-2-load.lisp b/make-target-2-load.lisp
new file mode 100644 (file)
index 0000000..9d7dff6
--- /dev/null
@@ -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")
index 9a82e37..634c37a 100644 (file)
 (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")
index 803c44e..48b7a1a 100644 (file)
@@ -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
index 4f0b476..475377d 100644 (file)
       (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)
index 0cea3f8..a300f9c 100644 (file)
@@ -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"