2018-04-02 17:48 GMT+02:00 Danny Milosavljevic : > * gnu/packages/rust.scm (mrustc): New variable. > wow ! Thanks for working on Rust ! I'm not able to evaluate this patch, it's way too complicated for me and yet I'd like to ask you a few questions > > --- > gnu/packages/rust.scm | 88 ++++++++++++++++++++++++++++++ > +++++++++++++++++++++ > 1 file changed, 88 insertions(+) > > diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm > index 70140579b..507c0fe25 100644 > --- a/gnu/packages/rust.scm > +++ b/gnu/packages/rust.scm > @@ -6,6 +6,7 @@ > ;;; Copyright © 2017, 2018 Nikolai Merinov org> > ;;; Copyright © 2017 Efraim Flashner > ;;; Copyright © 2018 Tobias Geerinckx-Rice > +;;; Copyright © 2018 Danny Milosavljevic > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -46,6 +47,7 @@ > #: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)) > @@ -150,6 +152,92 @@ in turn be used to build the final Rust.") > (modules '((guix build utils))) > (snippet '(begin (delete-file-recursively "src/llvm") #t)))) > > +(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 > + "0i5kqnzsd1rkj8qm147jx934nyn9sd > 1fz2b4achj9z0r00h84dh6")))) > + (outputs '("out" "cargo")) > + (build-system gnu-build-system) > + (inputs > + `(("llvm" ,llvm-3.9.1))) > Why is llvm needed ? I read on their git repo page that it's tested with the gcc 5.4 and 6 ? https://github.com/thepowersgang/mrustc > + (native-inputs > + `(("bison" ,bison) > + ("flex" ,flex) > + ;; Required for the libstd sources. > + ("rustc" > + ,(rust-source "1.19.0" "0l8c14qsf42rmkqy92ahij4vf356db > yspxcips1aswpvad81y8qm")))) > + (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"))) > so there's the gcc too ? 🤔 > + ;; 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)))))) > but then it's not used ? > + (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 > (name "rust") > > > > Thanks again !