guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/03: gnu: cross-base: Use an 'ld' wrapper also when cross-compiling.


From: Ludovic Courtès
Subject: 03/03: gnu: cross-base: Use an 'ld' wrapper also when cross-compiling.
Date: Fri, 03 Apr 2015 23:30:43 +0000

civodul pushed a commit to branch core-updates
in repository guix.

commit 4a740d0fec9ee3813417145816c521757cd1cc64
Author: Ludovic Courtès <address@hidden>
Date:   Fri Apr 3 21:26:24 2015 +0200

    gnu: cross-base: Use an 'ld' wrapper also when cross-compiling.
    
    * gnu/packages/base.scm (make-ld-wrapper): Add #:target parameter and
      honor it.
    * gnu/packages/cross-base.scm (cross-gcc-arguments)[#:phases]
      <make-cross-binutils-visible>: Refer to the ld wrapper.
      (cross-gcc)[native-inputs]: Add "ld-wrapper-cross".
---
 gnu/packages/base.scm       |   20 ++++++++++++++------
 gnu/packages/cross-base.scm |   14 +++++++++++---
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index c935784..0c12505 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -358,11 +358,14 @@ included.")
    (license gpl3+)
    (home-page "http://www.gnu.org/software/binutils/";)))
 
-(define* (make-ld-wrapper name #:key binutils guile bash
+(define* (make-ld-wrapper name #:key binutils
+                          (guile (canonical-package guile-2.0))
+                          (bash (canonical-package bash)) target
                           (guile-for-build guile))
   "Return a package called NAME that contains a wrapper for the 'ld' program
-of BINUTILS, which adds '-rpath' flags to the actual 'ld' command line.  The
-wrapper uses GUILE and BASH."
+of BINUTILS, which adds '-rpath' flags to the actual 'ld' command line.  When
+TARGET is not #f, make a wrapper for the cross-linker for TARGET, called
+'TARGET-ld'.  The wrapper uses GUILE and BASH."
   (package
     (name name)
     (version "0")
@@ -382,8 +385,10 @@ wrapper uses GUILE and BASH."
 
                    (let* ((out (assoc-ref %outputs "out"))
                           (bin (string-append out "/bin"))
-                          (ld  (string-append bin "/ld"))
-                          (go  (string-append bin "/ld.go")))
+                          (ld  ,(if target
+                                    `(string-append bin "/" ,target "-ld")
+                                    '(string-append bin "/ld")))
+                          (go  (string-append ld ".go")))
 
                      (setvbuf (current-output-port) _IOLBF)
                      (format #t "building ~s/bin/ld wrapper in ~s~%"
@@ -403,7 +408,10 @@ wrapper uses GUILE and BASH."
                                        "/bin/bash"))
                        (("@LD@")
                         (string-append (assoc-ref %build-inputs "binutils")
-                                       "/bin/ld")))
+                                       ,(if target
+                                            (string-append "/bin/"
+                                                           target "-ld")
+                                            "/bin/ld"))))
                      (chmod ld #o555)
                      (compile-file ld #:output-file go)))))
     (synopsis "The linker wrapper")
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index dbcc5bc..565a4a8 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -130,12 +130,16 @@ may be either a libc package or #f.)"
                                                   ,target))
                          (binutils (string-append
                                     (assoc-ref inputs "binutils-cross")
-                                    "/bin/" ,target "-")))
+                                    "/bin/" ,target "-"))
+                         (wrapper  (string-append
+                                    (assoc-ref inputs "ld-wrapper-cross")
+                                    "/bin/" ,target "-ld")))
                     (for-each (lambda (file)
                                 (symlink (string-append binutils file)
                                          (string-append libexec "/"
                                                         file)))
-                              '("as" "ld" "nm"))
+                              '("as" "nm"))
+                    (symlink wrapper (string-append libexec "/ld"))
                     #t))
                 ,phases)))
          (if libc
@@ -214,7 +218,11 @@ GCC that does not target a libc; otherwise, target that 
libc."
        ,@(cross-gcc-arguments target libc)))
 
     (native-inputs
-     `(("binutils-cross" ,xbinutils)
+     `(("ld-wrapper-cross" ,(make-ld-wrapper
+                             (string-append "ld-wrapper-" target)
+                             #:target target
+                             #:binutils xbinutils))
+       ("binutils-cross" ,xbinutils)
 
        ;; Call it differently so that the builder can check whether the "libc"
        ;; input is #f.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]