gnu: make-ld-wrapper: Add a LINKER argument.

This allows creating wrappers for other linkers than "ld", such as "ld.gold".

* gnu/packages/base.scm (make-ld-wrapper): New variable.
[linker]: New argument.  Update doc.
<ld>: Use LINKER to derive the linker source.
This commit is contained in:
Maxim Cournoyer 2021-09-14 10:44:30 -04:00
parent b04a20f77f
commit 8b1dfc144b
No known key found for this signature in database
GPG key ID: 1260E46482E63562

View file

@ -19,6 +19,7 @@
;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -71,6 +72,7 @@ (define-module (gnu packages base)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:export (glibc
make-ld-wrapper
libiconv-if-needed))
;;; Commentary:
@ -603,6 +605,7 @@ (define-public binutils-gold
(define* (make-ld-wrapper name #:key
(target (const #f))
binutils
(linker "ld")
(guile (canonical-package guile-3.0))
(bash (canonical-package bash))
(guile-for-build guile))
@ -612,7 +615,9 @@ (define* (make-ld-wrapper name #:key
TARGET must be a one-argument procedure that, given a system type, returns a
cross-compilation target triplet or #f. When the result is not #f, make a
wrapper for the cross-linker for that target, called 'TARGET-ld'."
wrapper for the cross-linker for that target, called 'TARGET-ld'. To use a
different linker than the default \"ld\", such as \"ld.gold\" the linker name
can be provided via the LINKER argument."
;; Note: #:system->target-triplet is a procedure so that the evaluation of
;; its result can be delayed until the 'arguments' field is evaluated, thus
;; in a context where '%current-system' is accurate.
@ -637,8 +642,9 @@ (define* (make-ld-wrapper name #:key
(let* ((out (assoc-ref %outputs "out"))
(bin (string-append out "/bin"))
(ld ,(if target
`(string-append bin "/" ,target "-ld")
'(string-append bin "/ld")))
`(string-append bin "/" ,target "-"
,linker)
`(string-append bin "/" ,linker)))
(go (string-append ld ".go")))
(setvbuf (current-output-port)
@ -663,11 +669,10 @@ (define* (make-ld-wrapper name #:key
(string-append (assoc-ref %build-inputs "binutils")
,(if target
(string-append "/bin/"
target "-ld")
"/bin/ld"))))
target "-" linker)
(string-append "/bin/" linker)))))
(chmod ld #o555)
(compile-file ld #:output-file go)
#t)))))
(compile-file ld #:output-file go))))))
(synopsis "The linker wrapper")
(description
"The linker wrapper (or @code{ld-wrapper}) wraps the linker to add any
@ -676,8 +681,6 @@ (define* (make-ld-wrapper name #:key
(home-page "https://www.gnu.org/software/guix//")
(license gpl3+)))
(export make-ld-wrapper)
(define-public glibc
;; This is the GNU C Library, used on GNU/Linux and GNU/Hurd. Prior to
;; version 2.28, GNU/Hurd used a different glibc branch.