unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu.
@ 2016-11-29  7:32 Carlos Sánchez de La Lama
  2016-11-29  7:38 ` Carlos Sánchez de La Lama
  2017-01-04 23:02 ` Ludovic Courtès
  0 siblings, 2 replies; 5+ messages in thread
From: Carlos Sánchez de La Lama @ 2016-11-29  7:32 UTC (permalink / raw)
  To: guix-devel


* gnu/packages/bootstrap.scm (glib-dynamic-linker): Add value for
powerpc-linux.
* gnu/packages/linux.scm (system->defconfig): New procedure.
(linux-libre-headers): Use system->defconfig.
* gnu/packages/cross-base.scm (xlinux-headers): Use system->defconfig.
* gnu/packages/gcc.scm (gcc-4.7): Add powerpc specific substitutions for
dynamic linker and start files locations.
* gnu/packages/make-bootstrap.scm (%gcc-static): Remove -lgcc_s added in
powerpc specific substitutions.
---
 gnu/packages/bootstrap.scm      |  1 +
 gnu/packages/cross-base.scm     |  3 ++-
 gnu/packages/gcc.scm            | 18 ++++++++++++++++--
 gnu/packages/linux.scm          | 15 ++++++++++++---
 gnu/packages/make-bootstrap.scm |  5 +++--
 5 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index f6faba3..64a8239 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -168,6 +168,7 @@ successful, or false to signal an error."
         ((string=? system "i586-gnu") "/lib/ld.so.1")
         ((string=? system "i686-gnu") "/lib/ld.so.1")
         ((string=? system "aarch64-linux") "/lib/ld-linux-aarch64.so.1")
+        ((string=? system "powerpc-linux") "/lib/ld.so.1")
 
         ;; XXX: This one is used bare-bones, without a libc, so add a case
         ;; here just so we can keep going.
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index e6553dc..bfff1f2 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -315,7 +315,8 @@ GCC that does not target a libc; otherwise, target that libc."
               (setenv "ARCH" ,(system->linux-architecture target))
               (format #t "`ARCH' set to `~a' (cross compiling)~%" (getenv "ARCH"))
 
-              (and (zero? (system* "make" "defconfig"))
+              (and (zero? (system* "make"
+                                   ,(system->defconfig target)))
                    (zero? (system* "make" "mrproper" "headers_check"))))
             ,phases))))
       (native-inputs `(("cross-gcc" ,xgcc)
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index c26cc4f..cb53272 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -211,7 +211,7 @@ where the OS part is overloaded to denote a specific ABI---into GCC
 
                 ;; Fix the dynamic linker's file name.
                 (substitute* (find-files "gcc/config"
-                                         "^(linux|gnu)(64|-elf|-eabi)?\\.h$")
+                                         "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$")
                   (("#define GLIBC_DYNAMIC_LINKER([^ ]*).*$" _ suffix)
                    (format #f "#define GLIBC_DYNAMIC_LINKER~a \"~a\"~%"
                            suffix
@@ -240,7 +240,21 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                    (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
 #define STANDARD_STARTFILE_PREFIX_2 \"\"
 ~a"
-                           libc line))))
+                           libc line)))
+
+              ;; rs6000 (a.k.a. powerpc) config in gcc does not use
+              ;; GNU_USER_* defines. Do the above for this case.
+              (substitute*
+                  "gcc/config/rs6000/sysv4.h"
+                (("#define LIB_LINUX_SPEC (.*)$" _ suffix)
+                 (format #f "#define LIB_LINUX_SPEC \
+\"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
+                         libc libc libdir suffix))
+                (("#define	STARTFILE_LINUX_SPEC.*$" line)
+                 (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
+#define STANDARD_STARTFILE_PREFIX_2 \"\"
+~a"
+                         libc line))))
 
               ;; Don't retain a dependency on the build-time sed.
               (substitute* "fixincludes/fixincl.x"
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index c504a12..57c11f3 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -98,6 +98,13 @@
           ((string-prefix? "aarch64" arch) "arm64")
           (else arch))))
 
+(define-public (system->defconfig system)
+  "Some systems (notably powerpc-linux) require a special target for kernel
+defconfig. Return the appropiate make target if applicable, otherwise return
+\"defconfig\"."
+  (cond ((string-prefix? "powerpc-" system) "pmac32_defconfig")
+        (else "defconfig")))
+
 (define (linux-libre-urls version)
   "Return a list of URLs for Linux-Libre VERSION."
   (list (string-append
@@ -137,11 +144,13 @@
            (lambda _
              (let ((arch ,(system->linux-architecture
                           (or (%current-target-system)
-                              (%current-system)))))
+                              (%current-system))))
+                   (defconfig ,(system->defconfig
+                               (or (%current-target-system)
+                                   (%current-system)))))
                (setenv "ARCH" arch)
                (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
-
-               (and (zero? (system* "make" "defconfig"))
+               (and (zero? (system* "make" defconfig))
                     (zero? (system* "make" "mrproper" "headers_check"))))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index f31db6a..b4771a7 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -441,8 +441,9 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                  ;; the 'pre-configure phase of our main gcc package, because
                  ;; that shared library is not present in this static gcc.  See
                  ;; <https://lists.gnu.org/archive/html/guix-devel/2015-01/msg00008.html>.
-                 (substitute* (find-files "gcc/config"
-                                          "^gnu-user.*\\.h$")
+                 (substitute* (cons* "gcc/config/rs6000/sysv4.h"
+                                     (find-files "gcc/config"
+                                                 "^gnu-user.*\\.h$"))
                    ((" -lgcc_s}}") "}}")))
                ,phases)))))
      (native-inputs
-- 
2.9.2

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu.
  2016-11-29  7:32 [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu Carlos Sánchez de La Lama
@ 2016-11-29  7:38 ` Carlos Sánchez de La Lama
  2017-01-04 23:02 ` Ludovic Courtès
  1 sibling, 0 replies; 5+ messages in thread
From: Carlos Sánchez de La Lama @ 2016-11-29  7:38 UTC (permalink / raw)
  To: guix-devel

Hi!

I finally found some time to clean-up my work. This patch is for
core-updates branch, and allows bootstrap tarball generation by

guix build --target=powerpc-linux-gnu bootstrap-tarballs

I think the best way to proceed is integrate this onto core-updates
(once reviewed & approved), then generate a bootstrap binaries on hydra,
making them available for download on the bootstrap binaries URL. At
that point I can update the rest of the powerpc-linux-gnu patches (which
use this binaries) with the correct hashes, and send them to the list.

As Ludo suggested, I am also preparing a tutorial/blog on the porting
process.

BR

Carlos

-- 
It is better to be lucky. But I would rather be exact. Then, when luck comes
you are ready.

Ernest Hemingway, "The Old Man and the Sea" (1952)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu.
  2016-11-29  7:32 [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu Carlos Sánchez de La Lama
  2016-11-29  7:38 ` Carlos Sánchez de La Lama
@ 2017-01-04 23:02 ` Ludovic Courtès
  2017-01-05  8:35   ` Carlos Sánchez de La Lama
  1 sibling, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2017-01-04 23:02 UTC (permalink / raw)
  To: Carlos Sánchez de La Lama; +Cc: guix-devel

Hello Carlos!

Happy new year!  :-)

Leo just reminded me of this patch on IRC, and I feel guilty that it
stood there for so long.  Apologies!

csanchezdll@gmail.com (Carlos Sánchez de La Lama) skribis:

> * gnu/packages/bootstrap.scm (glib-dynamic-linker): Add value for
> powerpc-linux.
> * gnu/packages/linux.scm (system->defconfig): New procedure.
> (linux-libre-headers): Use system->defconfig.
> * gnu/packages/cross-base.scm (xlinux-headers): Use system->defconfig.
> * gnu/packages/gcc.scm (gcc-4.7): Add powerpc specific substitutions for
> dynamic linker and start files locations.
> * gnu/packages/make-bootstrap.scm (%gcc-static): Remove -lgcc_s added in
> powerpc specific substitutions.

I ended up splitting it in 3 patches (gcc, linux-libre, and
glibc-dynamic-linker) that I just pushed to ‘core-updates’.  I also
added copyright lines for you where appropriate.  Hope that’s fine!

> I finally found some time to clean-up my work. This patch is for
> core-updates branch, and allows bootstrap tarball generation by
>
> guix build --target=powerpc-linux-gnu bootstrap-tarballs
>
> I think the best way to proceed is integrate this onto core-updates
> (once reviewed & approved), then generate a bootstrap binaries on hydra,
> making them available for download on the bootstrap binaries URL. At
> that point I can update the rest of the powerpc-linux-gnu patches (which
> use this binaries) with the correct hashes, and send them to the list.

Sounds like a good plan.

Commit 9410a5aa916035bb4d7f032a5fe81cfb497887c8 adds powerpc-linux-gnu
cross-builds for Hydra (though Hydra is currently busy with the
‘staging’ branch.)

> As Ludo suggested, I am also preparing a tutorial/blog on the porting
> process.

Awesome!

Sorry again for the delay and the frustration it probably entailed.

Cheers,
Ludo’.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu.
  2017-01-04 23:02 ` Ludovic Courtès
@ 2017-01-05  8:35   ` Carlos Sánchez de La Lama
  2017-01-05 10:32     ` Ludovic Courtès
  0 siblings, 1 reply; 5+ messages in thread
From: Carlos Sánchez de La Lama @ 2017-01-05  8:35 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Hi Ludo!

> Happy new year!  :-)

Thanks! Happy new year!

> I ended up splitting it in 3 patches (gcc, linux-libre, and
> glibc-dynamic-linker) that I just pushed to ‘core-updates’.  I also
> added copyright lines for you where appropriate.  Hope that’s fine!

Thats perfect :)

>> I think the best way to proceed is integrate this onto core-updates
>> (once reviewed & approved), then generate a bootstrap binaries on hydra,
>> making them available for download on the bootstrap binaries URL. At
>> that point I can update the rest of the powerpc-linux-gnu patches (which
>> use this binaries) with the correct hashes, and send them to the list.
>
> Sounds like a good plan.
>
> Commit 9410a5aa916035bb4d7f032a5fe81cfb497887c8 adds powerpc-linux-gnu
> cross-builds for Hydra (though Hydra is currently busy with the
> ‘staging’ branch.)

Nice! I will generate the bootstrap tarballs locally using that commit
to check everything target-side works, before hydra time is spent on
that. If everything goes all right, I will then update the powerpc
patches with the new hashes (and the expected URL for the binaries), so
any powerpc user can jump in and use/test GUIX.

>> As Ludo suggested, I am also preparing a tutorial/blog on the porting
>> process.
>
> Awesome!

It is getting a little bit more complex than expected, and my time
allowance also shorter. I am writting a set of "steps" on how I made the
porting, including all the debugging I had to do, so what is already
written might be useful as it is (not only as a porting guide but also
as an example of GUIX hacking). Do you think it makes sense to publish
it already so I can complete it later? Or better wait till it is
finished?

> Sorry again for the delay and the frustration it probably entailed.

Do not worry. I know how it is with a lot of patches coming in :). I
needed (and still need more) time for writing the tutorial anyways.

Thanks!

-- 
Carlos

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu.
  2017-01-05  8:35   ` Carlos Sánchez de La Lama
@ 2017-01-05 10:32     ` Ludovic Courtès
  0 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2017-01-05 10:32 UTC (permalink / raw)
  To: Carlos Sánchez de La Lama; +Cc: guix-devel

Hi!

csanchezdll@gmail.com (Carlos Sánchez de La Lama) skribis:

>> I ended up splitting it in 3 patches (gcc, linux-libre, and
>> glibc-dynamic-linker) that I just pushed to ‘core-updates’.  I also
>> added copyright lines for you where appropriate.  Hope that’s fine!
>
> Thats perfect :)
>
>>> I think the best way to proceed is integrate this onto core-updates
>>> (once reviewed & approved), then generate a bootstrap binaries on hydra,
>>> making them available for download on the bootstrap binaries URL. At
>>> that point I can update the rest of the powerpc-linux-gnu patches (which
>>> use this binaries) with the correct hashes, and send them to the list.
>>
>> Sounds like a good plan.
>>
>> Commit 9410a5aa916035bb4d7f032a5fe81cfb497887c8 adds powerpc-linux-gnu
>> cross-builds for Hydra (though Hydra is currently busy with the
>> ‘staging’ branch.)
>
> Nice! I will generate the bootstrap tarballs locally using that commit
> to check everything target-side works, before hydra time is spent on
> that. If everything goes all right, I will then update the powerpc
> patches with the new hashes (and the expected URL for the binaries), so
> any powerpc user can jump in and use/test GUIX.

Sounds good!

>>> As Ludo suggested, I am also preparing a tutorial/blog on the porting
>>> process.
>>
>> Awesome!
>
> It is getting a little bit more complex than expected, and my time
> allowance also shorter. I am writting a set of "steps" on how I made the
> porting, including all the debugging I had to do, so what is already
> written might be useful as it is (not only as a porting guide but also
> as an example of GUIX hacking). Do you think it makes sense to publish
> it already so I can complete it later? Or better wait till it is
> finished?

Up to you!  If you have something that’s self-contained and intelligible
to people who don’t have your experience, that’s probably fine.

Cheers,
Ludo’.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-01-05 10:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-29  7:32 [PATCH] gnu: bootstrap-tarballs: Cross-compile for powerpc-linux-gnu Carlos Sánchez de La Lama
2016-11-29  7:38 ` Carlos Sánchez de La Lama
2017-01-04 23:02 ` Ludovic Courtès
2017-01-05  8:35   ` Carlos Sánchez de La Lama
2017-01-05 10:32     ` Ludovic Courtès

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).