From: Efraim Flashner <efraim@flashner.co.il>
To: 50091@debbugs.gnu.org
Cc: Efraim Flashner <efraim@flashner.co.il>
Subject: [bug#50091] [PATCH 02/21] gnu: bootstrap: Add support for riscv64-linux.
Date: Tue, 17 Aug 2021 13:19:00 +0300 [thread overview]
Message-ID: <049e686bea6f7f4186fbc6da38315f707763bf3f.1629193993.git.efraim@flashner.co.il> (raw)
In-Reply-To: <cover.1629193993.git.efraim@flashner.co.il>
On 7d93b21ab1c132990054372a9677c1639d54e631
gnu: glibc-for-bootstrap: Update patch.
Run
./pre-inst-env guix build --target=riscv64-linux-gnu bootstrap-tarballs
Producing
/gnu/store/4hdzva9i0wyyfbgj1lmqc1wkk644pv07-bootstrap-tarballs-0
With guix hash -rx
1nj0fdgj08bbmfny01mp2blv7c3p2iciqh31zmf04ap5s7ygsqlp
* gnu/packages/bootstrap.scm (%bootstrap-executables): Add entries for
riscv64-linux.
(%bootstrap-guile-hash, %bootstrap-coreutils&co, %bootstrap-binutils,
%bootstrap-glibc, %bootstrap-gcc): Add entry for riscv64-linux.
(raw-build-guile3): New procedure.
(make-raw-bag): Use raw-build-guile3 for riscv64-linux.
* gnu/packages/commencement.scm (findutils-boot0)[arguments]: Don't
override TIME_T_32_BIT_OK on riscv64-linux.
* guix/packages.scm (%supported-systems): Add riscv64-linux.
(%cuirass-supported-systems): Remove riscv64-linux.
* guix/utils.scm (target-64bit?): Add riscv64-linux.
* m4/guix.m4: Add riscv64-linux as a supported system.
---
gnu/packages/bootstrap.scm | 112 +++++++++++++++++++++++++++++++++-
gnu/packages/commencement.scm | 4 +-
guix/packages.scm | 4 +-
guix/utils.scm | 3 +-
m4/guix.m4 | 4 +-
5 files changed, 118 insertions(+), 9 deletions(-)
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index 5a8028a465..260c1b5b91 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -144,7 +144,16 @@
("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.
@@ -159,6 +168,7 @@
("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"))))
@@ -362,6 +372,8 @@ or false to signal an error."
"/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"))))
@@ -383,7 +395,9 @@ or false to signal an error."
("i586-gnu"
(base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))
("powerpc-linux"
- (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))))
+ (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))
+ ("riscv64-linux"
+ (base32 "12pqmhsbbp7hh9r1bjdl14l3a4q06plpz6dcks9dysb4czay8p9f"))))
(define (bootstrap-guile-origin system)
"Return an <origin> object for the Guile tarball of SYSTEM."
@@ -455,6 +469,76 @@ GUILE_SYSTEM_PATH=$out/share/guile/2.0 \
GUILE_SYSTEM_COMPILED_PATH=$out/lib/guile/2.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* (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)
@@ -478,7 +562,9 @@ $out/bin/guile --version~%"
(name name)
(system system)
(build-inputs inputs)
- (build raw-build)))
+ (build (cond ((target-riscv?)
+ raw-build-guile3)
+ (else raw-build)))))
(define %bootstrap-guile
;; The Guile used to run the build scripts of the initial derivations.
@@ -518,6 +604,8 @@ $out/bin/guile --version~%"
"/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))
@@ -544,6 +632,9 @@ $out/bin/guile --version~%"
("powerpc-linux"
(base32
"0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
+ ("riscv64-linux"
+ (base32
+ "0x0xjlpmyh6rkr51p00gp6pscgl6zjida1rsg8vk3rinyi6rrbkg"))
("mips64el-linux"
(base32
"072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
@@ -596,6 +687,8 @@ $out/bin/guile --version~%"
"/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))
@@ -616,6 +709,9 @@ $out/bin/guile --version~%"
("powerpc64le-linux"
(base32
"1klxy945c61134mzhqzz2gbk8w0n8jq7arwkrvz78d22ff2q0cwz"))
+ ("riscv64-linux"
+ (base32
+ "0n9qf4vbilfmh1lknhw000waakj4q6s50pnjazr5137skm976z5m"))
("i586-gnu"
(base32
"11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
@@ -681,6 +777,8 @@ $out/bin/guile --version~%"
"/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))
@@ -701,6 +799,9 @@ $out/bin/guile --version~%"
("powerpc64le-linux"
(base32
"1a1df6z8gkaq09md3jy94lixnh20599p58p0s856p10xwjaqr1iz"))
+ ("riscv64-linux"
+ (base32
+ "0d9x80vm7ca1pd2whcmpm1h14zxpb58kqajlxlwffzm04xfsjnxm"))
("i586-gnu"
(base32
"14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
@@ -782,6 +883,8 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
"/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))
@@ -802,6 +905,9 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
("powerpc64le-linux"
(base32
"151kjsai25vz2s667bgzpisx8f281fpl3n9pxz2yrp9jlnadz3m1"))
+ ("riscv64-linux"
+ (base32
+ "1k4mbnb54wj2q37fgshf5dfixixqnhn002vhzvi9pnb57xb9v14d"))
("i586-gnu"
(base32
"1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index dc9b372132..d395b261c2 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -2496,7 +2496,9 @@ exec " gcc "/bin/" program
,@(substitute-keyword-arguments (package-arguments findutils)
((#:configure-flags flags ''())
`(append
- ,(if (target-64bit?)
+ ;; TODO: Figure out exactly with architectures need this.
+ ,(if (and (target-64bit?)
+ (not (target-riscv?)))
''("TIME_T_32_BIT_OK=yes")
''())
,(match (%current-system)
diff --git a/guix/packages.scm b/guix/packages.scm
index 2349bb4340..7e86da9aae 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -366,7 +366,7 @@ name of its URI."
;; This is the list of system types that are supported. By default, we
;; expect all packages to build successfully here.
'("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux" "mips64el-linux" "i586-gnu"
- "powerpc64le-linux" "powerpc-linux"))
+ "powerpc64le-linux" "powerpc-linux" "riscv64-linux"))
(define %hurd-systems
;; The GNU/Hurd systems for which support is being developed.
@@ -377,7 +377,7 @@ name of its URI."
;;
;; XXX: MIPS is unavailable in CI:
;; <https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00790.html>.
- (fold delete %supported-systems '("mips64el-linux" "powerpc-linux")))
+ (fold delete %supported-systems '("mips64el-linux" "powerpc-linux" "riscv64-linux")))
(define-inlinable (sanitize-inputs inputs)
"Sanitize INPUTS by turning it into a list of name/package tuples if it's
diff --git a/guix/utils.scm b/guix/utils.scm
index 134879feb1..3ca846f075 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -707,7 +707,8 @@ architecture (x86_64)?"
(define* (target-64bit? #:optional (system (or (%current-target-system)
(%current-system))))
- (any (cut string-prefix? <> system) '("x86_64" "aarch64" "mips64" "powerpc64")))
+ (any (cut string-prefix? <> system) '("x86_64" "aarch64" "mips64"
+ "powerpc64" "riscv64")))
(define* (cc-for-target #:optional (target (%current-target-system)))
(if target
diff --git a/m4/guix.m4 b/m4/guix.m4
index e778a56004..c79d3c3bc5 100644
--- a/m4/guix.m4
+++ b/m4/guix.m4
@@ -1,7 +1,7 @@
dnl GNU Guix --- Functional package management for GNU
dnl Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
dnl Copyright © 2014 Mark H Weaver <mhw@netris.org>
-dnl Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+dnl Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
dnl Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
dnl
dnl This file is part of GNU Guix.
@@ -89,7 +89,7 @@ courageous and port the GNU System distribution to it (see
# Currently only Linux-based systems are supported, and only on some
# platforms.
case "$guix_system" in
- x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|powerpc-linux)
+ x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|powerpc-linux|riscv64-linux)
;;
*)
if test "x$guix_courageous" = "xyes"; then
--
2.32.0
next prev parent reply other threads:[~2021-08-17 10:23 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-17 10:10 [bug#50091] [PATCH 00/21] Add riscv64 support Efraim Flashner
2021-08-17 10:18 ` [bug#50091] [PATCH 01/21] utils: Define 'target-riscv?' predicate Efraim Flashner
2021-08-17 10:27 ` Maxime Devos
2021-08-17 10:28 ` Efraim Flashner
2021-08-17 10:30 ` Maxime Devos
2021-08-17 10:19 ` Efraim Flashner [this message]
2021-08-24 11:53 ` [bug#50091] [PATCH 02/21] gnu: bootstrap: Add support for riscv64-linux Efraim Flashner
2021-09-23 7:35 ` Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 03/21] gnu: gcc-boot0: Use libstdc++-boot0-gcc7 on riscv64-linux Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 04/21] gnu: %boot3-inputs: Add missing input Efraim Flashner
2021-08-17 10:29 ` Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 05/21] gnu: guile: Fix building on riscv64-linux Efraim Flashner
2021-08-17 10:30 ` Efraim Flashner
2021-08-17 10:44 ` Maxime Devos
2021-08-17 10:56 ` Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 06/21] gnu: %final-inputs: Add implied gcc:lib input Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 07/21] gnu: bdb: Fix building on riscv64-linux Efraim Flashner
2021-08-17 14:58 ` Thiago Jung Bauermann via Guix-patches via
2021-09-23 7:28 ` Efraim Flashner
2021-09-28 4:01 ` Thiago Jung Bauermann via Guix-patches via
2021-08-17 10:19 ` [bug#50091] [PATCH 08/21] gnu: elfutils: " Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 09/21] gnu: pcre: " Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 10/21] gnu: openssl: Fix build " Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 11/21] gnu: libtool: Fix building " Efraim Flashner
2021-08-17 10:32 ` Efraim Flashner
2021-08-17 10:49 ` Maxime Devos
2021-08-17 10:58 ` Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 12/21] gnu: openblas: " Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 13/21] gnu: mesa: Add support for riscv64-linux Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 14/21] gnu: pcre2: Fix building on riscv64-linux Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 15/21] gnu: icu4c: Skip tests " Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 16/21] gnu: openblas-ilp64: Add riscv64-linux as a supported architecture Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 17/21] gnu: openlibm: Remove riscv64-linux from supported systems Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 18/21] gnu: texlive-bin: Fix building on riscv64-linux Efraim Flashner
2021-08-17 10:34 ` Efraim Flashner
2021-08-17 15:15 ` Thiago Jung Bauermann via Guix-patches via
2021-08-17 10:19 ` [bug#50091] [PATCH 19/21] gnu: texlive-updmap.cfg: Update hash Efraim Flashner
2021-08-17 15:23 ` Thiago Jung Bauermann via Guix-patches via
2021-08-18 7:10 ` Efraim Flashner
2021-08-18 10:41 ` Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 20/21] gnu: lz4: Build on riscv64-linux without valgrind Efraim Flashner
2021-08-17 10:35 ` Efraim Flashner
2021-08-17 15:26 ` Thiago Jung Bauermann via Guix-patches via
2021-08-18 9:10 ` Efraim Flashner
2021-08-17 10:19 ` [bug#50091] [PATCH 21/21] gnu: lapack: Fix building on riscv64-linux Efraim Flashner
2021-08-17 19:33 ` [bug#50091] [PATCH 10/21] gnu: openssl: Fix build " Sarah Morgensen
2021-08-18 7:09 ` Efraim Flashner
2021-08-18 10:44 ` Efraim Flashner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=049e686bea6f7f4186fbc6da38315f707763bf3f.1629193993.git.efraim@flashner.co.il \
--to=efraim@flashner.co.il \
--cc=50091@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).