(zilch lang rust resolver): misc fixes

This commit is contained in:
puck 2024-11-27 14:25:49 +00:00
parent b55e725e2f
commit 8cc567a075

View file

@ -309,7 +309,8 @@
(define rustc-env
#~(
; ("CARGO" . "")
("CARGO_MANIFEST_DIR" . "")
("CARGO_MANIFEST_DIR" . #$crate-root)
,@(if (cargo-crate-links (resolved-package-crate resolved)) (list (cons "CARGO_MANIFEST_LINKS" (cargo-crate-links (resolved-package-crate resolved)))) '())
("CARGO_PKG_VERSION" . ,(version-str (resolved-package-version resolved)))
("CARGO_PKG_VERSION_MAJOR" . ,(number->string (version-major (resolved-package-version resolved))))
("CARGO_PKG_VERSION_MINOR" . ,(number->string (version-minor (resolved-package-version resolved))))
@ -333,6 +334,18 @@
(define (upcase-underscore ch)
(if (char=? ch #\-) #\_ (char-upcase ch)))
(define (make-cfg-values-env l out)
(cond
((pair? l)
(let* ((env-name (string-map upcase-underscore (string-append "CARGO_CFG_" (caar l))))
(existing (assoc env-name out)))
(when (and existing (cdar l))
(set-cdr! existing (string-append (cdr existing) "," (cdar l))))
(if existing
(make-cfg-values-env (cdr l) out)
(make-cfg-values-env (cdr l) (cons (cons env-name (or (cdar l) "")) out)))))
(else out)))
(when (resolved-package-build-script resolved)
(unless (resolved-package-build-data (resolved-package-build-script resolved))
(build-package (resolved-package-build-script resolved)))
@ -340,14 +353,16 @@
(lambda (key value)
(unless (resolved-package-build-data value)
(build-package value))
(when (cargo-crate-links (resolved-package-crate value))
(for-each
(lambda (kv)
(set! dependency-metadata (cons (cons (string-map upcase-underscore (string-append "DEP_" (cargo-crate-links (resolved-package-crate value)) "_" (car kv))) (cdr kv)) dependency-metadata)))
(resolved-package-build-data-build-script-metadata (resolved-package-build-data value))))
(resolved-package-build-data-build-script-metadata (resolved-package-build-data value)))))
(resolved-package-dependencies resolved))
(let*-values
(((build-script) (cdr (resolved-package-build-data-rlib (resolved-package-build-data (resolved-package-build-script resolved)))))
((build-script-env) (build-script-env-overrides-for-crate (cargo-crate-name (resolved-package-crate resolved))))
((rewritten-features) (map (lambda (feature) (cons (string-map upcase-underscore (string-append "CARGO_FEATURE_" feature)) "")) (resolved-package-enabled-features resolved)))
((runner-output runner-outdir)
(call-runner build-script crate-root
#~(
@ -357,12 +372,13 @@
("OPT_LEVEL" . "0")
("PROFILE" . "debug")
("DEBUG" . "true")
,@(make-cfg-values-env cfg-values '())
,@dependency-metadata
,@rewritten-features
#$@build-script-env
; TODO: OUT_DIR, NUM_JOBS, OPT_LEVEL/DEBUG/PROFILE, DEP_*
; RUSTC/RUSTDOC?, RUSTC_LINKER? and CARGO_ENCODED_RUSTFLAGS
. #$rustc-env))))
(printf "runner output for ~S: ~S\n" (cargo-crate-name (resolved-package-crate resolved)) runner-output)
(map
(lambda (v)
(if (pair? v)
@ -370,9 +386,9 @@
(set! params `(#:cfg ,v . ,params))))
(build-script-output-cfg runner-output))
(set! buildscript-metadata (build-script-output-metadata runner-output))
(for-each (lambda (kv) (set! rustc-env (cons kv rustc-env))) (build-script-output-env runner-output))
(let ((old-rustc-env rustc-env))
(set! rustc-env #~(("OUT_DIR" . #$runner-outdir) . #$old-rustc-env)))
; Reverse order for scheme reasons.
(for-each
(lambda (kv) (set! bin-flags `(#:link ,kv . ,bin-flags)))
(build-script-output-link-lib runner-output))
@ -381,11 +397,10 @@
; This should be replaced with .... $something (a dir of all build script outputs?)
(unless (or (null? build-script-env) (null? bin-flags))
(let ((v (cadr bin-flags)))
(set-cdr! bin-flags (cons #~,(begin #$build-script-env v) (cddr bin-flags)))))
(set-cdr! bin-flags (cons #~,(begin #$build-script-env #$runner-outdir v) (cddr bin-flags)))))
(for-each
(lambda (kv) (set! bin-flags `(#:search-path ,kv . ,bin-flags)))
(build-script-output-link-search runner-output))
(printf "~S bin flags: ~S\n" (cargo-crate-name (resolved-package-crate resolved)) bin-flags)))
(build-script-output-link-search runner-output))))
; TODO(puck): check-cfg wants check-cfg everywhere
;(map
; (lambda (v)
@ -402,10 +417,14 @@
(unless (member value transitive-dependencies) (set! transitive-dependencies (cons value transitive-dependencies)))
(define data (resolved-package-build-data value))
(define meta-or-rlib (or (resolved-package-build-data-metadata data) (resolved-package-build-data-rlib data)))
(define name (cratify-name key))
; TODO(puck): what _is_ the logic here?
(when (string=? key (cargo-crate-name (resolved-package-crate value)))
(set! name (cratify-name (cargo-target-name (resolved-package-cargo-target value)))))
(set! params-meta
`(#:externs (,(cratify-name key) . ,(cdr meta-or-rlib)) . ,params-meta))
`(#:externs (,name . ,(cdr meta-or-rlib)) . ,params-meta))
(set! params
`(#:externs (,(cratify-name key) . ,(cdr (resolved-package-build-data-rlib data))) . ,params)))
`(#:externs (,name . ,(cdr (resolved-package-build-data-rlib data))) . ,params)))
(resolved-package-dependencies resolved))
(define transitive-dependencies-meta
@ -437,6 +456,8 @@
(when (eq? crate-type 'proc-macro)
(set! rlib-name (string-append "lib" crate-name "-v" crate-version ".so")))
(when (eq? crate-type 'bin)
(set! rlib-name crate-name))
(when (or (eq? crate-type 'proc-macro) (eq? crate-type 'bin))
(set! params (append transitive-bin-flags params)))