zilch/lang/rust/src/build-script.sld
Puck Meerburg 0340f6e830 (zilch lang rust): document
Change-Id: I6a6a6964c8aaff8d5f3e18bc5c7486746b5a2952
2025-11-14 13:01:04 +00:00

43 lines
1.6 KiB
Scheme

;; Helper procedure to call a build script with the right working directory.
(define-library (zilch lang rust build-script)
(import
(scheme base) (scheme write) (scheme process-context) (scheme lazy)
(zilch file) (zilch magic) (zilch nix drv) (zilch nix path) (scheme char)
(zilch nixpkgs) (zilch zexpr) (zilch semver)
json
(chicken process)
(chicken base) (chicken format)
(chicken foreign)
(srfi 4) (srfi 128) (srfi 146) (srfi 152) (srfi 207)
(zilch lang rust))
(export
call-runner)
(begin
(define linker (delay (let ((v (cdr (assoc "out" (nixpkgs "gcc"))))) #~,(string-append #$v "/bin/cc"))))
(foreign-declare "#include \"runner_source.h\"")
(define runner-runner
(cdar
(call-rustc
(zfile (foreign-value "runner_source" nonnull-c-string)) '()
#:codegen-flags (cons "linker" (force linker))
#:crate-type 'bin
#:crate-name "runner"
#:edition "2021"
#:emits '(#:link #t))))
;; Call a build script with specified current working directory (as string)
;; and environment (as alist).
(define (call-runner input-script cwd env)
(define output (store-path-for-ca-drv* "build.rs-run" "x86_64-linux"
`(,runner-runner)
#~(("script" . #$input-script)
("cwd" . #$cwd)
("OUT_DIR" . ,(make-placeholder "outdir"))
("CARGO_TARGET_DIR" . ,(make-placeholder "targetdir"))
. #$env)
'("out" "outdir" "targetdir")))
(values (cdr (assoc "outdir" output)) (cdr (assoc "out" output))))))