summaryrefslogtreecommitdiff
path: root/gnu/packages/bootstrap.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/bootstrap.scm')
-rw-r--r--gnu/packages/bootstrap.scm267
1 files changed, 206 insertions, 61 deletions
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index c598cedc0a..8bd0c4eaf3 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -32,11 +32,13 @@
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module ((guix store)
- #:select (run-with-store add-to-store add-text-to-store))
+ #:select (%store-monad interned-file text-file store-lift))
#:use-module ((guix derivations)
- #:select (derivation derivation-input derivation->output-path))
- #:use-module ((guix utils) #:select (gnu-triplet->nix-system))
+ #:select (raw-derivation derivation-input derivation->output-path))
+ #:use-module (guix utils)
+ #:use-module ((guix build utils) #:select (elf-file?))
#:use-module ((guix gexp) #:select (lower-object))
+ #:use-module (guix monads)
#:use-module (guix memoization)
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
@@ -89,6 +91,15 @@
,(base32 "1j51gv08sfg277yxj73xd564wjq3f8xwd6s9rbcg8v9gms47m4cx"))
("xz"
,(base32 "1d779rwsrasphg5g3r37qppcqy3p7ay1jb1y83w7x4i3qsc7zjy2")))
+ ("powerpc-linux"
+ ("bash"
+ ,(base32 "0hwlw5lcyjzadprf5fm0cv4zb6jw667g9amnmhq0lbixasy7j72j"))
+ ("mkdir"
+ ,(base32 "12lfwh5p8pp06250wgi9mdvjv1jdfpd5xpmvfc0616aj0xqh09hp"))
+ ("tar"
+ ,(base32 "00sbmwl8qh6alxv9mw4hvj1j4yipwmw5mrw6qad8bi2pr7ya5386"))
+ ("xz"
+ ,(base32 "0hi47y6zh5zz137i59l5ibw92x6g54zn7ris1b1ym9rvavsasg7b")))
("armhf-linux"
("bash"
,(base32 "0s6f1s26g4dsrrkl39zblvwpxmbzi6n9mgqf6vxsqz42gik6bgyn"))
@@ -133,12 +144,22 @@
("tar"
,(base32 "150c8948cz8r208g6qgn2dn4f4zs5kpgbpbg6bwag6yw42rapw2l"))
("xz"
- ,(base32 "0v5738idy9pqzcbrjdpxi5c6qs5m78zrpsydmrpx5cfcfzbkxzjh")))))
+ ,(base32 "0v5738idy9pqzcbrjdpxi5c6qs5m78zrpsydmrpx5cfcfzbkxzjh")))
+ ("riscv64-linux"
+ ("bash"
+ ,(base32 "0almlf73k6hbm495kzf4bw1rzsg5qddn7z2rf5l3d1xcapac2hj3"))
+ ("mkdir"
+ ,(base32 "0rg1amdcqfkplcy1608jignl8jq0wqzfkp430mwik3f62959gya6"))
+ ("tar"
+ ,(base32 "17d3x27qhiwk7h6ns0xrvbrq0frxz89mjjh2cdwx2rraq5x6wffm"))
+ ("xz"
+ ,(base32 "0nxn75xf386vdq3igmgm8gnyk4h4x0cm8jv71vlb2jvwxh0cyw1q")))))
(define %bootstrap-executable-base-urls
;; This is where the bootstrap executables come from.
'("https://git.savannah.gnu.org/cgit/guix.git/plain/gnu/packages/bootstrap/"
"https://alpha.gnu.org/gnu/guix/bootstrap/"
+ "http://flashner.co.il/guix/bootstrap/"
"http://lilypond.org/janneke/guix/"))
(define (bootstrap-executable-file-name system program)
@@ -146,6 +167,8 @@
(match system
("powerpc64le-linux" (string-append system "/20210106/" program))
("i586-gnu" (string-append system "/20200326/" program))
+ ("powerpc-linux" (string-append system "/20200923/bin/" program))
+ ("riscv64-linux" (string-append system "/20210725/bin/" program))
(_ (string-append system "/" program
"?id=44f07d1dc6806e97c4e9ee3e6be883cc59dc666e"))))
@@ -341,12 +364,16 @@ or false to signal an error."
(match system
("aarch64-linux"
"/20170217/guile-2.0.14.tar.xz")
+ ("powerpc-linux"
+ "/20200923/guile-2.0.14.tar.xz")
("armhf-linux"
"/20150101/guile-2.0.11.tar.xz")
("i586-gnu"
"/20200326/guile-static-stripped-2.0.14-i586-pc-gnu.tar.xz")
("powerpc64le-linux"
"/20210106/guile-static-stripped-2.0.14-powerpc64le-linux-gnu.tar.xz")
+ ("riscv64-linux"
+ "/20210725/guile-3.0.2.tar.xz")
(_
"/20131110/guile-2.0.9.tar.xz"))))
@@ -366,7 +393,11 @@ or false to signal an error."
("aarch64-linux"
(base32 "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))
("i586-gnu"
- (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))))
+ (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))
+ ("powerpc-linux"
+ (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))
+ ("riscv64-linux"
+ (base32 "12pqmhsbbp7hh9r1bjdl14l3a4q06plpz6dcks9dysb4czay8p9f"))))
(define (bootstrap-guile-origin system)
"Return an <origin> object for the Guile tarball of SYSTEM."
@@ -376,59 +407,58 @@ or false to signal an error."
%bootstrap-base-urls))
(sha256 (bootstrap-guile-hash system))))
-(define (download-bootstrap-guile store system)
+(define (download-bootstrap-guile system)
"Return a derivation that downloads the bootstrap Guile tarball for SYSTEM."
(let* ((path (bootstrap-guile-url-path system))
(base (basename path))
(urls (map (cut string-append <> path) %bootstrap-base-urls)))
- (run-with-store store
- (url-fetch urls 'sha256 (bootstrap-guile-hash system)
- #:system system))))
+ (url-fetch urls 'sha256 (bootstrap-guile-hash system)
+ #:system system)))
-(define* (raw-build store name inputs
+(define* (raw-build name inputs
#:key outputs system search-paths
#:allow-other-keys)
(define (->store file)
- (run-with-store store
- (lower-object (bootstrap-executable file system)
- system)))
-
- (let* ((tar (->store "tar"))
- (xz (->store "xz"))
- (mkdir (->store "mkdir"))
- (bash (->store "bash"))
- (guile (download-bootstrap-guile store system))
- ;; The following code, run by the bootstrap guile after it is
- ;; unpacked, creates a wrapper for itself to set its load path.
- ;; This replaces the previous non-portable method based on
- ;; reading the /proc/self/exe symlink.
- (make-guile-wrapper
- '(begin
- (use-modules (ice-9 match))
- (match (command-line)
- ((_ out bash)
- (let ((bin-dir (string-append out "/bin"))
- (guile (string-append out "/bin/guile"))
- (guile-real (string-append out "/bin/.guile-real"))
- ;; We must avoid using a bare dollar sign in this code,
- ;; because it would be interpreted by the shell.
- (dollar (string (integer->char 36))))
- (chmod bin-dir #o755)
- (rename-file guile guile-real)
- (call-with-output-file guile
- (lambda (p)
- (format p "\
+ (lower-object (bootstrap-executable file system)
+ system))
+
+ (define (make-guile-wrapper bash guile-real)
+ ;; The following code, run by the bootstrap guile after it is unpacked,
+ ;; creates a wrapper for itself to set its load path. This replaces the
+ ;; previous non-portable method based on reading the /proc/self/exe
+ ;; symlink.
+ '(begin
+ (use-modules (ice-9 match))
+ (match (command-line)
+ ((_ out bash)
+ (let ((bin-dir (string-append out "/bin"))
+ (guile (string-append out "/bin/guile"))
+ (guile-real (string-append out "/bin/.guile-real"))
+ ;; We must avoid using a bare dollar sign in this code,
+ ;; because it would be interpreted by the shell.
+ (dollar (string (integer->char 36))))
+ (chmod bin-dir #o755)
+ (rename-file guile guile-real)
+ (call-with-output-file guile
+ (lambda (p)
+ (format p "\
#!~a
export GUILE_SYSTEM_PATH=~a/share/guile/2.0
export GUILE_SYSTEM_COMPILED_PATH=~a/lib/guile/2.0/ccache
exec -a \"~a0\" ~a \"~a@\"\n"
- bash out out dollar guile-real dollar)))
- (chmod guile #o555)
- (chmod bin-dir #o555))))))
- (builder
- (add-text-to-store store
- "build-bootstrap-guile.sh"
- (format #f "
+ bash out out dollar guile-real dollar)))
+ (chmod guile #o555)
+ (chmod bin-dir #o555))))))
+
+ (mlet* %store-monad ((tar (->store "tar"))
+ (xz (->store "xz"))
+ (mkdir (->store "mkdir"))
+ (bash (->store "bash"))
+ (guile (download-bootstrap-guile system))
+ (wrapper -> (make-guile-wrapper bash guile))
+ (builder
+ (text-file "build-bootstrap-guile.sh"
+ (format #f "
echo \"unpacking bootstrap Guile to '$out'...\"
~a $out
cd $out
@@ -441,19 +471,89 @@ $out/bin/guile -c ~s $out ~a
# Sanity check.
$out/bin/guile --version~%"
- (derivation->output-path mkdir)
- (derivation->output-path xz)
- (derivation->output-path tar)
- (format #f "~s" make-guile-wrapper)
- (derivation->output-path bash)))))
- (derivation store name
- (derivation->output-path bash) `(,builder)
- #:system system
- #:inputs (map derivation-input
- (list bash mkdir tar xz guile))
- #:sources (list builder)
- #:env-vars `(("GUILE_TARBALL"
- . ,(derivation->output-path guile))))))
+ (derivation->output-path mkdir)
+ (derivation->output-path xz)
+ (derivation->output-path tar)
+ (object->string wrapper)
+ (derivation->output-path bash)))))
+ (raw-derivation name
+ (derivation->output-path bash) `(,builder)
+ #:system system
+ #:inputs (map derivation-input
+ (list bash mkdir tar xz guile))
+ #:sources (list builder)
+ #:env-vars `(("GUILE_TARBALL"
+ . ,(derivation->output-path guile))))))
+
+(define* (raw-build-guile3 name inputs
+ #:key outputs system search-paths
+ #:allow-other-keys)
+ (define (->store file)
+ (lower-object (bootstrap-executable file system)
+ system))
+
+ (define (make-guile-wrapper bash guile-real)
+ ;; The following code, run by the bootstrap guile after it is unpacked,
+ ;; creates a wrapper for itself to set its load path. This replaces the
+ ;; previous non-portable method based on reading the /proc/self/exe
+ ;; symlink.
+ '(begin
+ (use-modules (ice-9 match))
+ (match (command-line)
+ ((_ out bash)
+ (let ((bin-dir (string-append out "/bin"))
+ (guile (string-append out "/bin/guile"))
+ (guile-real (string-append out "/bin/.guile-real"))
+ ;; We must avoid using a bare dollar sign in this code,
+ ;; because it would be interpreted by the shell.
+ (dollar (string (integer->char 36))))
+ (chmod bin-dir #o755)
+ (rename-file guile guile-real)
+ (call-with-output-file guile
+ (lambda (p)
+ (format p "\
+#!~a
+export GUILE_SYSTEM_PATH=~a/share/guile/3.0
+export GUILE_SYSTEM_COMPILED_PATH=~a/lib/guile/3.0/ccache
+exec -a \"~a0\" ~a \"~a@\"\n"
+ bash out out dollar guile-real dollar)))
+ (chmod guile #o555)
+ (chmod bin-dir #o555))))))
+
+ (mlet* %store-monad ((tar (->store "tar"))
+ (xz (->store "xz"))
+ (mkdir (->store "mkdir"))
+ (bash (->store "bash"))
+ (guile (download-bootstrap-guile system))
+ (wrapper -> (make-guile-wrapper bash guile))
+ (builder
+ (text-file "build-bootstrap-guile.sh"
+ (format #f "
+echo \"unpacking bootstrap Guile to '$out'...\"
+~a $out
+cd $out
+~a -dc < $GUILE_TARBALL | ~a xv
+
+# Use the bootstrap guile to create its own wrapper to set the load path.
+GUILE_SYSTEM_PATH=$out/share/guile/3.0 \
+GUILE_SYSTEM_COMPILED_PATH=$out/lib/guile/3.0/ccache \
+$out/bin/guile -c ~s $out ~a
+
+# Sanity check.
+$out/bin/guile --version~%"
+ (derivation->output-path mkdir)
+ (derivation->output-path xz)
+ (derivation->output-path tar)
+ (object->string wrapper)
+ (derivation->output-path bash)))))
+ (raw-derivation name
+ (derivation->output-path bash) `(,builder)
+ #:system system
+ #:inputs (map derivation-input
+ (list bash mkdir tar xz guile))
+ #:sources (list builder)
+ #:env-vars `(("GUILE_TARBALL"
+ . ,(derivation->output-path guile))))))
(define* (make-raw-bag name
#:key source inputs native-inputs outputs
@@ -462,7 +562,9 @@ $out/bin/guile --version~%"
(name name)
(system system)
(build-inputs inputs)
- (build raw-build)))
+ (build (cond ((target-riscv64?)
+ raw-build-guile3)
+ (else raw-build)))))
(define %bootstrap-guile
;; The Guile used to run the build scripts of the initial derivations.
@@ -500,6 +602,10 @@ $out/bin/guile --version~%"
"/20210106/static-binaries-0-powerpc64le-linux-gnu.tar.xz")
("i586-gnu"
"/20200326/static-binaries-0-i586-pc-gnu.tar.xz")
+ ("powerpc-linux"
+ "/20200923/static-binaries.tar.xz")
+ ("riscv64-linux"
+ "/20210725/static-binaries.tar.xz")
(_
"/20131110/static-binaries.tar.xz")))
%bootstrap-base-urls))
@@ -523,6 +629,12 @@ $out/bin/guile --version~%"
("i586-gnu"
(base32
"17kllqnf3fg79gzy9ansgi801c46yh9c23h4d923plvb0nfm1cfn"))
+ ("powerpc-linux"
+ (base32
+ "0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
+ ("riscv64-linux"
+ (base32
+ "0x0xjlpmyh6rkr51p00gp6pscgl6zjida1rsg8vk3rinyi6rrbkg"))
("mips64el-linux"
(base32
"072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
@@ -573,6 +685,10 @@ $out/bin/guile --version~%"
"/20210106/binutils-static-stripped-2.34-powerpc64le-linux-gnu.tar.xz")
("i586-gnu"
"/20200326/binutils-static-stripped-2.34-i586-pc-gnu.tar.xz")
+ ("powerpc-linux"
+ "/20200923/binutils-2.35.1.tar.xz")
+ ("riscv64-linux"
+ "/20210725/binutils-2.34.tar.xz")
(_
"/20131110/binutils-2.23.2.tar.xz")))
%bootstrap-base-urls))
@@ -593,9 +709,15 @@ $out/bin/guile --version~%"
("powerpc64le-linux"
(base32
"1klxy945c61134mzhqzz2gbk8w0n8jq7arwkrvz78d22ff2q0cwz"))
+ ("riscv64-linux"
+ (base32
+ "0n9qf4vbilfmh1lknhw000waakj4q6s50pnjazr5137skm976z5m"))
("i586-gnu"
(base32
"11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
+ ("powerpc-linux"
+ (base32
+ "0asbg1c4avkrvh057mx0942xwddd136jni382zqsxzn79ls42yq8"))
("mips64el-linux"
(base32
"1x8kkhcxmfyzg1ddpz2pxs6fbdl6412r7x0nzbmi5n7mj8zw2gy7"))))))
@@ -653,6 +775,10 @@ $out/bin/guile --version~%"
"/20210106/glibc-stripped-2.31-powerpc64le-linux-gnu.tar.xz")
("i586-gnu"
"/20200326/glibc-stripped-2.31-i586-pc-gnu.tar.xz")
+ ("powerpc-linux"
+ "/20200923/glibc-2.32.tar.xz")
+ ("riscv64-linux"
+ "/20210725/glibc-2.31.tar.xz")
(_
"/20131110/glibc-2.18.tar.xz")))
%bootstrap-base-urls))
@@ -673,9 +799,15 @@ $out/bin/guile --version~%"
("powerpc64le-linux"
(base32
"1a1df6z8gkaq09md3jy94lixnh20599p58p0s856p10xwjaqr1iz"))
+ ("riscv64-linux"
+ (base32
+ "0d9x80vm7ca1pd2whcmpm1h14zxpb58kqajlxlwffzm04xfsjnxm"))
("i586-gnu"
(base32
"14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
+ ("powerpc-linux"
+ (base32
+ "0smmssyjrlk5cvx49586smmk81gkwff0i6r91n4rir4jm6ba25sb"))
("mips64el-linux"
(base32
"0k97a3whzx3apsi9n2cbsrr79ad6lh00klxph9hw4fqyp1abkdsg")))))))))
@@ -749,6 +881,10 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
"/20210106/gcc-stripped-5.5.0-powerpc64le-linux-gnu.tar.xz")
("i586-gnu"
"/20200326/gcc-stripped-5.5.0-i586-pc-gnu.tar.xz")
+ ("powerpc-linux"
+ "/20200923/gcc-5.5.0.tar.xz")
+ ("riscv64-linux"
+ "/20210725/gcc-7.5.0.tar.xz")
(_
"/20131110/gcc-4.8.2.tar.xz")))
%bootstrap-base-urls))
@@ -769,17 +905,26 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
("powerpc64le-linux"
(base32
"151kjsai25vz2s667bgzpisx8f281fpl3n9pxz2yrp9jlnadz3m1"))
+ ("riscv64-linux"
+ (base32
+ "1k4mbnb54wj2q37fgshf5dfixixqnhn002vhzvi9pnb57xb9v14d"))
("i586-gnu"
(base32
"1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))
+ ("powerpc-linux"
+ (base32
+ "1p7df3yixhm87dw5sccc6yn1i9db1r9hnmsg87wq5xi4rfmirq7w"))
("mips64el-linux"
(base32
"1m5miqkyng45l745n0sfafdpjkqv9225xf44jqkygwsipj2cv9ks")))))))))
(native-search-paths
(list (search-path-specification
- (variable "CPATH")
+ (variable "C_INCLUDE_PATH")
(files '("include")))
(search-path-specification
+ (variable "CPLUS_INCLUDE_PATH")
+ (files '("include/c++" "include")))
+ (search-path-specification
(variable "LIBRARY_PATH")
(files '("lib" "lib64")))))
(synopsis "Bootstrap binaries of the GNU Compiler Collection")