gnu: cross-base: Let glibc use the right Binutils programs.

This replaces ‘glibc-cross-objdump.patch’ and
‘glibc-cross-objcopy.patch’ (not applied to glibc@2.38): these patches
were committed upstream and later reverted on the grounds that ‘gcc
-print-prog-name=objdump’ should find the cross ‘objdump’:

  https://inbox.sourceware.org/libc-alpha/d72f5f6f-cc3a-bd89-0800-ffb068928e0f@linaro.org/t/

* gnu/packages/cross-base.scm (cross-libc*): Add
‘add-cross-binutils-to-PATH’ phase.

Change-Id: I38dc7a6134177ec73313c0a9c8b0a12c85c60e26
This commit is contained in:
Ludovic Courtès 2023-12-09 20:14:43 +01:00
parent 7c575fac52
commit 4a4508c241
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -698,35 +698,51 @@ returned."
(guix build utils) (guix build utils)
(srfi srfi-26)) (srfi srfi-26))
,@(package-arguments libc)) ,@(package-arguments libc))
((#:configure-flags flags) ((#:configure-flags flags)
`(cons ,(string-append "--host=" target) `(cons ,(string-append "--host=" target)
,(if (target-hurd? target) ,(if (target-hurd? target)
`(append (list "--disable-werror" `(append (list "--disable-werror"
,@%glibc/hurd-configure-flags) ,@%glibc/hurd-configure-flags)
,flags) ,flags)
flags))) flags)))
((#:phases phases) ((#:phases phases)
`(modify-phases ,phases `(modify-phases ,phases
(add-before 'configure 'set-cross-kernel-headers-path (add-before 'configure 'set-cross-kernel-headers-path
(lambda* (#:key inputs #:allow-other-keys) (lambda* (#:key inputs #:allow-other-keys)
(let* ((kernel (assoc-ref inputs "kernel-headers")) (let* ((kernel (assoc-ref inputs "kernel-headers"))
(cpath (string-append kernel "/include"))) (cpath (string-append kernel "/include")))
(for-each (cut setenv <> cpath) (for-each (cut setenv <> cpath)
',%gcc-cross-include-paths) ',%gcc-cross-include-paths)
(setenv "CROSS_LIBRARY_PATH" (setenv "CROSS_LIBRARY_PATH"
(string-append kernel "/lib")) ; for Hurd's libihash (string-append kernel "/lib")) ; for Hurd's libihash
#t))) #t)))
,@(if (target-hurd? target) (add-before 'configure 'add-cross-binutils-to-PATH
'((add-after 'install 'augment-libc.so (lambda* (#:key inputs #:allow-other-keys)
(lambda* (#:key outputs #:allow-other-keys) ;; Add BINUTILS/TARGET/bin to $PATH so that 'gcc
(let* ((out (assoc-ref outputs "out"))) ;; -print-prog-name=objdump' returns the correct name. See
(substitute* (string-append out "/lib/libc.so") ;; <https://inbox.sourceware.org/libc-alpha/d72f5f6f-cc3a-bd89-0800-ffb068928e0f@linaro.org/t/>.
(("/[^ ]+/lib/libc.so.0.3") (define cross-objdump
(string-append out "/lib/libc.so.0.3" (search-input-file
" libmachuser.so libhurduser.so")))) inputs
#t))) (string-append ,target "/bin/objdump")))
'())))))
(define cross-binutils
(dirname cross-objdump))
(format #t "adding '~a' to the front of 'PATH'~%"
cross-binutils)
(setenv "PATH" (string-append cross-binutils ":" (getenv "PATH")))))
,@(if (target-hurd? target)
'((add-after 'install 'augment-libc.so
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")))
(substitute* (string-append out "/lib/libc.so")
(("/[^ ]+/lib/libc.so.0.3")
(string-append out "/lib/libc.so.0.3"
" libmachuser.so libhurduser.so"))))
#t)))
'())))))
;; Shadow the native "kernel-headers" because glibc's recipe expects the ;; Shadow the native "kernel-headers" because glibc's recipe expects the
;; "kernel-headers" input to point to the right thing. ;; "kernel-headers" input to point to the right thing.