ikarus/src/makefile.ss

338 lines
12 KiB
Scheme
Raw Normal View History

#!/usr/bin/env ikarus -b ikarus.boot --script
2006-11-23 19:44:29 -05:00
2006-11-23 19:48:14 -05:00
;;; 9.1: * starting with libnumerics
;;; 9.0: * graph marks for both reader and writer
;;; * circularity detection during read
;;; 8.1: * using chez-style io ports
2006-11-23 19:44:29 -05:00
;;; 6.9: * creating a *system* environment
;;; 6.8: * creating a core-primitive form in the expander
;;; 6.2: * side-effects now modify the dirty-vector
;;; * added bwp-object?
;;; * added pointer-value
;;; * added tcbuckets
;;; 6.1: * added case-lambda, dropped lambda
;;; 6.0: * basic compiler
(define macros
'(|#primitive| lambda case-lambda set! quote begin define if letrec
foreign-call ;$apply
2006-11-23 19:44:29 -05:00
quasiquote unquote unquote-splicing
define-syntax identifier-syntax let-syntax letrec-syntax
fluid-let-syntax alias meta eval-when with-implicit with-syntax
type-descriptor
syntax-case syntax-rules module $module import $import import-only
syntax quasisyntax unsyntax unsyntax-splicing datum
let let* let-values cond case define-record or and when unless do
include parameterize trace untrace trace-lambda trace-define
rec library
time))
2006-11-23 19:44:29 -05:00
(define public-primitives
2006-12-05 19:18:36 -05:00
'(
null? pair? char? fixnum? bignum? symbol? gensym? string? vector? list?
2006-12-05 19:18:36 -05:00
boolean? procedure? not eof-object eof-object? bwp-object?
void fx= fx< fx<= fx> fx>= fxzero? fx+ fx- fx* fxadd1 fxsub1
fxquotient fxremainder fxmodulo fxsll fxsra fxlognot fxlogor
fxlogand fxlogxor integer->char char->integer char=? char<?
char<=? char>? char>=? cons car cdr set-car! set-cdr! caar
cadr cdar cddr caaar caadr cadar caddr cdaar cdadr cddar cdddr
caaaar caaadr caadar caaddr cadaar cadadr caddar cadddr cdaaar
cdaadr cdadar cdaddr cddaar cddadr cdddar cddddr list list*
make-list length list-ref append make-vector vector-ref
vector-set! vector-length vector vector->list list->vector
make-string string-ref string-set! string-length string
string->list list->string uuid string-append substring string=?
string<? string<=? string>? string>=? remprop putprop getprop
property-list $$apply apply map for-each andmap ormap memq memv assq
assv assoc eq? eqv? equal? reverse string->symbol symbol->string
top-level-value set-top-level-value! top-level-bound?
gensym gensym-count gensym-prefix print-gensym
2006-12-05 19:18:36 -05:00
gensym->unique-string call-with-values values make-parameter
2007-01-22 21:07:20 -05:00
dynamic-wind display write print-graph fasl-write printf fprintf format
2007-01-31 19:07:28 -05:00
print-error read-token read comment-handler error warning exit call/cc
error-handler eval current-eval compile alt-compile compile-file
alt-compile-file
2006-12-05 19:18:36 -05:00
new-cafe load system expand sc-expand current-expand expand-mode
environment? interaction-environment identifier?
free-identifier=? bound-identifier=? literal-identifier=?
2006-11-23 19:44:29 -05:00
datum->syntax-object syntax-object->datum syntax-error
2006-12-05 19:18:36 -05:00
syntax->list generate-temporaries record? record-set! record-ref
record-length record-type-descriptor make-record-type
2006-11-23 19:44:29 -05:00
record-printer record-name record-field-accessor
record-field-mutator record-predicate record-constructor
2006-12-05 19:18:36 -05:00
record-type-name record-type-symbol record-type-field-names
2006-11-23 19:44:29 -05:00
hash-table? make-hash-table get-hash-table put-hash-table!
2007-04-30 00:31:21 -04:00
assembler-output $make-environment
2006-12-05 19:18:36 -05:00
command-line-arguments port? input-port? output-port?
2006-11-23 19:48:14 -05:00
make-input-port make-output-port make-input/output-port
2006-12-05 19:18:36 -05:00
port-handler port-input-buffer port-input-index port-input-size
port-output-buffer port-output-index port-output-size
set-port-input-index! set-port-input-size!
set-port-output-index! set-port-output-size! port-name
input-port-name output-port-name write-char read-char
unread-char peek-char newline reset-input-port!
flush-output-port close-input-port close-output-port
console-input-port current-input-port standard-output-port
standard-error-port console-output-port current-output-port
open-output-file open-input-file open-output-string
2007-01-22 21:07:20 -05:00
with-output-to-string
2006-12-05 19:18:36 -05:00
get-output-string with-output-to-file call-with-output-file
2007-02-04 15:51:47 -05:00
open-input-string
2006-12-05 19:18:36 -05:00
with-input-from-file call-with-input-file date-string
file-exists? delete-file + - add1 sub1 * / expt
quotient+remainder quotient remainder modulo number? positive?
2006-12-19 11:41:13 -05:00
negative? zero? number->string logand = < > <= >=
2007-01-31 17:23:49 -05:00
last-pair
make-guardian weak-cons collect
interrupt-handler
time-it
posix-fork fork waitpid env environ
pretty-print
even? odd? member char-whitespace? char-alphabetic?
char-downcase max min complex? real? rational?
exact? inexact? integer?
string->number exact->inexact
flonum? flonum->string string->flonum
sin cos atan sqrt
2006-12-19 11:41:13 -05:00
))
2006-11-23 19:44:29 -05:00
(define system-primitives
'(
2006-12-05 19:18:36 -05:00
$primitive-call/cc
2006-12-05 19:18:36 -05:00
$closure-code immediate? $unbound-object? $forward-ptr?
pointer-value primitive-ref primitive-set! $fx= $fx< $fx<= $fx>
$fx>= $fxzero? $fx+ $fx- $fx* $fxadd1 $fxsub1 $fxquotient
$fxremainder $fxmodulo $fxsll $fxsra $fxlognot $fxlogor
$fxlogand $fxlogxor $fixnum->char $char->fixnum $char= $char<
$char<= $char> $char>= $car $cdr $set-car! $set-cdr!
2006-11-23 19:44:29 -05:00
$make-vector $vector-ref $vector-set! $vector-length
2006-12-05 19:18:36 -05:00
$make-string $string-ref $string-set! $string-length $string
2006-11-23 19:44:29 -05:00
$symbol-string $symbol-unique-string $symbol-value
$set-symbol-string! $set-symbol-unique-string!
$set-symbol-value! $set-symbol-function! $make-symbol $set-symbol-plist!
$symbol-plist $sc-put-cte $record? $record/rtd? $record-set!
$record-ref $record-rtd $make-record $record $base-rtd $code?
$code-reloc-vector $code-freevars $code-size $code-ref
2006-12-05 19:18:36 -05:00
$code-set! $code->closure list*->code* make-code code?
set-code-reloc-vector! code-reloc-vector code-freevars
code-size code-ref code-set! $frame->continuation $fp-at-base
$current-frame $arg-list $seal-frame-and-call
2006-11-23 19:44:29 -05:00
$make-call-with-values-procedure $make-values-procedure
do-overflow $make-tcbucket $tcbucket-next $tcbucket-key
2006-12-05 19:18:36 -05:00
$tcbucket-val $set-tcbucket-next! $set-tcbucket-val!
$set-tcbucket-tconc!
call/cf
2006-12-05 19:18:36 -05:00
trace-symbol! untrace-symbol! make-traced-procedure
fixnum->string
$interrupted? $unset-interrupted! $do-event
$fasl-read
;;; TODO: must open-code
$make-port/input $make-port/output $make-port/both
2006-11-23 19:48:14 -05:00
$make-input-port $make-output-port $make-input/output-port
$port-handler $port-input-buffer $port-input-index
$port-input-size $port-output-buffer $port-output-index
$port-output-size $set-port-input-index! $set-port-input-size!
2006-11-23 19:48:14 -05:00
$set-port-output-index! $set-port-output-size!
2006-11-23 19:44:29 -05:00
2006-11-23 19:48:14 -05:00
;;; better open-code
2006-11-23 19:48:14 -05:00
$write-char $read-char $peek-char $unread-char
2006-11-23 19:44:29 -05:00
2006-11-23 19:48:14 -05:00
;;; never open-code
$reset-input-port! $close-input-port $close-output-port
$flush-output-port *standard-output-port* *standard-error-port*
*current-output-port* *standard-input-port* *current-input-port*
;;;
compile-core-expr-to-port
compiler-giveup-tally
2006-11-23 19:44:29 -05:00
))
(define (whack-system-env setenv?)
(define add-prim
(lambda (x)
(let ([g (gensym (symbol->string x))])
(putprop x '|#system| g)
(putprop g '*sc-expander* (cons 'core-primitive x)))))
(define add-macro
(lambda (x)
(let ([g (gensym (symbol->string x))]
[e (getprop x '*sc-expander*)])
(when e
(putprop x '|#system| g)
(putprop g '*sc-expander* e)))))
(define (foo)
(eval
`(begin
(define-syntax compile-time-date-string
(lambda (x)
2006-11-23 19:48:14 -05:00
#'(quote ,(date-string))))
2006-11-23 19:44:29 -05:00
(define-syntax public-primitives
(lambda (x)
#'(quote ,public-primitives)))
(define-syntax system-primitives
(lambda (x)
#'(quote ,system-primitives)))
(define-syntax macros
(lambda (x)
#'(quote ,macros))))))
(set! system-env ($make-environment '|#system| #t))
(for-each add-macro macros)
(for-each add-prim public-primitives)
(for-each add-prim system-primitives)
(if setenv?
(parameterize ([interaction-environment system-env])
(foo))
(foo)))
(when (eq? "" "")
(error #f "SEVERELY OUT OF DATE!\n")
2006-11-23 19:44:29 -05:00
(load "chez-compat.ss")
(set! primitive-ref top-level-value)
(set! primitive-set! set-top-level-value!)
(set! chez-expand sc-expand)
(set! chez-current-expand current-expand)
(printf "loading psyntax.pp ...\n")
(load "psyntax-7.1.pp")
(chez-current-expand
(lambda (x . args)
(apply chez-expand (sc-expand x) args)))
(whack-system-env #f)
(printf "loading psyntax.ss ...\n")
(load "psyntax-7.1-6.9.ss")
(chez-current-expand
(lambda (x . args)
(apply chez-expand (sc-expand x) args)))
(whack-system-env #t)
(printf "ok\n")
(load "libassembler-compat-6.7.ss") ; defines make-code etc.
2006-11-23 19:48:14 -05:00
(load "libintelasm-6.9.ss") ; uses make-code, etc.
2006-11-23 19:44:29 -05:00
(load "libfasl-6.7.ss") ; uses code? etc.
2006-11-23 19:48:14 -05:00
(load "libcompile-8.1.ss") ; uses fasl-write
2006-11-23 19:44:29 -05:00
)
(whack-system-env #t)
(define scheme-library-files
2007-04-29 21:42:41 -04:00
'( ["libhandlers.ss" "libhandlers.fasl" p0 onepass]
["libcontrol.ss" "libcontrol.fasl" p0 onepass]
["libcollect.ss" "libcollect.fasl" p0 onepass]
2007-04-30 00:50:10 -04:00
["librecord.ss" "librecord.fasl" p0 onepass]
2007-04-30 00:35:28 -04:00
["libcxr.ss" "libcxr.fasl" p0 onepass]
2007-04-29 21:42:41 -04:00
["libnumerics.ss" "libnumerics.fasl" p0 onepass]
2007-04-30 00:33:22 -04:00
["libguardians.ss" "libguardians.fasl" p0 onepass]
["libcore.ss" "libcore.fasl" p0 onepass]
2007-04-29 21:42:41 -04:00
["libchezio.ss" "libchezio.fasl" p0 onepass]
2007-04-30 00:31:21 -04:00
["libhash.ss" "libhash.fasl" p0 onepass]
2007-04-29 23:00:20 -04:00
["libwriter.ss" "libwriter.fasl" p0 onepass]
["libtokenizer.ss" "libtokenizer.fasl" p0 onepass]
["libassembler.ss" "libassembler.fasl" p0 onepass]
2007-04-29 21:42:41 -04:00
["libintelasm.ss" "libintelasm.fasl" p0 onepass]
["libfasl.ss" "libfasl.fasl" p0 onepass]
["libtrace.ss" "libtrace.fasl" p0 onepass]
2007-04-29 21:42:41 -04:00
["libcompile.ss" "libcompile.fasl" p1 onepass]
["psyntax-7.1.ss" "psyntax.fasl" p0 onepass]
["libpp.ss" "libpp.fasl" p0 onepass]
["libcafe.ss" "libcafe.fasl" p0 onepass]
["libposix.ss" "libposix.fasl" p0 onepass]
["libtimers.ss" "libtimers.fasl" p0 onepass]
["libtoplevel.ss" "libtoplevel.fasl" p0 onepass]
2006-11-23 19:44:29 -05:00
))
(define (read-file ifile)
2006-12-06 21:20:15 -05:00
(with-input-from-file ifile
(lambda ()
(let f ()
(let ([x (read)])
(if (eof-object? x)
'()
(cons x (f))))))))
(define (expand-file ifile)
(map sc-expand (read-file ifile)))
2006-11-23 19:44:29 -05:00
(define (join s ls)
(cond
[(null? ls) ""]
[else
(let ([str (open-output-string)])
(let f ([a (car ls)] [d (cdr ls)])
(cond
[(null? d)
(display a str)
(get-output-string str)]
[else
(display a str)
(display s str)
(f (car d) (cdr d))])))]))
(define (compile-all)
(define (compile-library ifile ofile which-compile)
(parameterize ([assembler-output #f]
[expand-mode 'bootstrap]
[interaction-environment system-env])
(let ([proc
(case which-compile
[(onepass) compile-file]
[(chaitin) alt-compile-file]
[else (error 'compile-library "unknown compile ~s"
which-compile)])])
(printf "compiling ~a ... \n" ifile)
(proc ifile ofile 'replace))))
(for-each
(lambda (x)
(compile-library (car x) (cadr x) (cadddr x)))
scheme-library-files)
(system
(format "cat ~a > ikarus.boot"
(join " " (map cadr scheme-library-files)))))
(define (new-compile-all)
(define (slurp-file file)
(with-input-from-file file
(lambda ()
(let f ()
(let ([x (read)])
(if (eof-object? x)
'()
(cons x (f))))))))
(define (expand-library ifile)
(parameterize ([expand-mode 'bootstrap]
[interaction-environment system-env])
(expand (cons 'begin (slurp-file ifile)))))
(define (expand-all ls)
(map (lambda (x) (expand-library (car x))) ls))
(printf "expanding ...\n")
(let ([core* (expand-all scheme-library-files)])
(printf "compiling ...\n")
(let ([p (open-output-file "ikarus.boot" 'replace)])
(for-each
(lambda (x) (#%compile-core-expr-to-port x p))
core*)
(close-output-port p))))
;(compile-all)
(new-compile-all)
(printf "Happy Happy Joy Joy\n")
(exit)
2006-12-16 18:11:57 -05:00
;(#%compiler-giveup-tally)
2006-12-08 06:12:35 -05:00
; vim:syntax=scheme