gnu: Add rust-bootstrap-1.74.

* gnu/packages/rust.scm(rust-bootstrap-1.74): New variable.
(rust-bootstrap): Rename to rust-bootstrap-1.54.
(rust-1.55)[native-inputs]: Adjust accordingly.
* gnu/packages/emacs-xyz.scm (emacs-flycheck-rust)[native-inputs]: Adjust
accordingly.

Change-Id: Id88e200015ed6ab246407e37eeb4159cb4df195d
Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
Signed-off-by: Hilton Chain <hako@ultrarare.space>
This commit is contained in:
Morgan Smith 2025-04-07 16:07:46 -04:00 committed by Hilton Chain
parent 14c3cb1341
commit e4169eafef
No known key found for this signature in database
GPG key ID: ACC66D09CA528292
2 changed files with 188 additions and 8 deletions

View file

@ -10406,9 +10406,10 @@ errors.")
(base32 "1fh6j5w2387nh2fwwjphkhq17cgj5m2q5k0fhidvgc2w65lzbr1r"))))
(propagated-inputs
(list emacs-dash emacs-flycheck emacs-let-alist))
(native-inputs (list emacs-buttercup
rust-bootstrap
`(,rust-bootstrap "cargo")))
(native-inputs
(list emacs-buttercup
rust-bootstrap-1.54
`(,rust-bootstrap-1.54 "cargo")))
(build-system emacs-build-system)
(home-page "https://github.com/flycheck/flycheck-rust")
(synopsis "Rust/Cargo support for Flycheck")

View file

@ -157,9 +157,9 @@
;; Don't use the vendored openssl sources.
(("--features vendored-openssl") "")))))))
;;; Rust 1.54 is special in that it is built with mrustc, which shortens the
;;; bootstrap path.
(define-public rust-bootstrap
;;; The rust-bootstrap packages are special in that they are built with mrustc,
;;; which shortens the bootstrap path.
(define-public rust-bootstrap-1.54
(package
(name "rust")
(version "1.54.0")
@ -341,6 +341,185 @@ safety and thread safety guarantees.")
;; Dual licensed.
(license (list license:asl2.0 license:expat))))
(define-public rust-bootstrap-1.74
(package
(name "rust")
(version "1.74.0")
(source
(origin
(method url-fetch)
(uri (rust-uri version))
(sha256 (base32 "0j8hrwjjjjf7spy0hy7gami96swhfzr6kandfzzdri91qd5mhaw8"))
(modules '((guix build utils)))
(snippet
'(begin
(for-each delete-file-recursively
'("src/llvm-project"
"vendor/openssl-src/openssl"
"vendor/tikv-jemalloc-sys/jemalloc"))
;; Remove vendored dynamically linked libraries.
;; find . -not -type d -executable -exec file {} \+ | grep ELF
;; Also remove the bundled (mostly Windows) libraries.
(for-each delete-file
(find-files "vendor" "\\.(a|dll|exe|lib)$"))
;; Adjust vendored dependency to explicitly use rustix with libc backend.
(substitute* "vendor/tempfile/Cargo.toml"
(("features = \\[\"fs\"" all)
(string-append all ", \"use-libc\"")))))
;; Rust 1.70 adds the rustix library which depends on the vendored
;; fd-lock crate. The fd-lock crate uses Outline assembly which expects
;; a precompiled static library. Enabling the "cc" feature tells the
;; build.rs script to compile the assembly files instead of searching
;; for a precompiled library.
(patches (search-patches "rust-1.70-fix-rustix-build.patch"))))
(outputs '("out" "cargo"))
(properties '((hidden? . #t)
(timeout . 129600) ;36 hours
(max-silent-time . 18000))) ;5 hours (for riscv64)
(build-system gnu-build-system)
(inputs
(list bash-minimal
llvm-17
openssl
zlib))
(native-inputs
(list pkg-config %mrustc-source))
(arguments
(list
#:imported-modules %cargo-utils-modules ;for `generate-all-checksums'
#:modules '((guix build cargo-utils)
(guix build utils)
(guix build gnu-build-system))
#:test-target "test"
;; Rust's own .so library files are not found in any RUNPATH, but
;; that doesn't seem to cause issues.
#:validate-runpath? #f
#:make-flags
#~(let ((source #$(package-source this-package)))
(list (string-append "RUSTC_TARGET="
#$(platform-rust-target
(lookup-platform-by-target-or-system
(or (%current-target-system)
(%current-system)))))
(string-append "RUSTC_VERSION=" #$version)
(string-append "MRUSTC_TARGET_VER="
#$(version-major+minor version))
(string-append "RUSTC_SRC_TARBALL=" source)
"OUTDIR_SUF=")) ;do not add version suffix to output dir
#:phases
#~(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source inputs #:allow-other-keys)
((assoc-ref %standard-phases 'unpack)
#:source #$(this-package-native-input
(origin-file-name %mrustc-source)))))
(add-after 'unpack 'patch-makefiles
;; This disables building the (unbundled) LLVM.
(lambda* (#:key inputs #:allow-other-keys)
(substitute* '("minicargo.mk"
"run_rustc/Makefile")
;; Use the system-provided LLVM.
(("LLVM_CONFIG [:|?]= .*")
(string-append "LLVM_CONFIG := "
(search-input-file inputs "/bin/llvm-config") "\n")))
(substitute* "Makefile"
;; Patch date and git obtained version information.
((" -D VERSION_GIT_FULLHASH=.*")
(string-append
" -D VERSION_GIT_FULLHASH=\\\"" #$%mrustc-commit "\\\""
" -D VERSION_GIT_BRANCH=\\\"master\\\""
" -D VERSION_GIT_SHORTHASH=\\\""
#$(string-take %mrustc-commit 7) "\\\""
" -D VERSION_BUILDTIME="
"\"\\\"Thu, 01 Jan 1970 00:00:01 +0000\\\"\""
" -D VERSION_GIT_ISDIRTY=0\n")))
(substitute* '("run_rustc/Makefile"
"run_rustc/rustc_proxy.sh")
;; Patch the shebang of a generated wrapper for rustc
(("#!/bin/sh")
(string-append "#!" (which "sh"))))))
(add-before 'configure 'configure-cargo-home
(lambda _
(let ((cargo-home (string-append (getcwd) "/.cargo")))
(mkdir-p cargo-home)
(setenv "CARGO_HOME" cargo-home))))
(replace 'configure
(lambda _
(setenv "CC" "gcc")
(setenv "CXX" "g++")
;; The Guix LLVM package installs only shared libraries.
(setenv "LLVM_LINK_SHARED" "1")
;; rustc still insists on having 'cc' on PATH in some places
;; (e.g. when building the 'test' library crate).
(mkdir-p "/tmp/bin")
(symlink (which "gcc") "/tmp/bin/cc")
(setenv "PATH" (string-append "/tmp/bin:" (getenv "PATH")))))
(delete 'patch-generated-file-shebangs)
(replace 'build
(lambda* (#:key make-flags parallel-build? #:allow-other-keys)
(let ((job-count (if parallel-build?
(parallel-job-count)
1)))
;; Adapted from:
;; https://github.com/dtolnay/bootstrap/blob/master/build-1.54.0.sh.
;; Use PARLEVEL since both minicargo and mrustc use it
;; to set the level of parallelism.
(setenv "PARLEVEL" (number->string job-count))
(display "Building mrustc...\n")
(apply invoke "make" make-flags)
;; This doesn't seem to build anything, but it
;; sets additional minicargo flags.
(display "Building RUSTCSRC...\n")
(apply invoke "make" "RUSTCSRC" make-flags)
;; This probably doesn't need to be called explicitly.
(display "Building LIBS...\n")
(apply invoke "make" "-f" "minicargo.mk" "LIBS" make-flags)
(display "Building rustc...\n")
(apply invoke "make" "-f" "minicargo.mk" "output/rustc"
make-flags)
(display "Building cargo...\n")
(apply invoke "make" "-f" "minicargo.mk" "output/cargo"
make-flags)
;; This one isn't listed in the build script.
(display "Rebuilding stdlib with rustc...\n")
(apply invoke "make" "-C" "run_rustc" make-flags))))
(replace 'install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(cargo (assoc-ref outputs "cargo"))
(bin (string-append out "/bin"))
(rustc (string-append bin "/rustc"))
(cargo-bin (string-append cargo "/bin"))
(lib (string-append out "/lib"))
(system-lib-prefix
(string-append lib "/rustlib/"
#$(platform-rust-target
(lookup-platform-by-target-or-system
(or (%current-target-system)
(%current-system)))) "/lib")))
(mkdir-p (dirname rustc))
(copy-file "run_rustc/output/prefix/bin/rustc_binary" rustc)
(wrap-program rustc
`("LD_LIBRARY_PATH" = (,system-lib-prefix)))
(mkdir-p lib)
(copy-recursively "run_rustc/output/prefix/lib" lib)
(install-file "run_rustc/output/prefix/bin/cargo" cargo-bin)))))))
(synopsis "Compiler for the Rust programming language")
(description "Rust is a systems programming language that provides memory
safety and thread safety guarantees.")
(home-page "https://github.com/thepowersgang/mrustc")
;; List of systems where rust-bootstrap is explicitly known to build:
(supported-systems '("x86_64-linux"))
;; Dual licensed.
(license (list license:asl2.0 license:expat))))
(define-public rust-1.55
(package
(name "rust")
@ -490,8 +669,8 @@ ar = \"" binutils "/bin/ar" "\"
(native-inputs
`(("pkg-config" ,pkg-config)
("python" ,python-minimal-wrapper)
("rustc-bootstrap" ,rust-bootstrap)
("cargo-bootstrap" ,rust-bootstrap "cargo")))
("rustc-bootstrap" ,rust-bootstrap-1.54)
("cargo-bootstrap" ,rust-bootstrap-1.54 "cargo")))
(inputs
`(("bash" ,bash-minimal)
("llvm" ,llvm-13)