(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)))) (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))))))