mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-12 06:06:53 -05:00
gnu: cross-base: Use the right dynamic linker name.
* gnu/packages/cross-base.scm (cross-gcc-arguments): Parametrize %CURRENT-TARGET-SYSTEM. * tests/monads.scm ("package-file + package->cross-derivation"): Replace "foo64-gnu" with "mips64el-linux-gnu".
This commit is contained in:
parent
cdb4b4b3ed
commit
b4469d8c12
2 changed files with 93 additions and 90 deletions
|
@ -69,98 +69,101 @@ (define (cross-binutils target)
|
||||||
(define (cross-gcc-arguments target libc)
|
(define (cross-gcc-arguments target libc)
|
||||||
"Return build system arguments for a cross-gcc for TARGET, using LIBC (which
|
"Return build system arguments for a cross-gcc for TARGET, using LIBC (which
|
||||||
may be either a libc package or #f.)"
|
may be either a libc package or #f.)"
|
||||||
(substitute-keyword-arguments (package-arguments gcc-4.8)
|
;; Set the current target system so that 'glibc-dynamic-linker' returns the
|
||||||
((#:configure-flags flags)
|
;; right name.
|
||||||
`(append (list ,(string-append "--target=" target)
|
(parameterize ((%current-target-system target))
|
||||||
,@(gcc-configure-flags-for-triplet target)
|
(substitute-keyword-arguments (package-arguments gcc-4.8)
|
||||||
,@(if libc
|
((#:configure-flags flags)
|
||||||
'()
|
`(append (list ,(string-append "--target=" target)
|
||||||
`(;; Disable features not needed at this stage.
|
,@(gcc-configure-flags-for-triplet target)
|
||||||
"--disable-shared" "--enable-static"
|
,@(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
|
|
||||||
`(let ((libc (assoc-ref %build-inputs "libc")))
|
|
||||||
;; FLAGS_FOR_TARGET are needed for the target libraries to receive
|
|
||||||
;; the -Bxxx for the startfiles.
|
|
||||||
(cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
|
|
||||||
,flags))
|
|
||||||
flags))
|
|
||||||
((#:phases phases)
|
|
||||||
(let ((phases
|
|
||||||
`(alist-cons-after
|
|
||||||
'install 'make-cross-binutils-visible
|
|
||||||
(lambda* (#:key outputs inputs #:allow-other-keys)
|
|
||||||
(let* ((out (assoc-ref outputs "out"))
|
|
||||||
(libexec (string-append out "/libexec/gcc/"
|
|
||||||
,target))
|
|
||||||
(binutils (string-append
|
|
||||||
(assoc-ref inputs "binutils-cross")
|
|
||||||
"/bin/" ,target "-")))
|
|
||||||
(for-each (lambda (file)
|
|
||||||
(symlink (string-append binutils file)
|
|
||||||
(string-append libexec "/"
|
|
||||||
file)))
|
|
||||||
'("as" "ld" "nm"))
|
|
||||||
#t))
|
|
||||||
,phases)))
|
|
||||||
(if libc
|
(if libc
|
||||||
`(alist-cons-before
|
`(let ((libc (assoc-ref %build-inputs "libc")))
|
||||||
'configure 'set-cross-path
|
;; FLAGS_FOR_TARGET are needed for the target libraries to receive
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
;; the -Bxxx for the startfiles.
|
||||||
;; Add the cross Linux headers to CROSS_CPATH, and remove them
|
(cons (string-append "FLAGS_FOR_TARGET=-B" libc "/lib")
|
||||||
;; from CPATH.
|
,flags))
|
||||||
(let ((libc (assoc-ref inputs "libc"))
|
flags))
|
||||||
(linux (assoc-ref inputs
|
((#:phases phases)
|
||||||
"libc/linux-headers")))
|
(let ((phases
|
||||||
(define (cross? x)
|
`(alist-cons-after
|
||||||
;; Return #t if X is a cross-libc or cross Linux.
|
'install 'make-cross-binutils-visible
|
||||||
(or (string-prefix? libc x)
|
(lambda* (#:key outputs inputs #:allow-other-keys)
|
||||||
(string-prefix? linux x)))
|
(let* ((out (assoc-ref outputs "out"))
|
||||||
|
(libexec (string-append out "/libexec/gcc/"
|
||||||
|
,target))
|
||||||
|
(binutils (string-append
|
||||||
|
(assoc-ref inputs "binutils-cross")
|
||||||
|
"/bin/" ,target "-")))
|
||||||
|
(for-each (lambda (file)
|
||||||
|
(symlink (string-append binutils file)
|
||||||
|
(string-append libexec "/"
|
||||||
|
file)))
|
||||||
|
'("as" "ld" "nm"))
|
||||||
|
#t))
|
||||||
|
,phases)))
|
||||||
|
(if libc
|
||||||
|
`(alist-cons-before
|
||||||
|
'configure 'set-cross-path
|
||||||
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
;; Add the cross Linux headers to CROSS_CPATH, and remove them
|
||||||
|
;; from CPATH.
|
||||||
|
(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? _)
|
((#:strip-binaries? _)
|
||||||
;; Disable stripping as this can break binaries, with object files of
|
;; Disable stripping as this can break binaries, with object files of
|
||||||
;; libgcc.a showing up as having an unknown architecture. See
|
;; libgcc.a showing up as having an unknown architecture. See
|
||||||
;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
|
;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
|
||||||
;; for instance.
|
;; for instance.
|
||||||
#f)))
|
#f))))
|
||||||
|
|
||||||
(define* (cross-gcc target
|
(define* (cross-gcc target
|
||||||
#:optional (xbinutils (cross-binutils target)) libc)
|
#:optional (xbinutils (cross-binutils target)) libc)
|
||||||
|
|
|
@ -123,10 +123,10 @@ (define (g x)
|
||||||
|
|
||||||
(test-assert "package-file + package->cross-derivation"
|
(test-assert "package-file + package->cross-derivation"
|
||||||
(run-with-store %store
|
(run-with-store %store
|
||||||
(mlet* %store-monad ((file (package-file coreutils "bin/ls"
|
(mlet* %store-monad ((target -> "mips64el-linux-gnu")
|
||||||
#:target "foo64-gnu"))
|
(file (package-file coreutils "bin/ls"
|
||||||
(xcu (package->cross-derivation coreutils
|
#:target target))
|
||||||
"foo64-gnu")))
|
(xcu (package->cross-derivation coreutils target)))
|
||||||
(let ((output (derivation->output-path xcu)))
|
(let ((output (derivation->output-path xcu)))
|
||||||
(return (string=? file (string-append output "/bin/ls")))))
|
(return (string=? file (string-append output "/bin/ls")))))
|
||||||
#:guile-for-build (package-derivation %store %bootstrap-guile)))
|
#:guile-for-build (package-derivation %store %bootstrap-guile)))
|
||||||
|
|
Loading…
Reference in a new issue