gnu: Add mrustc.
* gnu/packages/rust.scm (mrustc): New variable.
This commit is contained in:
parent
fe61c88af9
commit
a92bf11c49
1 changed files with 88 additions and 0 deletions
|
@ -6,6 +6,7 @@
|
|||
;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org>
|
||||
;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -46,6 +47,7 @@ (define-module (gnu packages rust)
|
|||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix build-system trivial)
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix git-download)
|
||||
#:use-module ((guix licenses) #:prefix license:)
|
||||
#:use-module (guix packages)
|
||||
#:use-module ((guix build utils) #:select (alist-replace))
|
||||
|
@ -250,6 +252,92 @@ (define (rust-bootstrapped-package base-rust version checksum)
|
|||
(alist-replace "rustc-bootstrap" (list base-rust)
|
||||
(package-native-inputs base-rust))))))
|
||||
|
||||
(define-public mrustc
|
||||
(let ((commit "1a16def28935548e29be0fe5a632e25c83045924")
|
||||
(revision "0")
|
||||
(rustc-version "1.19.0"))
|
||||
(package
|
||||
(name "mrustc")
|
||||
(version (git-version "0.0.0" revision commit))
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/thepowersgang/mrustc.git")
|
||||
(commit commit)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"0i5kqnzsd1rkj8qm147jx934nyn9sd1fz2b4achj9z0r00h84dh6"))))
|
||||
(outputs '("out" "cargo"))
|
||||
(build-system gnu-build-system)
|
||||
(inputs
|
||||
`(("llvm" ,llvm-3.9.1)))
|
||||
(native-inputs
|
||||
`(("bison" ,bison)
|
||||
("flex" ,flex)
|
||||
;; Required for the libstd sources.
|
||||
("rustc"
|
||||
,(rust-source "1.19.0" "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))))
|
||||
(arguments
|
||||
`(#:tests? #f
|
||||
#:make-flags (list (string-append "LLVM_CONFIG="
|
||||
(assoc-ref %build-inputs "llvm")
|
||||
"/bin/llvm-config"))
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'unpack-target-compiler
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(substitute* "minicargo.mk"
|
||||
;; Don't try to build LLVM.
|
||||
(("^[$][(]LLVM_CONFIG[)]:") "xxx:")
|
||||
;; Build for the correct target architecture.
|
||||
(("^RUSTC_TARGET := x86_64-unknown-linux-gnu")
|
||||
(string-append "RUSTC_TARGET := "
|
||||
,(or (%current-target-system)
|
||||
(nix-system->gnu-triplet
|
||||
(%current-system))))))
|
||||
(invoke "tar" "xf" (assoc-ref inputs "rustc"))
|
||||
(chdir "rustc-1.19.0-src")
|
||||
(invoke "patch" "-p0" "../rust_src.patch")
|
||||
(chdir "..")
|
||||
#t))
|
||||
(delete 'configure)
|
||||
(add-after 'build 'build-minicargo
|
||||
(lambda _
|
||||
(for-each (lambda (target)
|
||||
(invoke "make" "-f" "minicargo.mk" target))
|
||||
'("output/libstd.hir" "output/libpanic_unwind.hir"
|
||||
"output/libproc_macro.hir" "output/libtest.hir"))
|
||||
;; Technically the above already does it - but we want to be clear.
|
||||
(invoke "make" "-C" "tools/minicargo")))
|
||||
(replace 'install
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let* ((out (assoc-ref outputs "out"))
|
||||
(bin (string-append out "/bin"))
|
||||
(tools-bin (string-append out "/tools/bin"))
|
||||
(cargo-out (assoc-ref outputs "cargo"))
|
||||
(cargo-bin (string-append cargo-out "/bin"))
|
||||
(lib (string-append out "/lib"))
|
||||
(lib/rust (string-append lib "/mrust"))
|
||||
(gcc (assoc-ref inputs "gcc")))
|
||||
;; These files are not reproducible.
|
||||
(for-each delete-file (find-files "output" "\\.txt$"))
|
||||
(mkdir-p lib)
|
||||
(copy-recursively "output" lib/rust)
|
||||
(mkdir-p bin)
|
||||
(mkdir-p tools-bin)
|
||||
(install-file "bin/mrustc" bin)
|
||||
;; minicargo uses relative paths to resolve mrustc.
|
||||
(install-file "tools/bin/minicargo" tools-bin)
|
||||
(install-file "tools/bin/minicargo" cargo-bin)
|
||||
#t))))))
|
||||
(synopsis "Compiler for the Rust progamming language")
|
||||
(description "Rust is a systems programming language that provides memory
|
||||
safety and thread safety guarantees.")
|
||||
(home-page "https://github.com/thepowersgang/mrustc")
|
||||
;; Dual licensed.
|
||||
(license (list license:asl2.0 license:expat)))))
|
||||
|
||||
(define-public rust-1.23
|
||||
(package
|
||||
(inherit rust-1.19)
|
||||
|
|
Loading…
Reference in a new issue