From 8b1dfc144bf99b4673055c44103e690a5583d1f0 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 14 Sep 2021 10:44:30 -0400 Subject: 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. : Use LINKER to derive the linker source. --- gnu/packages/base.scm | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'gnu/packages/base.scm') diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index e14cf9a6db..41641c7ffa 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -19,6 +19,7 @@ ;;; Copyright © 2021 Leo Le Bouter ;;; Copyright © 2021 Maxime Devos ;;; Copyright © 2021 Guillaume Le Vaillant +;;; Copyright © 2021 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; @@ -71,6 +72,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:export (glibc + make-ld-wrapper libiconv-if-needed)) ;;; Commentary: @@ -603,6 +605,7 @@ included.") (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 @@ wrapper uses GUILE and BASH. 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 @@ wrapper for the cross-linker for that target, called 'TARGET-ld'." (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 @@ wrapper for the cross-linker for that target, called 'TARGET-ld'." (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 @@ the store.") (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. -- cgit v1.2.3