gnu: Add rustc.

* gnu/packages/rust.scm (rustc): New variable.

Co-authored-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
This commit is contained in:
David Craven 2016-09-28 16:24:20 +02:00
parent 423f9e4494
commit ecee21473b
No known key found for this signature in database
GPG Key ID: C5E051C79C0BECDB

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 David Craven <david@craven.ch>
;;; Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
;;;
;;; This file is part of GNU Guix.
;;;
@ -19,9 +20,14 @@
(define-module (gnu packages rust)
#:use-module (gnu packages base)
#:use-module (gnu packages bootstrap)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
#:use-module (gnu packages elf)
#:use-module (gnu packages gcc)
#:use-module (gnu packages jemalloc)
#:use-module (gnu packages llvm)
#:use-module (gnu packages python)
#:use-module (gnu packages version-control)
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (guix download)
@ -182,3 +188,79 @@ manager, which is required to build itself.")
(description "Meta package for a rust environment. Provides pre-compiled
rustc-bootstrap and cargo-bootstrap packages.")
(license license:asl2.0)))
(define-public rustc
(package
(name "rustc")
(version (rustc-version %rust-bootstrap-binaries-version))
(source (origin
(method url-fetch)
(uri (string-append
"https://static.rust-lang.org/dist/"
"rustc-" version "-src.tar.gz"))
(sha256
(base32
"112h7qgbn8c7s5880vplpgy5n58sc8css32dq7z5wylpr9slgf7c"))))
(build-system gnu-build-system)
(native-inputs
`(("cmake" ,cmake)
("git" ,git)
("python-2" ,python-2)
("rust-bootstrap" ,rust-bootstrap)
("which" ,which)))
(inputs
`(("jemalloc" ,jemalloc)
("llvm" ,llvm)))
(arguments
;; FIXME: Test failure with llvm 3.8; Update llvm.
;; https://github.com/rust-lang/rust/issues/36835
`(#:tests? #f
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-configure
(lambda _
;; Detect target CPU correctly.
(substitute* "configure"
(("/usr/bin/env") (which "env")))
;; Avoid curl as a build dependency.
(substitute* "configure"
(("probe_need CFG_CURL curl") ""))))
(add-after 'unpack 'set-env
(lambda _
(setenv "SHELL" (which "sh"))
(setenv "CONFIG_SHELL" (which "sh"))))
(add-after 'unpack 'patch-lockfile-test
(lambda _
(substitute* "src/tools/tidy/src/main.rs"
(("^.*cargo.*::check.*$") ""))))
(replace 'configure
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(gcc (assoc-ref inputs "gcc"))
(python (assoc-ref inputs "python-2"))
(rustc (assoc-ref inputs "rustc-bootstrap"))
(llvm (assoc-ref inputs "llvm"))
(jemalloc (assoc-ref inputs "jemalloc"))
(flags (list
(string-append "--prefix=" out)
(string-append "--datadir=" out "/share")
(string-append "--infodir=" out "/share/info")
(string-append "--default-linker=" gcc "/bin/gcc")
(string-append "--default-ar=" gcc "/bin/ar")
(string-append "--python=" python "/bin/python2")
(string-append "--local-rust-root=" rustc)
(string-append "--llvm-root=" llvm)
(string-append "--jemalloc-root=" jemalloc "/lib")
"--release-channel=stable"
"--enable-rpath"
"--enable-local-rust"
;;"--enable-rustbuild"
"--disable-manage-submodules")))
;; Rust uses a custom configure script (no autoconf).
(zero? (apply system* "./configure" flags))))))))
(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://www.rust-lang.org")
;; Dual licensed.
(license (list license:asl2.0 license:expat))))