gnu: cross-base: Do not strip cross-gcc.

Fixes a regression introduced in 9063ef0 whereby #:strip-binaries? would be
left to #t, leading to an invalid cross-built libgcc.a (see
<http://hydra.gnu.org/build/492479/nixlog/1/tail-reload>.)

* gnu/packages/cross-base.scm (cross-gcc-arguments): Add #:strip-binaries? #f
  unconditionally.  Replace 'install' phase to use "make install-strip".
This commit is contained in:
Ludovic Courtès 2015-06-10 23:19:30 +02:00
parent ab999c2516
commit 2a1552c608
1 changed files with 96 additions and 90 deletions

View File

@ -86,101 +86,107 @@ may be either a libc package or #f.)"
;; Set the current target system so that 'glibc-dynamic-linker' returns the ;; Set the current target system so that 'glibc-dynamic-linker' returns the
;; right name. ;; right name.
(parameterize ((%current-target-system target)) (parameterize ((%current-target-system target))
(substitute-keyword-arguments (package-arguments gcc-4.9) ;; Disable stripping as this can break binaries, with object files of
((#:configure-flags flags) ;; libgcc.a showing up as having an unknown architecture. See
`(append (list ,(string-append "--target=" target) ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
,@(if libc ;; for instance.
'() (let ((args `(#:strip-binaries? #f
`( ;; Disable features not needed at this stage. ,@(package-arguments gcc-4.9))))
"--disable-shared" "--enable-static" (substitute-keyword-arguments args
((#:configure-flags flags)
`(append (list ,(string-append "--target=" target)
,@(if libc
'()
`( ;; Disable features not needed at this stage.
"--disable-shared" "--enable-static"
;; Disable C++ because libstdc++'s configure ;; Disable C++ because libstdc++'s configure
;; script otherwise fails with "Link tests are not ;; script otherwise fails with "Link tests are not
;; allowed after GCC_NO_EXECUTABLES." ;; allowed after GCC_NO_EXECUTABLES."
"--enable-languages=c" "--enable-languages=c"
"--disable-threads" ;libgcc, would need libc "--disable-threads" ;libgcc, would need libc
"--disable-libatomic" "--disable-libatomic"
"--disable-libmudflap" "--disable-libmudflap"
"--disable-libgomp" "--disable-libgomp"
"--disable-libssp" "--disable-libssp"
"--disable-libquadmath" "--disable-libquadmath"
"--disable-decimal-float" ;would need libc "--disable-decimal-float" ;would need libc
))) )))
,(if libc ,(if libc
flags flags
`(remove (cut string-match "--enable-languages.*" <>) `(remove (cut string-match "--enable-languages.*" <>)
,flags)))) ,flags))))
((#:make-flags flags) ((#:make-flags flags)
(if libc (if libc
`(let ((libc (assoc-ref %build-inputs "libc"))) `(let ((libc (assoc-ref %build-inputs "libc")))
;; FLAGS_FOR_TARGET are needed for the target libraries to receive ;; FLAGS_FOR_TARGET are needed for the target libraries to receive
;; the -Bxxx for the startfiles. ;; the -Bxxx for the startfiles.
(cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib") (cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
,flags)) ,flags))
flags)) flags))
((#:phases phases) ((#:phases phases)
(let ((phases (let ((phases
`(alist-cons-after `(alist-cons-after
'install 'make-cross-binutils-visible 'install 'make-cross-binutils-visible
(lambda* (#:key outputs inputs #:allow-other-keys) (lambda* (#:key outputs inputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out")) (let* ((out (assoc-ref outputs "out"))
(libexec (string-append out "/libexec/gcc/" (libexec (string-append out "/libexec/gcc/"
,target)) ,target))
(binutils (string-append (binutils (string-append
(assoc-ref inputs "binutils-cross") (assoc-ref inputs "binutils-cross")
"/bin/" ,target "-")) "/bin/" ,target "-"))
(wrapper (string-append (wrapper (string-append
(assoc-ref inputs "ld-wrapper-cross") (assoc-ref inputs "ld-wrapper-cross")
"/bin/" ,target "-ld"))) "/bin/" ,target "-ld")))
(for-each (lambda (file) (for-each (lambda (file)
(symlink (string-append binutils file) (symlink (string-append binutils file)
(string-append libexec "/" (string-append libexec "/"
file))) file)))
'("as" "nm")) '("as" "nm"))
(symlink wrapper (string-append libexec "/ld")) (symlink wrapper (string-append libexec "/ld"))
#t)) #t))
,phases))) (alist-replace
(if libc 'install
`(alist-cons-before (lambda _
'configure 'set-cross-path ;; Unlike our 'strip' phase, this will do the right thing
(lambda* (#:key inputs #:allow-other-keys) ;; for cross-compilers.
;; Add the cross Linux headers to CROSS_CPATH, and remove them (zero? (system* "make" "install-strip")))
;; from CPATH. ,phases))))
(let ((libc (assoc-ref inputs "libc")) (if libc
(linux (assoc-ref inputs `(alist-cons-before
"libc/linux-headers"))) 'configure 'set-cross-path
(define (cross? x) (lambda* (#:key inputs #:allow-other-keys)
;; Return #t if X is a cross-libc or cross Linux. ;; Add the cross Linux headers to CROSS_CPATH, and remove them
(or (string-prefix? libc x) ;; from CPATH.
(string-prefix? linux x))) (let ((libc (assoc-ref inputs "libc"))
(linux (assoc-ref inputs
"libc/linux-headers")))
(define (cross? x)
;; Return #t if X is a cross-libc or cross Linux.
(or (string-prefix? libc x)
(string-prefix? linux x)))
(setenv "CROSS_CPATH" (setenv "CROSS_CPATH"
(string-append libc "/include:" (string-append libc "/include:"
linux "/include")) linux "/include"))
(setenv "CROSS_LIBRARY_PATH" (setenv "CROSS_LIBRARY_PATH"
(string-append libc "/lib")) (string-append libc "/lib"))
(let ((cpath (search-path-as-string->list (let ((cpath (search-path-as-string->list
(getenv "CPATH"))) (getenv "CPATH")))
(libpath (search-path-as-string->list (libpath (search-path-as-string->list
(getenv "LIBRARY_PATH")))) (getenv "LIBRARY_PATH"))))
(setenv "CPATH" (setenv "CPATH"
(list->search-path-as-string (list->search-path-as-string
(remove cross? cpath) ":")) (remove cross? cpath) ":"))
(setenv "LIBRARY_PATH" (setenv "LIBRARY_PATH"
(list->search-path-as-string (list->search-path-as-string
(remove cross? libpath) ":")) (remove cross? libpath) ":"))
#t))) #t)))
,phases) ,phases)
phases))) phases)))))))
((#:strip-binaries? _)
;; Disable stripping as this can break binaries, with object files of
;; libgcc.a showing up as having an unknown architecture. See
;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
;; for instance.
#f))))
(define (cross-gcc-patches target) (define (cross-gcc-patches target)
"Return GCC patches needed for TARGET." "Return GCC patches needed for TARGET."