gnu: bootstrap: Add support for riscv64-linux.

On 7d93b21ab1
    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.
* 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.
* doc/guix.texi (GNU Distribution): Add riscv64-linux.
This commit is contained in:
Efraim Flashner 2021-06-12 23:23:43 +03:00
parent b0822c918e
commit 03b45230d4
No known key found for this signature in database
GPG Key ID: 41AAE7DCCA3D8351
6 changed files with 127 additions and 9 deletions

View File

@ -33,7 +33,7 @@ Copyright @copyright{} 2015, 2016, 2017, 2019, 2020, 2021 Leo Famulari@*
Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus@*
Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} 2016 Ben Woodcroft@*
Copyright @copyright{} 2016, 2017, 2018, 2021 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018, 2021 Chris Marusich@*
Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner@* Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner@*
Copyright @copyright{} 2016 John Darrington@* Copyright @copyright{} 2016 John Darrington@*
Copyright @copyright{} 2016, 2017 Nikita Gillmann@* Copyright @copyright{} 2016, 2017 Nikita Gillmann@*
Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen@* Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen@*
@ -564,6 +564,15 @@ build (@pxref{Tracking Bugs and Patches}). That said, the Guix
community is actively working on improving this support, and now is a community is actively working on improving this support, and now is a
great time to try it and get involved! great time to try it and get involved!
@item riscv64-linux
little-endian 64-bit RISC-V processors, specifically RV64GC, and
Linux-Libre kernel. This playform is available as a "technology preview":
although it is supported, substitutes are not yet available from the
build farm (@pxref{Substitutes}), and some packages may fail to build
(@pxref{Tracking Bugs and Patches}). That said, the Guix community is
actively working on improving this support, and now is a great time to
try it and get involved!
@end table @end table
With Guix@tie{}System, you @emph{declare} all aspects of the operating system With Guix@tie{}System, you @emph{declare} all aspects of the operating system
@ -575,7 +584,8 @@ Manual}), the well-known GNU utilities and tool chain, as well as the
graphical environment or system services of your choice. graphical environment or system services of your choice.
Guix System is available on all the above platforms except Guix System is available on all the above platforms except
@code{mips64el-linux} and @code{powerpc64le-linux}. @code{mips64el-linux}, @code{powerpc-linux}, @code{powerpc64le-linux} and
@code{riscv64-linux}.
@noindent @noindent
For information on porting to other architectures or kernels, For information on porting to other architectures or kernels,

View File

@ -144,7 +144,16 @@
("tar" ("tar"
,(base32 "150c8948cz8r208g6qgn2dn4f4zs5kpgbpbg6bwag6yw42rapw2l")) ,(base32 "150c8948cz8r208g6qgn2dn4f4zs5kpgbpbg6bwag6yw42rapw2l"))
("xz" ("xz"
,(base32 "0v5738idy9pqzcbrjdpxi5c6qs5m78zrpsydmrpx5cfcfzbkxzjh"))))) ,(base32 "0v5738idy9pqzcbrjdpxi5c6qs5m78zrpsydmrpx5cfcfzbkxzjh")))
("riscv64-linux"
("bash"
,(base32 "0almlf73k6hbm495kzf4bw1rzsg5qddn7z2rf5l3d1xcapac2hj3"))
("mkdir"
,(base32 "0rg1amdcqfkplcy1608jignl8jq0wqzfkp430mwik3f62959gya6"))
("tar"
,(base32 "17d3x27qhiwk7h6ns0xrvbrq0frxz89mjjh2cdwx2rraq5x6wffm"))
("xz"
,(base32 "0nxn75xf386vdq3igmgm8gnyk4h4x0cm8jv71vlb2jvwxh0cyw1q")))))
(define %bootstrap-executable-base-urls (define %bootstrap-executable-base-urls
;; This is where the bootstrap executables come from. ;; This is where the bootstrap executables come from.
@ -159,6 +168,7 @@
("powerpc64le-linux" (string-append system "/20210106/" program)) ("powerpc64le-linux" (string-append system "/20210106/" program))
("i586-gnu" (string-append system "/20200326/" program)) ("i586-gnu" (string-append system "/20200326/" program))
("powerpc-linux" (string-append system "/20200923/bin/" program)) ("powerpc-linux" (string-append system "/20200923/bin/" program))
("riscv64-linux" (string-append system "/20210725/bin/" program))
(_ (string-append system "/" program (_ (string-append system "/" program
"?id=44f07d1dc6806e97c4e9ee3e6be883cc59dc666e")))) "?id=44f07d1dc6806e97c4e9ee3e6be883cc59dc666e"))))
@ -362,6 +372,8 @@ or false to signal an error."
"/20200326/guile-static-stripped-2.0.14-i586-pc-gnu.tar.xz") "/20200326/guile-static-stripped-2.0.14-i586-pc-gnu.tar.xz")
("powerpc64le-linux" ("powerpc64le-linux"
"/20210106/guile-static-stripped-2.0.14-powerpc64le-linux-gnu.tar.xz") "/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")))) "/20131110/guile-2.0.9.tar.xz"))))
@ -383,7 +395,9 @@ or false to signal an error."
("i586-gnu" ("i586-gnu"
(base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac")) (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))
("powerpc-linux" ("powerpc-linux"
(base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4")))) (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))
("riscv64-linux"
(base32 "12pqmhsbbp7hh9r1bjdl14l3a4q06plpz6dcks9dysb4czay8p9f"))))
(define (bootstrap-guile-origin system) (define (bootstrap-guile-origin system)
"Return an <origin> object for the Guile tarball of 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 \ GUILE_SYSTEM_COMPILED_PATH=$out/lib/guile/2.0/ccache \
$out/bin/guile -c ~s $out ~a $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. # Sanity check.
$out/bin/guile --version~%" $out/bin/guile --version~%"
(derivation->output-path mkdir) (derivation->output-path mkdir)
@ -478,7 +562,9 @@ $out/bin/guile --version~%"
(name name) (name name)
(system system) (system system)
(build-inputs inputs) (build-inputs inputs)
(build raw-build))) (build (cond ((target-riscv64?)
raw-build-guile3)
(else raw-build)))))
(define %bootstrap-guile (define %bootstrap-guile
;; The Guile used to run the build scripts of the initial derivations. ;; 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") "/20200326/static-binaries-0-i586-pc-gnu.tar.xz")
("powerpc-linux" ("powerpc-linux"
"/20200923/static-binaries.tar.xz") "/20200923/static-binaries.tar.xz")
("riscv64-linux"
"/20210725/static-binaries.tar.xz")
(_ (_
"/20131110/static-binaries.tar.xz"))) "/20131110/static-binaries.tar.xz")))
%bootstrap-base-urls)) %bootstrap-base-urls))
@ -544,6 +632,9 @@ $out/bin/guile --version~%"
("powerpc-linux" ("powerpc-linux"
(base32 (base32
"0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m")) "0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
("riscv64-linux"
(base32
"0x0xjlpmyh6rkr51p00gp6pscgl6zjida1rsg8vk3rinyi6rrbkg"))
("mips64el-linux" ("mips64el-linux"
(base32 (base32
"072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753")))))) "072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
@ -596,6 +687,8 @@ $out/bin/guile --version~%"
"/20200326/binutils-static-stripped-2.34-i586-pc-gnu.tar.xz") "/20200326/binutils-static-stripped-2.34-i586-pc-gnu.tar.xz")
("powerpc-linux" ("powerpc-linux"
"/20200923/binutils-2.35.1.tar.xz") "/20200923/binutils-2.35.1.tar.xz")
("riscv64-linux"
"/20210725/binutils-2.34.tar.xz")
(_ (_
"/20131110/binutils-2.23.2.tar.xz"))) "/20131110/binutils-2.23.2.tar.xz")))
%bootstrap-base-urls)) %bootstrap-base-urls))
@ -616,6 +709,9 @@ $out/bin/guile --version~%"
("powerpc64le-linux" ("powerpc64le-linux"
(base32 (base32
"1klxy945c61134mzhqzz2gbk8w0n8jq7arwkrvz78d22ff2q0cwz")) "1klxy945c61134mzhqzz2gbk8w0n8jq7arwkrvz78d22ff2q0cwz"))
("riscv64-linux"
(base32
"0n9qf4vbilfmh1lknhw000waakj4q6s50pnjazr5137skm976z5m"))
("i586-gnu" ("i586-gnu"
(base32 (base32
"11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs")) "11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
@ -681,6 +777,8 @@ $out/bin/guile --version~%"
"/20200326/glibc-stripped-2.31-i586-pc-gnu.tar.xz") "/20200326/glibc-stripped-2.31-i586-pc-gnu.tar.xz")
("powerpc-linux" ("powerpc-linux"
"/20200923/glibc-2.32.tar.xz") "/20200923/glibc-2.32.tar.xz")
("riscv64-linux"
"/20210725/glibc-2.31.tar.xz")
(_ (_
"/20131110/glibc-2.18.tar.xz"))) "/20131110/glibc-2.18.tar.xz")))
%bootstrap-base-urls)) %bootstrap-base-urls))
@ -701,6 +799,9 @@ $out/bin/guile --version~%"
("powerpc64le-linux" ("powerpc64le-linux"
(base32 (base32
"1a1df6z8gkaq09md3jy94lixnh20599p58p0s856p10xwjaqr1iz")) "1a1df6z8gkaq09md3jy94lixnh20599p58p0s856p10xwjaqr1iz"))
("riscv64-linux"
(base32
"0d9x80vm7ca1pd2whcmpm1h14zxpb58kqajlxlwffzm04xfsjnxm"))
("i586-gnu" ("i586-gnu"
(base32 (base32
"14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952")) "14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
@ -782,6 +883,8 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
"/20200326/gcc-stripped-5.5.0-i586-pc-gnu.tar.xz") "/20200326/gcc-stripped-5.5.0-i586-pc-gnu.tar.xz")
("powerpc-linux" ("powerpc-linux"
"/20200923/gcc-5.5.0.tar.xz") "/20200923/gcc-5.5.0.tar.xz")
("riscv64-linux"
"/20210725/gcc-7.5.0.tar.xz")
(_ (_
"/20131110/gcc-4.8.2.tar.xz"))) "/20131110/gcc-4.8.2.tar.xz")))
%bootstrap-base-urls)) %bootstrap-base-urls))
@ -802,6 +905,9 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
("powerpc64le-linux" ("powerpc64le-linux"
(base32 (base32
"151kjsai25vz2s667bgzpisx8f281fpl3n9pxz2yrp9jlnadz3m1")) "151kjsai25vz2s667bgzpisx8f281fpl3n9pxz2yrp9jlnadz3m1"))
("riscv64-linux"
(base32
"1k4mbnb54wj2q37fgshf5dfixixqnhn002vhzvi9pnb57xb9v14d"))
("i586-gnu" ("i586-gnu"
(base32 (base32
"1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5")) "1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))

View File

@ -2496,6 +2496,7 @@ exec " gcc "/bin/" program
,@(substitute-keyword-arguments (package-arguments findutils) ,@(substitute-keyword-arguments (package-arguments findutils)
((#:configure-flags flags ''()) ((#:configure-flags flags ''())
`(append `(append
;; TODO: Figure out exactly with architectures need this.
,(if (target-64bit?) ,(if (target-64bit?)
''("TIME_T_32_BIT_OK=yes") ''("TIME_T_32_BIT_OK=yes")
''()) ''())

View File

@ -395,7 +395,7 @@ from forcing GEXP-PROMISE."
;; This is the list of system types that are supported. By default, we ;; This is the list of system types that are supported. By default, we
;; expect all packages to build successfully here. ;; expect all packages to build successfully here.
'("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux" "mips64el-linux" "i586-gnu" '("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 (define %hurd-systems
;; The GNU/Hurd systems for which support is being developed. ;; The GNU/Hurd systems for which support is being developed.
@ -406,7 +406,7 @@ from forcing GEXP-PROMISE."
;; ;;
;; XXX: MIPS is unavailable in CI: ;; XXX: MIPS is unavailable in CI:
;; <https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00790.html>. ;; <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) (define-inlinable (sanitize-inputs inputs)
"Sanitize INPUTS by turning it into a list of name/package tuples if it's "Sanitize INPUTS by turning it into a list of name/package tuples if it's

View File

@ -712,7 +712,8 @@ architecture (x86_64)?"
(define* (target-64bit? #:optional (system (or (%current-target-system) (define* (target-64bit? #:optional (system (or (%current-target-system)
(%current-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))) (define* (cc-for-target #:optional (target (%current-target-system)))
(if target (if target

View File

@ -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 # Currently only Linux-based systems are supported, and only on some
# platforms. # platforms.
case "$guix_system" in case "$guix_system" in
x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|i586-gnu) x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|riscv64-linux|i586-gnu)
;; ;;
mips64el-linux|powerpc-linux) mips64el-linux|powerpc-linux)
AC_MSG_WARN([building Guix on `$guix_system', which is not supported]) AC_MSG_WARN([building Guix on `$guix_system', which is not supported])