Skip to content
Browse files

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.
  • Loading branch information...
1 parent 6ab944d commit 70ea7795526d1ddc10da8999a0f0e46ef2612318 @antifuchs antifuchs committed
Showing with 74 additions and 44 deletions.
  1. +63 −0 make-target-2-load.lisp
  2. +2 −41 make-target-2.lisp
  3. +5 −1 make-target-2.sh
  4. +3 −1 src/cold/warm.lisp
  5. +1 −1 version.lisp-expr
View
63 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")
View
43 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")
View
6 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
View
4 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)
View
2 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"

0 comments on commit 70ea779

Please sign in to comment.
Something went wrong with that request. Please try again.