Patchwork [08/12] gnu: Add rustc.

login
register
mail settings
Submitter David Craven
Date Dec. 11, 2016, 5:25 p.m.
Message ID <20161211172537.23315-9-david@craven.ch>
Download mbox | patch
Permalink /patch/18361/
State New
Headers show

Comments

David Craven - Dec. 11, 2016, 5:25 p.m.
* gnu/packages/rust.scm (rustc): New variable.

Co-authored-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
 gnu/packages/rust.scm | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
Ludovic Courtès - Dec. 13, 2016, 10:47 p.m.
David Craven <david@craven.ch> skribis:

> * gnu/packages/rust.scm (rustc): New variable.
>
> Co-authored-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>

[...]

> +    (synopsis "Compiler for the Rust progamming language")
> +    (description "Rust is a systems programming language that runs blazingly
> +fast, prevents segfaults, and guarantees thread safety.")

Buzzwords!  :-)  “Rust … language with an efficient compiler, and it
provides memory safety and thread safety guarantees.”

> +    (license (list license:asl2.0 license:expat))))

Please add a comment explaining whether this is “at the user’s choice”
or rather a combination of licenses.

OK with these changes.

Thanks,
Ludo’.

Patch

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 34f87c689..8bbb5d116 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -23,6 +23,10 @@ 
   #: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)
@@ -188,3 +192,80 @@  to be deprecated.")
     (synopsis "Rust bootstrap")
     (description "Meta package for rustc 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)
+       ("rustc-bootstrap" ,rustc-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 "RUSTC_BOOTSTRAP" "1")
+             (setenv "VERBOSE" "1")
+             (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 runs blazingly
+fast, prevents segfaults, and guarantees thread safety.")
+    (home-page "https://www.rust-lang.org")
+    (license (list license:asl2.0 license:expat))))