diff mbox series

[bug#47615,1/9] gnu: bootstrap: Add support for powerpc-linux.

Message ID e690c54ea603e68c01240e8155aa122e06f6ccd4.1617711307.git.efraim@flashner.co.il
State Accepted
Headers show
Series Add 32-bit powerpc support | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Efraim Flashner April 6, 2021, 12:32 p.m. UTC
On 923bb70a1bff657125c3008f119a477e5cb57c2b
   gnu:glibc-for-bootstrap: Fix patch.

Run
    ./pre-inst-env guix build --target=powerpc-linux-gnu bootstrap-tarballs

Producing

    /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0

With guix hash -rx /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0

    02xx2ydj28pwv3vflqffinpq1icj09gzi9icm8j4bwc4lca9irxn

* gnu/packages/bootstrap.scm (%bootstrap-executables): Add entries for
powerpc-linux.
(%bootstrap-guile-hash, %bootstrap-coreutils&co, %bootstrap-binutils,
%bootstrap-glibc, %bootstrap-gcc): Add entry for powerpc-linux.
* gnu/packages.scm (%supported-systems): Add powerpc-linux.
(%hydra-supported-systems): Remove powerpc-linux.
* m4/guix.m4: Add powerpc-linux as a supported system.
---
 gnu/packages/bootstrap.scm | 37 ++++++++++++++++++++++++++++++++++++-
 guix/packages.scm          |  4 ++--
 m4/guix.m4                 |  4 ++--
 3 files changed, 40 insertions(+), 5 deletions(-)

Comments

Christopher Marusich April 14, 2021, 3:51 a.m. UTC | #1
Efraim Flashner <efraim@flashner.co.il> writes:

> On 923bb70a1bff657125c3008f119a477e5cb57c2b
>    gnu:glibc-for-bootstrap: Fix patch.
>
> Run
>     ./pre-inst-env guix build --target=powerpc-linux-gnu bootstrap-tarballs
>
> Producing
>
>     /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
>
> With guix hash -rx /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
>
>     02xx2ydj28pwv3vflqffinpq1icj09gzi9icm8j4bwc4lca9irxn

Generally speaking, this patch looks fine to me.  Just curious, what
sort of machines does one use for 32-bit powerpc?

I want to build the bootstrap binaries, see if they're reproducible (in
particular GCC, which I suspect won't be), and verify the hashes.

It might take a few days to do that, but I'll update this thread once
I've done it.

> @@ -139,6 +148,7 @@
>    ;; 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/"))

Once you're reasonably sure the bootstrap binaries won't change, we
should consider uploading them to alpha.gnu.org.  Ludo did it for me for
powerpc64le-linux but I don't know who has access (I don't).

>  (define %hurd-systems
>    ;; The GNU/Hurd systems for which support is being developed.
> @@ -361,7 +361,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")))
> +  (fold delete %supported-systems '("mips64el-linux" "powerpc-linux")))

Any ideas for how we can get a machine for powerpc CI?  Maybe VMs, I
guess?  Can a POWER9 machine be a powerpc-linux machine...?
Vincent Legoll April 14, 2021, 7:36 a.m. UTC | #2
Hello,

On Wed, Apr 14, 2021 at 5:51 AM Chris Marusich <cmmarusich@gmail.com> wrote:
> Generally speaking, this patch looks fine to me.  Just curious, what
> sort of machines does one use for 32-bit powerpc?

Old apple hardware based on powerpc G4 (powermacs, mini, imac, etc.),
maybe even G3.

> Any ideas for how we can get a machine for powerpc CI?  Maybe VMs, I
> guess?  Can a POWER9 machine be a powerpc-linux machine...?

A VM on power9 may be able to run BE ppc32.

Regards
Efraim Flashner April 14, 2021, 1:56 p.m. UTC | #3
On Wed, Apr 14, 2021 at 09:36:24AM +0200, Vincent Legoll wrote:
> Hello,
> 
> On Wed, Apr 14, 2021 at 5:51 AM Chris Marusich <cmmarusich@gmail.com> wrote:
> > Generally speaking, this patch looks fine to me.  Just curious, what
> > sort of machines does one use for 32-bit powerpc?
> 
> Old apple hardware based on powerpc G4 (powermacs, mini, imac, etc.),
> maybe even G3.

There are a couple families of 32-bit powerpc machines out there with
(IIRC) macppc being the most prevalent for desktops.

> 
> > Any ideas for how we can get a machine for powerpc CI?  Maybe VMs, I
> > guess?  Can a POWER9 machine be a powerpc-linux machine...?
> 
> A VM on power9 may be able to run BE ppc32.
> 

Can it do it "directly" or does it need to be inside of a VM/chroot? I
never looked too much into it, never quite seemed like something that
I'd be able to take advantage of.
Christopher Marusich May 5, 2021, 1:52 a.m. UTC | #4
Chris Marusich <cmmarusich@gmail.com> writes:

> Efraim Flashner <efraim@flashner.co.il> writes:
>
>> On 923bb70a1bff657125c3008f119a477e5cb57c2b
>>    gnu:glibc-for-bootstrap: Fix patch.
>>
>> Run
>>     ./pre-inst-env guix build --target=powerpc-linux-gnu bootstrap-tarballs
g>>
>> Producing
>>
>>     /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
>>
>> With guix hash -rx /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
>>
>>     02xx2ydj28pwv3vflqffinpq1icj09gzi9icm8j4bwc4lca9irxn
>
> Generally speaking, this patch looks fine to me.  Just curious, what
> sort of machines does one use for 32-bit powerpc?
>
> I want to build the bootstrap binaries, see if they're reproducible (in
> particular GCC, which I suspect won't be), and verify the hashes.
>
> It might take a few days to do that, but I'll update this thread once
> I've done it.

I repeated Efraim's steps on two different x86_64-linux Guix System
machines.  In both cases, it produced exactly the same hash.  Therefore,
it would seem these bootstrap binaries are actually reproducible.  I was
surprised by this because of my experience with bug 41669.  I expected
GCC to not be reproducible, but in this case it seems reproducible.

I wonder what's different?  The powerpc64 architecture is 64-bit, and
powerpc is 32-bit, but I wonder what else might be different that could
cause the non-reproducibility to occur only in the powerpc64-linux
case.

Anyway, this is good news for the powerpc-linux port.  It is also an
interesting clue for the investigation of bug 41669, but further
discussion about that should go there, not here.
Efraim Flashner May 5, 2021, 8:51 a.m. UTC | #5
On Tue, May 04, 2021 at 06:52:31PM -0700, Chris Marusich wrote:
> Chris Marusich <cmmarusich@gmail.com> writes:
> 
> > Efraim Flashner <efraim@flashner.co.il> writes:
> >
> >> On 923bb70a1bff657125c3008f119a477e5cb57c2b
> >>    gnu:glibc-for-bootstrap: Fix patch.
> >>
> >> Run
> >>     ./pre-inst-env guix build --target=powerpc-linux-gnu bootstrap-tarballs
> g>>
> >> Producing
> >>
> >>     /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
> >>
> >> With guix hash -rx /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
> >>
> >>     02xx2ydj28pwv3vflqffinpq1icj09gzi9icm8j4bwc4lca9irxn
> >
> > Generally speaking, this patch looks fine to me.  Just curious, what
> > sort of machines does one use for 32-bit powerpc?
> >
> > I want to build the bootstrap binaries, see if they're reproducible (in
> > particular GCC, which I suspect won't be), and verify the hashes.
> >
> > It might take a few days to do that, but I'll update this thread once
> > I've done it.
> 
> I repeated Efraim's steps on two different x86_64-linux Guix System
> machines.  In both cases, it produced exactly the same hash.  Therefore,
> it would seem these bootstrap binaries are actually reproducible.  I was
> surprised by this because of my experience with bug 41669.  I expected
> GCC to not be reproducible, but in this case it seems reproducible.
> 
> I wonder what's different?  The powerpc64 architecture is 64-bit, and
> powerpc is 32-bit, but I wonder what else might be different that could
> cause the non-reproducibility to occur only in the powerpc64-linux
> case.
> 
> Anyway, this is good news for the powerpc-linux port.  It is also an
> interesting clue for the investigation of bug 41669, but further
> discussion about that should go there, not here.
> 

In terms of what is more relevant here, IIRC there is some CI code to
build cross toolchain stuff to powerpc-linux-gnu. Is it possible that
you reused some of that? I don't remember exactly from the other bug
report which bits suddenly made the difference. Otherwise I built mine
about 4 months earlier.
Ludovic Courtès May 6, 2021, 4:35 p.m. UTC | #6
Hi Chris,

Chris Marusich <cmmarusich@gmail.com> skribis:

> Chris Marusich <cmmarusich@gmail.com> writes:
>
>> Efraim Flashner <efraim@flashner.co.il> writes:
>>
>>> On 923bb70a1bff657125c3008f119a477e5cb57c2b
>>>    gnu:glibc-for-bootstrap: Fix patch.
>>>
>>> Run
>>>     ./pre-inst-env guix build --target=powerpc-linux-gnu bootstrap-tarballs
> g>>
>>> Producing
>>>
>>>     /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
>>>
>>> With guix hash -rx /gnu/store/dyj1wvayyp1ihaknkxniz1xamcf4yrhl-bootstrap-tarballs-0
>>>
>>>     02xx2ydj28pwv3vflqffinpq1icj09gzi9icm8j4bwc4lca9irxn
>>
>> Generally speaking, this patch looks fine to me.  Just curious, what
>> sort of machines does one use for 32-bit powerpc?
>>
>> I want to build the bootstrap binaries, see if they're reproducible (in
>> particular GCC, which I suspect won't be), and verify the hashes.
>>
>> It might take a few days to do that, but I'll update this thread once
>> I've done it.
>
> I repeated Efraim's steps on two different x86_64-linux Guix System
> machines.  In both cases, it produced exactly the same hash.  Therefore,
> it would seem these bootstrap binaries are actually reproducible.

This is great news, thanks for checking!

With this, we can be more confident uploading the binary seeds to
ftp.gnu.org.

> I was surprised by this because of my experience with bug 41669.  I
> expected GCC to not be reproducible, but in this case it seems
> reproducible.

Yes, that’s weird, but it’s better this way.  :-)

Thanks,
Ludo’.
diff mbox series

Patch

diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index c50e94e891..049735013a 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -89,6 +89,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"))
@@ -139,6 +148,7 @@ 
   ;; 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 +156,7 @@ 
   (match system
     ("powerpc64le-linux" (string-append system "/20210106/" program))
     ("i586-gnu" (string-append system "/20200326/" program))
+    ("powerpc-linux" (string-append system "/20200923/bin/" program))
     (_ (string-append system "/" program
                       "?id=44f07d1dc6806e97c4e9ee3e6be883cc59dc666e"))))
 
@@ -341,6 +352,8 @@  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"
@@ -366,7 +379,9 @@  or false to signal an error."
     ("aarch64-linux"
      (base32 "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))
     ("i586-gnu"
-     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))))
+     (base32 "0wgqpsmvg25rnqn49ap7kwd2qxccd8dr4lllzp7i3rjvgav27vac"))
+    ("powerpc-linux"
+     (base32 "1by2p7s27fbyjzfkcw8h65h4kkqh7d23kv4sgg5jppjn2qx7swq4"))))
 
 (define (bootstrap-guile-origin system)
   "Return an <origin> object for the Guile tarball of SYSTEM."
@@ -500,6 +515,8 @@  $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")
                                             (_
                                              "/20131110/static-binaries.tar.xz")))
                                      %bootstrap-base-urls))
@@ -523,6 +540,9 @@  $out/bin/guile --version~%"
                               ("i586-gnu"
                                (base32
                                 "17kllqnf3fg79gzy9ansgi801c46yh9c23h4d923plvb0nfm1cfn"))
+                              ("powerpc-linux"
+                               (base32
+                                "0kspxy0yczan2vlih6aa9hailr2inz000fqa0gn5x9d1fxxa5y8m"))
                               ("mips64el-linux"
                                (base32
                                 "072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753"))))))
@@ -573,6 +593,8 @@  $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")
                                             (_
                                              "/20131110/binutils-2.23.2.tar.xz")))
                                      %bootstrap-base-urls))
@@ -596,6 +618,9 @@  $out/bin/guile --version~%"
                               ("i586-gnu"
                                (base32
                                 "11kykv1kmqc5wln57rs4klaqa13hm952smkc57qcsyss21kfjprs"))
+                              ("powerpc-linux"
+                               (base32
+                                "0asbg1c4avkrvh057mx0942xwddd136jni382zqsxzn79ls42yq8"))
                               ("mips64el-linux"
                                (base32
                                 "1x8kkhcxmfyzg1ddpz2pxs6fbdl6412r7x0nzbmi5n7mj8zw2gy7"))))))
@@ -653,6 +678,8 @@  $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")
                                       (_
                                        "/20131110/glibc-2.18.tar.xz")))
                                %bootstrap-base-urls))
@@ -676,6 +703,9 @@  $out/bin/guile --version~%"
                         ("i586-gnu"
                          (base32
                           "14ddm10lpbas8bankmn5bcrlqvz1v5dnn1qjzxb19r57vd2w5952"))
+                        ("powerpc-linux"
+                         (base32
+                          "0smmssyjrlk5cvx49586smmk81gkwff0i6r91n4rir4jm6ba25sb"))
                         ("mips64el-linux"
                          (base32
                           "0k97a3whzx3apsi9n2cbsrr79ad6lh00klxph9hw4fqyp1abkdsg")))))))))
@@ -749,6 +779,8 @@  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")
                                        (_
                                         "/20131110/gcc-4.8.2.tar.xz")))
                                 %bootstrap-base-urls))
@@ -772,6 +804,9 @@  exec ~a/bin/.gcc-wrapped -B~a/lib \
                          ("i586-gnu"
                           (base32
                            "1j2zc58wzil71a34h7c70sd68dmqvcscrw3rmn2whq79vd70zvv5"))
+                         ("powerpc-linux"
+                          (base32
+                           "1p7df3yixhm87dw5sccc6yn1i9db1r9hnmsg87wq5xi4rfmirq7w"))
                          ("mips64el-linux"
                           (base32
                            "1m5miqkyng45l745n0sfafdpjkqv9225xf44jqkygwsipj2cv9ks")))))))))
diff --git a/guix/packages.scm b/guix/packages.scm
index 56173e1204..e60201d8fc 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -350,7 +350,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"))
+    "powerpc64le-linux" "powerpc-linux"))
 
 (define %hurd-systems
   ;; The GNU/Hurd systems for which support is being developed.
@@ -361,7 +361,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")))
+  (fold delete %supported-systems '("mips64el-linux" "powerpc-linux")))
 
 
 ;; A package.
diff --git a/m4/guix.m4 b/m4/guix.m4
index 05d409a674..e778a56004 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 Efraim Flashner <efraim@flashner.co.il>
+dnl Copyright © 2017, 2020 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)
+    x86_64-linux|i686-linux|armhf-linux|aarch64-linux|powerpc64le-linux|powerpc-linux)
       ;;
     *)
       if test "x$guix_courageous" = "xyes"; then