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