mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
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:
parent
b0822c918e
commit
03b45230d4
6 changed files with 127 additions and 9 deletions
|
@ -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{} 2016 Ben Woodcroft@*
|
||||
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, 2017 Nikita Gillmann@*
|
||||
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
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
For information on porting to other architectures or kernels,
|
||||
|
|
|
@ -144,7 +144,16 @@ (define %bootstrap-executables
|
|||
("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 @@ (define (bootstrap-executable-file-name system program)
|
|||
("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 @@ (define (bootstrap-guile-url-path system)
|
|||
"/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 @@ (define (bootstrap-guile-hash system)
|
|||
("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 @@ (define (make-guile-wrapper bash guile-real)
|
|||
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 @@ (define* (make-raw-bag name
|
|||
(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.
|
||||
|
@ -518,6 +604,8 @@ (define %bootstrap-coreutils&co
|
|||
"/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 @@ (define %bootstrap-coreutils&co
|
|||
("powerpc-linux"
|
||||
(base32
|
||||
"0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
|
||||
("riscv64-linux"
|
||||
(base32
|
||||
"0x0xjlpmyh6rkr51p00gp6pscgl6zjida1rsg8vk3rinyi6rrbkg"))
|
||||
("mips64el-linux"
|
||||
(base32
|
||||
"072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
|
||||
|
@ -596,6 +687,8 @@ (define %bootstrap-binutils
|
|||
"/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 @@ (define %bootstrap-binutils
|
|||
("powerpc64le-linux"
|
||||
(base32
|
||||
"1klxy945c61134mzhqzz2gbk8w0n8jq7arwkrvz78d22ff2q0cwz"))
|
||||
("riscv64-linux"
|
||||
(base32
|
||||
"0n9qf4vbilfmh1lknhw000waakj4q6s50pnjazr5137skm976z5m"))
|
||||
("i586-gnu"
|
||||
(base32
|
||||
"11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
|
||||
|
@ -681,6 +777,8 @@ (define %bootstrap-glibc
|
|||
"/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 @@ (define %bootstrap-glibc
|
|||
("powerpc64le-linux"
|
||||
(base32
|
||||
"1a1df6z8gkaq09md3jy94lixnh20599p58p0s856p10xwjaqr1iz"))
|
||||
("riscv64-linux"
|
||||
(base32
|
||||
"0d9x80vm7ca1pd2whcmpm1h14zxpb58kqajlxlwffzm04xfsjnxm"))
|
||||
("i586-gnu"
|
||||
(base32
|
||||
"14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
|
||||
|
@ -782,6 +883,8 @@ (define %bootstrap-gcc
|
|||
"/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 @@ (define %bootstrap-gcc
|
|||
("powerpc64le-linux"
|
||||
(base32
|
||||
"151kjsai25vz2s667bgzpisx8f281fpl3n9pxz2yrp9jlnadz3m1"))
|
||||
("riscv64-linux"
|
||||
(base32
|
||||
"1k4mbnb54wj2q37fgshf5dfixixqnhn002vhzvi9pnb57xb9v14d"))
|
||||
("i586-gnu"
|
||||
(base32
|
||||
"1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))
|
||||
|
|
|
@ -2496,6 +2496,7 @@ (define findutils-boot0
|
|||
,@(substitute-keyword-arguments (package-arguments findutils)
|
||||
((#:configure-flags flags ''())
|
||||
`(append
|
||||
;; TODO: Figure out exactly with architectures need this.
|
||||
,(if (target-64bit?)
|
||||
''("TIME_T_32_BIT_OK=yes")
|
||||
''())
|
||||
|
|
|
@ -395,7 +395,7 @@ (define %supported-systems
|
|||
;; 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.
|
||||
|
@ -406,7 +406,7 @@ (define %cuirass-supported-systems
|
|||
;;
|
||||
;; 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
|
||||
|
|
|
@ -712,7 +712,8 @@ (define* (target-riscv64? #:optional (target (or (%current-target-system)
|
|||
|
||||
(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
|
||||
|
|
|
@ -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|i586-gnu)
|
||||
x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|riscv64-linux|i586-gnu)
|
||||
;;
|
||||
mips64el-linux|powerpc-linux)
|
||||
AC_MSG_WARN([building Guix on `$guix_system', which is not supported])
|
||||
|
|
Loading…
Reference in a new issue