;; Now that we use the compiler for macros, interpreted
;; /SHOW doesn't work until later in init.
#+sb-show (print "/hello, world!")
+ (sb!ext:purify)
;; Until PRINT-OBJECT and other machinery is set up,
;; we want limits on printing to avoid infinite output.
;; initialized yet.)
(setq *print-length* 10)
(setq *print-level* 5)
+ (setq *print-circle* t)
;; Do warm init.
#+sb-show (print "/about to LOAD warm.lisp")
;; control variables to their ANSI defaults.
(setq *print-length* nil)
(setq *print-level* nil)
+ (setq *print-circle* nil)
;; FIXME: Why is it that, at least on x86 sbcl-0.6.12.46,
;; GC :FULL T isn't nearly as effective as PURIFY here?
;; (GC :FULL T gets us down to about 38 Mbytes, but PURIFY
;; gets us down to about 19 Mbytes.)
- (let ((*gc-notify-stream* *standard-output*))
- (sb-int:/show "done with warm.lisp, about to GC :FULL T")
- (gc :full t))
+ (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.
+ (setq sb-c::*flame-on-necessarily-undefined-function* t)
(sb-ext:save-lisp-and-die "output/sbcl.core" :purify t)
EOF