rust: various build script fixes

This commit is contained in:
puck 2025-02-12 13:12:04 +00:00
parent e42315e67a
commit 8c129e33db
12 changed files with 307 additions and 165 deletions

View file

@ -11,6 +11,9 @@
(begin
(define rustc (cdr (assoc "out" (nixpkgs "rustc"))))
(define gcc (delay (cdr (assoc "out" (nixpkgs "gcc")))))
(define linker (delay #~,(string-append #$(force gcc) "/bin/cc")))
(define-record-type <rustc-emits>
(make-rustc-emits asm llvm-bc llvm-ir obj metadata link dep-info mir)
rustc-emits?
@ -87,6 +90,10 @@
((#: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)))
(else (error "unknown rustc param" (car items))))))
(foreign-declare "#include \"rustc_wrap_source.h\"")
(define rustc_wrap-bin
#f)
(define (call-rustc input env . params)
(call-rustc-internal input env (parse-rustc-params (make-rustc-params '() '() '() '() #f #f #f #f '() '() '()) params)))
@ -136,5 +143,16 @@
(lambda (k)
(set! args (cons "--remap-path-prefix" (cons #~,(string-append #$(car k) "=" #$(cdr k)) args))))
(rustc-params-remap-path-prefix params)))
(store-path-for-ca-drv* (string-append "rustc-" (symbol->string (rustc-params-crate-type params)) "-" (rustc-params-crate-name params)) "x86_64-linux" #~(,(string-append #$rustc "/bin/rustc") . #$args) env outputs))))
(if rustc_wrap-bin
(store-path-for-ca-drv* (string-append "rustc-" (symbol->string (rustc-params-crate-type params)) "-" (rustc-params-crate-name params)) "x86_64-linux" #~(#$rustc_wrap-bin . #$args) #~(("_zilch_rustc" . ,(string-append #$rustc "/bin/rustc")) . #$env) outputs)
(store-path-for-ca-drv* (string-append "rustc-" (symbol->string (rustc-params-crate-type params)) "-" (rustc-params-crate-name params)) "x86_64-linux" #~(,(string-append #$rustc "/bin/rustc") . #$args) env outputs)))
(set! rustc_wrap-bin
(cdar
(call-rustc
(zfile (foreign-value "rustc_wrap_source" nonnull-c-string)) '()
#:codegen-flags (cons "linker" (force linker))
#:crate-type 'bin
#:crate-name "rustc_wrap"
#:edition "2021"
#:emits '(#:link #t))))))