Chez Phase 3 inc9a: self-contained Chez bootstrap (no Janet in the loop)
Makes the inc8 fixpoint the actual build. host/chez/bootstrap.ss loads a seed
(prelude, image) pair and rebuilds the clojure.core prelude + compiler image from
source via the on-Chez compiler — read/analyze/emit all on Chez, zero Janet.
The seed (host/chez/seed/{prelude,image}.ss) is the checked-in bootstrap
compiler, minted once via the fixpoint (driver/mint-chez-seed* iterates
bootstrap.ss from the Janet-emitted pair to a joint byte-fixpoint). It's a joint
fixpoint: rebuilding from an up-to-date seed reproduces it exactly. So a fresh
checkout + Chez (no Janet) yields a working jolt.
test/chez/bootstrap-test.janet spawns only chez, asserts the rebuilt artifacts
match the seed byte-for-byte and compile+run real cases. Drift (seed sources
changed) fails the test with a re-mint pointer; host/chez/seed/README documents
re-minting.
This commit is contained in:
parent
81e587b2d7
commit
2c74476aed
6 changed files with 1490 additions and 0 deletions
42
host/chez/bootstrap.ss
Normal file
42
host/chez/bootstrap.ss
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
;; bootstrap.ss (jolt-9phg, Phase 3 inc9a) — the pure-Chez self-build.
|
||||
;;
|
||||
;; This is the zero-Janet build step. Given a SEED (prelude, image) pair — the
|
||||
;; bootstrap compiler, minted once via the inc8 fixpoint and checked in under
|
||||
;; host/chez/seed/ — it loads them, then rebuilds the clojure.core prelude AND the
|
||||
;; compiler image from the .clj/.ss sources using the ON-CHEZ compiler (emit-image.ss),
|
||||
;; writing fresh artifacts. No Janet is invoked: read -> analyze -> emit all run on
|
||||
;; Chez. The seed is a JOINT fixpoint, so a rebuild from an up-to-date seed
|
||||
;; reproduces it byte-for-byte (test/chez/bootstrap-test.janet checks this); when
|
||||
;; the sources change, run it twice to reconverge and re-mint the seed.
|
||||
;;
|
||||
;; Run from the repo root:
|
||||
;; chez --script host/chez/bootstrap.ss SEED-PRELUDE SEED-IMAGE OUT-PRELUDE OUT-IMAGE
|
||||
(import (chezscheme))
|
||||
|
||||
(define bs-args (cdr (command-line))) ; drop the script name
|
||||
(when (< (length bs-args) 4)
|
||||
(display "usage: bootstrap.ss SEED-PRELUDE SEED-IMAGE OUT-PRELUDE OUT-IMAGE\n")
|
||||
(exit 2))
|
||||
(define bs-seed-prelude (list-ref bs-args 0))
|
||||
(define bs-seed-image (list-ref bs-args 1))
|
||||
(define bs-out-prelude (list-ref bs-args 2))
|
||||
(define bs-out-image (list-ref bs-args 3))
|
||||
|
||||
;; Load the runtime + the SEED compiler (prelude for macros, image for the
|
||||
;; analyzer/emitter), exactly as the zero-Janet spine assembles a program.
|
||||
(load "host/chez/rt.ss")
|
||||
(set-chez-ns! "clojure.core")
|
||||
(load bs-seed-prelude)
|
||||
(load "host/chez/post-prelude.ss")
|
||||
(set-chez-ns! "user")
|
||||
(load "host/chez/host-contract.ss")
|
||||
(load bs-seed-image)
|
||||
(load "host/chez/compile-eval.ss")
|
||||
(load "host/chez/emit-image.ss")
|
||||
|
||||
;; Rebuild both artifacts from source ON CHEZ and write them out.
|
||||
(let ((p (open-output-file bs-out-prelude 'replace)))
|
||||
(put-string p (jolt-emit-prelude)) (close-port p))
|
||||
(let ((p (open-output-file bs-out-image 'replace)))
|
||||
(put-string p (jolt-emit-image)) (close-port p))
|
||||
(display "bootstrap: rebuilt prelude + compiler image on Chez (no Janet)\n")
|
||||
Loading…
Add table
Add a link
Reference in a new issue