unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH 1/4] gnu: Move the cross-gcc build system arguments into a separate procedure.
@ 2015-02-05 16:25 Marek Benc
  2015-02-05 18:20 ` Mark H Weaver
  0 siblings, 1 reply; 3+ messages in thread
From: Marek Benc @ 2015-02-05 16:25 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 217 bytes --]

This one is actually just a copy/paste from the master branch. It 
includes a fix to the problem of cross compilers compiling binaries with 
the building system's ld.so in mind, I take no credit for this.

-- 
Marek.

[-- Attachment #2: git-patch-1.patch --]
[-- Type: text/x-patch, Size: 10995 bytes --]

From b4665f3e98d70e6efb34b0f945477b4336a51e7d Mon Sep 17 00:00:00 2001
From: Marek Benc <dusxmt@gmx.com>
Date: Thu, 5 Feb 2015 16:53:38 +0100
Subject: [PATCH] gnu: Move the cross-gcc build system arguments into a
 separate procedure.

* /gnu/packages/cross-base.scm (cross-gcc-arguments): New variable.
                               (cross-gcc): Make use of the procedure above.

---
 gnu/packages/cross-base.scm | 194 +++++++++++++++++++++++---------------------
 1 file changed, 101 insertions(+), 93 deletions(-)

diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index f881096..e051756 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -67,6 +67,106 @@
                         `(cons "--with-sysroot=/" ,flags)))))))
     (cross binutils target)))
 
+(define (cross-gcc-arguments target libc)
+  "Return build system arguments for a cross-gcc for TARGET, using LIBC (which
+may be either a libc package or #f.)"
+  ;; Set the current target system so that 'glibc-dynamic-linker' returns the
+  ;; right name.
+  (parameterize ((%current-target-system target))
+    (substitute-keyword-arguments (package-arguments gcc-4.8)
+      ((#:configure-flags flags)
+       `(append (list ,(string-append "--target=" target)
+                      ,@(if libc
+                            '()
+                            `( ;; Disable features not needed at this stage.
+                              "--disable-shared" "--enable-static"
+
+                              ;; Disable C++ because libstdc++'s configure
+                              ;; script otherwise fails with "Link tests are not
+                              ;; allowed after GCC_NO_EXECUTABLES."
+                              "--enable-languages=c"
+
+                              "--disable-threads"  ;libgcc, would need libc
+                              "--disable-libatomic"
+                              "--disable-libmudflap"
+                              "--disable-libgomp"
+                              "--disable-libssp"
+                              "--disable-libquadmath"
+                              "--disable-decimal-float" ;would need libc
+                              )))
+
+                ,(if libc
+                     flags
+                     `(remove (cut string-match "--enable-languages.*" <>)
+                              ,flags))))
+      ((#:make-flags flags)
+       (if libc
+           `(let ((libc (assoc-ref %build-inputs "libc")))
+              ;; FLAGS_FOR_TARGET are needed for the target libraries to receive
+              ;; the -Bxxx for the startfiles.
+              (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
+                    ,flags))
+           flags))
+      ((#:phases phases)
+       (let ((phases
+              `(alist-cons-after
+                'install 'make-cross-binutils-visible
+                (lambda* (#:key outputs inputs #:allow-other-keys)
+                  (let* ((out      (assoc-ref outputs "out"))
+                         (libexec  (string-append out "/libexec/gcc/"
+                                                  ,target))
+                         (binutils (string-append
+                                    (assoc-ref inputs "binutils-cross")
+                                    "/bin/" ,target "-")))
+                    (for-each (lambda (file)
+                                (symlink (string-append binutils file)
+                                         (string-append libexec "/"
+                                                        file)))
+                              '("as" "ld" "nm"))
+                    #t))
+                ,phases)))
+         (if libc
+             `(alist-cons-before
+               'configure 'set-cross-path
+               (lambda* (#:key inputs #:allow-other-keys)
+                 ;; Add the cross-Linux headers to CROSS_CPATH, and remove them
+                 ;; from CPATH.
+                 (let ((libc  (assoc-ref inputs "libc"))
+                       (linux (assoc-ref inputs
+                                         "libc/cross-linux-headers")))
+
+                   (define (cross? x)
+                     ;; Return #t if X is a cross-libc or a cross-kernel.
+                     (or (string-prefix? libc x)
+                         (string-prefix? linux x)))
+
+                   (setenv "CROSS_CPATH"
+                           (string-append libc  "/include:"
+                                          linux "/include"))
+                   (setenv "CROSS_LIBRARY_PATH"
+                           (string-append libc "/lib"))
+
+
+                   (let ((cpath   (search-path-as-string->list
+                                   (getenv "CPATH")))
+                         (libpath (search-path-as-string->list
+                                   (getenv "LIBRARY_PATH"))))
+                     (setenv "CPATH"
+                             (list->search-path-as-string
+                              (remove cross? cpath) ":"))
+                     (setenv "LIBRARY_PATH"
+                             (list->search-path-as-string
+                              (remove cross? libpath) ":"))
+                     #t)))
+               ,phases)
+             phases)))
+      ((#:strip-binaries? _)
+       ;; Disable stripping as this can break binaries, with object files of
+       ;; libgcc.a showing up as having an unknown architecture.  See
+       ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
+       ;; for instance.
+       #f))))
+
 (define* (cross-gcc target
                     #:optional (xbinutils (cross-binutils target)) libc)
   "Return a cross-compiler for TARGET, where TARGET is a GNU triplet.  Use
@@ -93,99 +193,7 @@ GCC that does not target a libc; otherwise, target that libc."
                   (srfi srfi-1)
                   (srfi srfi-26))
 
-       ,@(substitute-keyword-arguments (package-arguments gcc-4.8)
-           ((#:configure-flags flags)
-            `(append (list ,(string-append "--target=" target)
-                           ,@(gcc-configure-flags-for-triplet target)
-                           ,@(if libc
-                                 '()
-                                 `( ;; Disable features not needed at this stage.
-                                   "--disable-shared" "--enable-static"
-
-                                   ;; Disable C++ because libstdc++'s
-                                   ;; configure script otherwise fails with
-                                   ;; "Link tests are not allowed after
-                                   ;; GCC_NO_EXECUTABLES."
-                                   "--enable-languages=c"
-
-                                   "--disable-threads" ; libgcc, would need libc
-                                   "--disable-libatomic"
-                                   "--disable-libmudflap"
-                                   "--disable-libgomp"
-                                   "--disable-libssp"
-                                   "--disable-libquadmath"
-                                   "--disable-decimal-float" ; would need libc
-                                   )))
-
-                     ,(if libc
-                          flags
-                          `(remove (cut string-match "--enable-languages.*" <>)
-                                   ,flags))))
-           ((#:make-flags flags)
-            (if libc
-                `(let ((libc (assoc-ref %build-inputs "libc")))
-                   ;; FLAGS_FOR_TARGET are needed for the target libraries to
-                   ;; receive the -Bxxx for the startfiles.
-                   (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
-                         ,flags))
-                flags))
-           ((#:phases phases)
-            (let ((phases
-                   `(alist-cons-after
-                     'install 'make-cross-binutils-visible
-                     (lambda* (#:key outputs inputs #:allow-other-keys)
-                       (let* ((out      (assoc-ref outputs "out"))
-                              (libexec  (string-append out "/libexec/gcc/"
-                                                       ,target))
-                              (binutils (string-append
-                                         (assoc-ref inputs "binutils-cross")
-                                         "/bin/" ,target "-")))
-                         (for-each (lambda (file)
-                                     (symlink (string-append binutils file)
-                                              (string-append libexec "/"
-                                                             file)))
-                                   '("as" "ld" "nm"))
-                         #t))
-                     ,phases)))
-             (if libc
-                 `(alist-cons-before
-                   'configure 'set-cross-path
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     ;; Add the cross Linux headers to CROSS_CPATH, and remove
-                     ;; them from CPATH.
-                     (let ((libc  (assoc-ref inputs "libc"))
-                           (linux (assoc-ref inputs
-                                             "libc/cross-linux-headers")))
-                       (define (cross? x)
-                         ;; Return #t if X is a cross-libc or cross Linux.
-                         (or (string-prefix? libc x)
-                             (string-prefix? linux x)))
-
-                       (setenv "CROSS_CPATH"
-                               (string-append libc "/include:"
-                                              linux "/include"))
-                       (setenv "CROSS_LIBRARY_PATH"
-                               (string-append libc "/lib"))
-
-                       (let ((cpath   (search-path-as-string->list
-                                       (getenv "CPATH")))
-                             (libpath (search-path-as-string->list
-                                       (getenv "LIBRARY_PATH"))))
-                         (setenv "CPATH"
-                                 (list->search-path-as-string
-                                  (remove cross? cpath) ":"))
-                         (setenv "LIBRARY_PATH"
-                                 (list->search-path-as-string
-                                  (remove cross? libpath) ":"))
-                         #t)))
-                   ,phases)
-                 phases)))
-           ((#:strip-binaries? _)
-            ;; Disable stripping as this can break binaries, with object files
-            ;; of libgcc.a showing up as having an unknown architecture.  See
-            ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
-            ;; for instance.
-            #f))))
+       ,@(cross-gcc-arguments target libc)))
 
     (native-inputs
      `(("binutils-cross" ,xbinutils)
-- 
2.2.1


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

* Re: [PATCH 1/4] gnu: Move the cross-gcc build system arguments into a separate procedure.
  2015-02-05 16:25 [PATCH 1/4] gnu: Move the cross-gcc build system arguments into a separate procedure Marek Benc
@ 2015-02-05 18:20 ` Mark H Weaver
  2015-02-05 18:23   ` Mark H Weaver
  0 siblings, 1 reply; 3+ messages in thread
From: Mark H Weaver @ 2015-02-05 18:20 UTC (permalink / raw)
  To: Marek Benc; +Cc: guix-devel

Marek Benc <dusxmt@gmx.com> writes:
> This one is actually just a copy/paste from the master branch. It
> includes a fix to the problem of cross compilers compiling binaries
> with the building system's ld.so in mind, I take no credit for this.

Please don't copy/paste from the master branch.  Merging the master
branch into the wip-hurd branch would be best.  'git cherry-pick'ing
selected commits from the master branch might also be okay, but not as
good.

     Mark

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

* Re: [PATCH 1/4] gnu: Move the cross-gcc build system arguments into a separate procedure.
  2015-02-05 18:20 ` Mark H Weaver
@ 2015-02-05 18:23   ` Mark H Weaver
  0 siblings, 0 replies; 3+ messages in thread
From: Mark H Weaver @ 2015-02-05 18:23 UTC (permalink / raw)
  To: Marek Benc; +Cc: guix-devel

Mark H Weaver <mhw@netris.org> writes:

> Marek Benc <dusxmt@gmx.com> writes:
>> This one is actually just a copy/paste from the master branch. It
>> includes a fix to the problem of cross compilers compiling binaries
>> with the building system's ld.so in mind, I take no credit for this.
>
> Please don't copy/paste from the master branch.  Merging the master
> branch into the wip-hurd branch would be best.

Even better: rebase wip-hurd on current master.  I made several changes
to the same code that you are changing, so it will require some
adjustments.

    Thanks!
      Mark

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

end of thread, other threads:[~2015-02-05 18:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-05 16:25 [PATCH 1/4] gnu: Move the cross-gcc build system arguments into a separate procedure Marek Benc
2015-02-05 18:20 ` Mark H Weaver
2015-02-05 18:23   ` Mark H Weaver

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