gnu: rust: Bootstrap (only) Rust 1.19.0 by mrustc.
* gnu/packages/patches/rust-1.19-mrustc.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/rust.scm (rust-1.19)[source]: Add patch "rust-1.19-mrustc.patch". [arguments]<#:modules>: New field. <#:phases>[patch-cargo-tomls]: New phase. <#:phases>[build]: Modify. <#:phases>[install]: Modify. [native-inputs]: Replace rust-bootstrap by mrustc. (rust-1.23)[native-inputs]: New field. [arguments]<#:phases>: Delete phase "patch-cargo-tomls".
This commit is contained in:
		
							parent
							
								
									a0a273c1ee
								
							
						
					
					
						commit
						3159ef7c99
					
				
					 3 changed files with 152 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -1124,6 +1124,7 @@ dist_patch_DATA =						\
 | 
			
		|||
  %D%/packages/patches/ruby-concurrent-test-arm.patch		\
 | 
			
		||||
  %D%/packages/patches/ruby-rack-ignore-failing-test.patch      \
 | 
			
		||||
  %D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\
 | 
			
		||||
  %D%/packages/patches/rust-1.19-mrustc.patch			\
 | 
			
		||||
  %D%/packages/patches/rust-bootstrap-stage0-test.patch		\
 | 
			
		||||
  %D%/packages/patches/rust-coresimd-doctest.patch		\
 | 
			
		||||
  %D%/packages/patches/rxvt-unicode-escape-sequences.patch	\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										28
									
								
								gnu/packages/patches/rust-1.19-mrustc.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								gnu/packages/patches/rust-1.19-mrustc.patch
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
See https://github.com/thepowersgang/mrustc/archive/v0.8.0.tar.gz
 | 
			
		||||
 | 
			
		||||
--- rustc-1.19.0-src-orig/src/libcore/intrinsics.rs
 | 
			
		||||
+++ rustc-1.19.0-src/src/libcore/intrinsics.rs
 | 
			
		||||
@@ -678,5 +678,9 @@
 | 
			
		||||
     pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize;
 | 
			
		||||
 
 | 
			
		||||
+    /// Obtain the length of a slice pointer
 | 
			
		||||
+    #[cfg(rust_compiler="mrustc")]
 | 
			
		||||
+    pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize;
 | 
			
		||||
+
 | 
			
		||||
     /// Gets a static string slice containing the name of a type.
 | 
			
		||||
     pub fn type_name<T: ?Sized>() -> &'static str;
 | 
			
		||||
 | 
			
		||||
--- rustc-1.19.0-src-orig/src/libcore/slice/mod.rs
 | 
			
		||||
+++ rustc-1.19.0-src/src/libcore/slice/mod.rs
 | 
			
		||||
@@ -413,6 +413,8 @@
 | 
			
		||||
     #[inline]
 | 
			
		||||
     fn len(&self) -> usize {
 | 
			
		||||
-        unsafe {
 | 
			
		||||
-            mem::transmute::<&[T], Repr<T>>(self).len
 | 
			
		||||
-        }
 | 
			
		||||
+        #[cfg(not(rust_compiler="mrustc"))]
 | 
			
		||||
+        let rv = unsafe { mem::transmute::<&[T], Repr<T>>(self).len };
 | 
			
		||||
+        #[cfg(rust_compiler="mrustc")]
 | 
			
		||||
+        let rv = unsafe { ::intrinsics::mrustc_slice_len(self) };
 | 
			
		||||
+        rv
 | 
			
		||||
     }
 | 
			
		||||
| 
						 | 
				
			
			@ -171,10 +171,12 @@ in turn be used to build the final Rust.")
 | 
			
		|||
  (package
 | 
			
		||||
    (name "rust")
 | 
			
		||||
    (version "1.19.0")
 | 
			
		||||
    (source (rust-source version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"))
 | 
			
		||||
    (source (rust-source version "0l8c14qsf42rmkqy92ahij4vf356dbyspxcips1aswpvad81y8qm"
 | 
			
		||||
            #:patches '("rust-1.19-mrustc.patch")))
 | 
			
		||||
    (outputs '("out" "cargo"))
 | 
			
		||||
    (arguments
 | 
			
		||||
     `(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
 | 
			
		||||
       #:modules ((guix build utils) (ice-9 match) (guix build gnu-build-system))
 | 
			
		||||
       #:phases
 | 
			
		||||
       (modify-phases %standard-phases
 | 
			
		||||
         (add-after 'unpack 'set-env
 | 
			
		||||
| 
						 | 
				
			
			@ -187,6 +189,24 @@ in turn be used to build the final Rust.")
 | 
			
		|||
             ;; guix llvm-3.9.1 package installs only shared libraries
 | 
			
		||||
             (setenv "LLVM_LINK_SHARED" "1")
 | 
			
		||||
             #t))
 | 
			
		||||
         (add-after 'unpack 'patch-cargo-tomls
 | 
			
		||||
           (lambda* (#:key inputs outputs #:allow-other-keys)
 | 
			
		||||
             (substitute* "src/librustc_errors/Cargo.toml"
 | 
			
		||||
               (("[[]dependencies[]]") "
 | 
			
		||||
[dependencies]
 | 
			
		||||
term = \"0.4.4\"
 | 
			
		||||
"))
 | 
			
		||||
             (substitute* "src/librustc/Cargo.toml"
 | 
			
		||||
               (("[[]dependencies[]]") "
 | 
			
		||||
[dependencies]
 | 
			
		||||
getopts = { path = \"../libgetopts\" }
 | 
			
		||||
"))
 | 
			
		||||
             (substitute* "src/librustdoc/Cargo.toml"
 | 
			
		||||
               (("[[]dependencies[]]") "
 | 
			
		||||
[dependencies]
 | 
			
		||||
test = { path = \"../libtest\" }
 | 
			
		||||
"))
 | 
			
		||||
             #t))
 | 
			
		||||
         (add-after 'unpack 'patch-tests
 | 
			
		||||
           (lambda* (#:key inputs #:allow-other-keys)
 | 
			
		||||
             (let ((bash (assoc-ref inputs "bash")))
 | 
			
		||||
| 
						 | 
				
			
			@ -243,12 +263,97 @@ in turn be used to build the final Rust.")
 | 
			
		|||
                  (generate-checksums dir ,%cargo-reference-project-file)))
 | 
			
		||||
              (find-files "src/vendor" ".cargo-checksum.json"))
 | 
			
		||||
             #t))
 | 
			
		||||
         ;; This phase is overridden by newer versions.
 | 
			
		||||
         (replace 'configure
 | 
			
		||||
           (const #t))
 | 
			
		||||
         ;; This phase is overridden by newer versions.
 | 
			
		||||
         (replace 'build
 | 
			
		||||
           (lambda* (#:key inputs outputs #:allow-other-keys)
 | 
			
		||||
             (let ((rustc-bootstrap (assoc-ref inputs "rustc-bootstrap")))
 | 
			
		||||
               (setenv "CFG_COMPILER_HOST_TRIPLE"
 | 
			
		||||
                ,(nix-system->gnu-triplet (%current-system)))
 | 
			
		||||
               (setenv "CFG_RELEASE" "")
 | 
			
		||||
               (setenv "CFG_RELEASE_CHANNEL" "stable")
 | 
			
		||||
               (setenv "CFG_LIBDIR_RELATIVE" "lib")
 | 
			
		||||
               (setenv "CFG_VERSION" "1.19.0-stable-mrustc")
 | 
			
		||||
               ; bad: (setenv "CFG_PREFIX" "mrustc") ; FIXME output path.
 | 
			
		||||
               (mkdir-p "output")
 | 
			
		||||
               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
 | 
			
		||||
                       "src/rustc" "--vendor-dir" "src/vendor"
 | 
			
		||||
                       "--output-dir" "output/rustc-build"
 | 
			
		||||
                       "-L" (string-append rustc-bootstrap "/lib/mrust")
 | 
			
		||||
                       "-j" "1")
 | 
			
		||||
               (install-file "output/rustc-build/rustc" "output") ; FIXME: Remove?
 | 
			
		||||
               (setenv "CFG_COMPILER_HOST_TRIPLE" #f)
 | 
			
		||||
               (setenv "CFG_RELEASE" #f)
 | 
			
		||||
               (setenv "CFG_RELEASE_CHANNEL" #f)
 | 
			
		||||
               (setenv "CFG_VERSION" #f)
 | 
			
		||||
               (setenv "CFG_PREFIX" #f)
 | 
			
		||||
               (setenv "CFG_LIBDIR_RELATIVE" #f)
 | 
			
		||||
               (invoke (string-append rustc-bootstrap "/tools/bin/minicargo")
 | 
			
		||||
                       "src/tools/cargo" "--vendor-dir" "src/vendor"
 | 
			
		||||
                       "--output-dir" "output/cargo-build"
 | 
			
		||||
                       "-L" "output/"
 | 
			
		||||
                       "-L" (string-append rustc-bootstrap "/lib/mrust")
 | 
			
		||||
                       "-j" "1")
 | 
			
		||||
               ;; Now use the newly-built rustc to build the libraries.
 | 
			
		||||
               ;; One day that could be replaced by:
 | 
			
		||||
               ;; (invoke "output/cargo-build/cargo" "build"
 | 
			
		||||
               ;;         "--manifest-path" "src/bootstrap/Cargo.toml"
 | 
			
		||||
               ;;         "--verbose") ; "--locked" "--frozen"
 | 
			
		||||
               ;; but right now, Cargo has problems with libstd's circular
 | 
			
		||||
               ;; dependencies.
 | 
			
		||||
               (mkdir-p "output/target-libs")
 | 
			
		||||
               (for-each ((@ (ice-9 match) match-lambda)
 | 
			
		||||
                          ((name . flags)
 | 
			
		||||
                            (write name)
 | 
			
		||||
                            (newline)
 | 
			
		||||
                            (apply invoke
 | 
			
		||||
                                   "output/rustc-build/rustc"
 | 
			
		||||
                                   "-C" (string-append "linker="
 | 
			
		||||
                                                       (getenv "CC"))
 | 
			
		||||
                                   "-L" "output/target-libs"
 | 
			
		||||
                                   (string-append "src/" name "/lib.rs")
 | 
			
		||||
                                   "-o"
 | 
			
		||||
                                   (string-append "output/target-libs/"
 | 
			
		||||
                                                  (car (string-split name #\/))
 | 
			
		||||
                                                  ".rlib")
 | 
			
		||||
                                   flags)))
 | 
			
		||||
                         '(("libcore")
 | 
			
		||||
                           ("libstd_unicode")
 | 
			
		||||
                           ("liballoc")
 | 
			
		||||
                           ("libcollections")
 | 
			
		||||
                           ("librand")
 | 
			
		||||
                           ("liblibc/src" "--cfg" "stdbuild")
 | 
			
		||||
                           ("libunwind" "-l" "gcc_s")
 | 
			
		||||
                           ("libcompiler_builtins")
 | 
			
		||||
                           ("liballoc_system")
 | 
			
		||||
                           ("libpanic_unwind")
 | 
			
		||||
                           ;; Uses "cc" to link.
 | 
			
		||||
                           ("libstd" "-l" "dl" "-l" "rt" "-l" "pthread")
 | 
			
		||||
                           ("libarena")))
 | 
			
		||||
               #t)))
 | 
			
		||||
         ;; This phase is overridden by newer versions.
 | 
			
		||||
         (replace 'check
 | 
			
		||||
           (const #t))
 | 
			
		||||
         ;; This phase is overridden by newer versions.
 | 
			
		||||
         (replace 'install
 | 
			
		||||
           (const #t)))))
 | 
			
		||||
           (lambda* (#:key inputs outputs #:allow-other-keys)
 | 
			
		||||
             (let* ((out (assoc-ref outputs "out"))
 | 
			
		||||
                    (target-system ,(or (%current-target-system)
 | 
			
		||||
                                        (nix-system->gnu-triplet
 | 
			
		||||
                                         (%current-system))))
 | 
			
		||||
                    (out-libs (string-append out "/lib/rustlib/"
 | 
			
		||||
                                             target-system "/lib")))
 | 
			
		||||
                                        ;(setenv "CFG_PREFIX" out)
 | 
			
		||||
               (mkdir-p out-libs)
 | 
			
		||||
               (copy-recursively "output/target-libs" out-libs)
 | 
			
		||||
               (install-file "output/rustc-build/rustc"
 | 
			
		||||
                             (string-append out "/bin"))
 | 
			
		||||
               (install-file "output/cargo-build/cargo"
 | 
			
		||||
                             (string-append (assoc-ref outputs "cargo")
 | 
			
		||||
                                            "/bin")))
 | 
			
		||||
             #t)))))
 | 
			
		||||
    (build-system gnu-build-system)
 | 
			
		||||
    (native-inputs
 | 
			
		||||
     `(("bison" ,bison) ; For the tests
 | 
			
		||||
| 
						 | 
				
			
			@ -258,8 +363,8 @@ in turn be used to build the final Rust.")
 | 
			
		|||
       ("git" ,git)
 | 
			
		||||
       ("procps" ,procps) ; For the tests
 | 
			
		||||
       ("python-2" ,python-2)
 | 
			
		||||
       ("rustc-bootstrap" ,rust-bootstrap)
 | 
			
		||||
       ("cargo-bootstrap" ,rust-bootstrap "cargo")
 | 
			
		||||
       ("rustc-bootstrap" ,mrustc)
 | 
			
		||||
       ("cargo-bootstrap" ,mrustc "cargo")
 | 
			
		||||
       ("pkg-config" ,pkg-config) ; For "cargo"
 | 
			
		||||
       ("which" ,which)))
 | 
			
		||||
    (inputs
 | 
			
		||||
| 
						 | 
				
			
			@ -400,6 +505,18 @@ safety and thread safety guarantees.")
 | 
			
		|||
    (version "1.23.0")
 | 
			
		||||
    (source (rust-source version "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l"))
 | 
			
		||||
    (outputs '("out" "doc" "cargo"))
 | 
			
		||||
    (native-inputs
 | 
			
		||||
     `(("bison" ,bison) ; For the tests
 | 
			
		||||
       ("cmake" ,cmake)
 | 
			
		||||
       ("flex" ,flex) ; For the tests
 | 
			
		||||
       ("gdb" ,gdb)   ; For the tests
 | 
			
		||||
       ("git" ,git)
 | 
			
		||||
       ("procps" ,procps) ; For the tests
 | 
			
		||||
       ("python-2" ,python-2)
 | 
			
		||||
       ("rustc-bootstrap" ,rust-bootstrap)
 | 
			
		||||
       ("cargo-bootstrap" ,rust-bootstrap "cargo")
 | 
			
		||||
       ("pkg-config" ,pkg-config) ; For "cargo"
 | 
			
		||||
       ("which" ,which)))
 | 
			
		||||
    (arguments
 | 
			
		||||
     (substitute-keyword-arguments (package-arguments rust-1.19)
 | 
			
		||||
       ((#:phases phases)
 | 
			
		||||
| 
						 | 
				
			
			@ -410,6 +527,8 @@ safety and thread safety guarantees.")
 | 
			
		|||
               (substitute* "src/binaryen/CMakeLists.txt"
 | 
			
		||||
                 (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
 | 
			
		||||
               #t))
 | 
			
		||||
           ;; TODO: Revisit this and find out whether that's needed after all.
 | 
			
		||||
           (delete 'patch-cargo-tomls)
 | 
			
		||||
           (add-after 'patch-tests 'patch-cargo-tests
 | 
			
		||||
             (lambda _
 | 
			
		||||
               (substitute* "src/tools/cargo/tests/build.rs"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue