(zilch lang rust): more fixes

This commit is contained in:
puck 2025-03-02 20:32:05 +00:00
parent 313cca66cc
commit fb1977a45c
5 changed files with 189 additions and 85 deletions

View file

@ -27,7 +27,7 @@
(mir rustc-emits-mir set-rustc-emits-mir!))
(define-record-type <rustc-params>
(make-rustc-params cfg check-cfg search-path link crate-type crate-name edition emits externs codegen-flags remap-path-prefix)
(make-rustc-params cfg check-cfg search-path link crate-type crate-name edition emits externs codegen-flags remap-path-prefix cap-lints)
rustc-params?
(cfg rustc-params-cfg set-rustc-params-cfg!)
(check-cfg rustc-params-check-cfg set-rustc-params-check-cfg!)
@ -39,7 +39,8 @@
(emits rustc-params-emits set-rustc-params-emits!)
(externs rustc-params-externs set-rustc-params-externs!)
(codegen-flags rustc-params-codegen-flags set-rustc-params-codegen-flags!)
(remap-path-prefix rustc-params-remap-path-prefix set-rustc-params-remap-path-prefix!))
(remap-path-prefix rustc-params-remap-path-prefix set-rustc-params-remap-path-prefix!)
(cap-lints rustc-params-cap-lints set-rustc-params-cap-lints!))
(define (rustc-emits-as-list emits tail types)
(define (check-one res name)
@ -88,6 +89,7 @@
((#:externs) (set-rustc-params-externs! out (cons (cadr items) (rustc-params-externs out))) (parse-rustc-params out (cddr items)))
((#:codegen-flags) (set-rustc-params-codegen-flags! out (cons (cadr items) (rustc-params-codegen-flags out))) (parse-rustc-params out (cddr items)))
((#:remap-path-prefix) (set-rustc-params-remap-path-prefix! out (cons (cadr items) (rustc-params-remap-path-prefix out))) (parse-rustc-params out (cddr items)))
((#:cap-lints) (set-rustc-params-cap-lints! out (cadr items)) (parse-rustc-params out (cddr items)))
(else (error "unknown rustc param" (car items))))))
(foreign-declare "#include \"rustc_wrap_source.h\"")
@ -95,16 +97,25 @@
#f)
(define (call-rustc input env . params)
(call-rustc-internal input env (parse-rustc-params (make-rustc-params '() '() '() '() #f #f #f #f '() '() '()) params)))
(call-rustc-internal input env (parse-rustc-params (make-rustc-params '() '() '() '() #f #f #f #f '() '() '() #f) params)))
(define (call-rustc-internal input-path env params)
(define args (list input-path))
(when (rustc-params-cap-lints params)
(set! args (cons "--cap-lints" (cons (rustc-params-cap-lints params) args))))
(when (rustc-params-cfg params)
(for-each
(lambda (k) (set! args (cons "--cfg" (cons k args)))) (rustc-params-cfg params)))
(when (rustc-params-check-cfg params)
(for-each
(lambda (k) (set! args (cons "--check-cfg" (cons k args)))) (rustc-params-check-cfg params)))
(when (rustc-params-externs params)
(for-each
(lambda (k)
(if (pair? k)
(set! args (cons "--extern" (cons #~,(string-append (car k) "=" #$(cdr k)) args)))
(set! args (cons "--extern" (cons k args)))))
(rustc-params-externs params)))
(when (rustc-params-link params)
(for-each
(lambda (k)
@ -126,13 +137,6 @@
(define-values (new-args outputs) (rustc-emits-as-list (rustc-params-emits params) args '()))
(set! args new-args)
(when (rustc-params-externs params)
(for-each
(lambda (k)
(if (pair? k)
(set! args (cons "--extern" (cons #~,(string-append (car k) "=" #$(cdr k)) args)))
(set! args (cons "--extern" (cons k args)))))
(rustc-params-externs params)))
(when (rustc-params-codegen-flags params)
(for-each
(lambda (k)