From b4469d8c12905f07a6825654bc3313beb0563cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 5 Oct 2014 16:25:25 +0200 Subject: [PATCH] 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". --- gnu/packages/cross-base.scm | 175 ++++++++++++++++++------------------ tests/monads.scm | 8 +- 2 files changed, 93 insertions(+), 90 deletions(-) diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 5e824f5877..0a0272cf74 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -69,98 +69,101 @@ (define (cross-gcc-arguments target libc) "Return build system arguments for a cross-gcc for TARGET, using LIBC (which may be either a libc package or #f.)" - (substitute-keyword-arguments (package-arguments gcc-4.8) - ((#:configure-flags flags) - `(append (list ,(string-append "--target=" target) - ,@(gcc-configure-flags-for-triplet target) - ,@(if libc - '() - `(;; Disable features not needed at this stage. - "--disable-shared" "--enable-static" + ;; Set the current target system so that 'glibc-dynamic-linker' returns the + ;; right name. + (parameterize ((%current-target-system target)) + (substitute-keyword-arguments (package-arguments gcc-4.8) + ((#:configure-flags flags) + `(append (list ,(string-append "--target=" target) + ,@(gcc-configure-flags-for-triplet target) + ,@(if libc + '() + `( ;; Disable features not needed at this stage. + "--disable-shared" "--enable-static" - ;; Disable C++ because libstdc++'s configure - ;; script otherwise fails with "Link tests are not - ;; allowed after GCC_NO_EXECUTABLES." - "--enable-languages=c" + ;; Disable C++ because libstdc++'s configure + ;; script otherwise fails with "Link tests are not + ;; allowed after GCC_NO_EXECUTABLES." + "--enable-languages=c" - "--disable-threads" ;libgcc, would need libc - "--disable-libatomic" - "--disable-libmudflap" - "--disable-libgomp" - "--disable-libssp" - "--disable-libquadmath" - "--disable-decimal-float" ;would need libc - ))) + "--disable-threads" ;libgcc, would need libc + "--disable-libatomic" + "--disable-libmudflap" + "--disable-libgomp" + "--disable-libssp" + "--disable-libquadmath" + "--disable-decimal-float" ;would need libc + ))) - ,(if libc - flags - `(remove (cut string-match "--enable-languages.*" <>) - ,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 + flags + `(remove (cut string-match "--enable-languages.*" <>) + ,flags)))) + ((#:make-flags flags) (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))) + `(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 + `(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" - (string-append libc "/include:" - linux "/include")) - (setenv "CROSS_LIBRARY_PATH" - (string-append libc "/lib")) + (setenv "CROSS_CPATH" + (string-append libc "/include:" + linux "/include")) + (setenv "CROSS_LIBRARY_PATH" + (string-append libc "/lib")) - (let ((cpath (search-path-as-string->list - (getenv "CPATH"))) - (libpath (search-path-as-string->list - (getenv "LIBRARY_PATH")))) - (setenv "CPATH" - (list->search-path-as-string - (remove cross? cpath) ":")) - (setenv "LIBRARY_PATH" - (list->search-path-as-string - (remove cross? libpath) ":")) - #t))) - ,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 - ;; - ;; for instance. - #f))) + (let ((cpath (search-path-as-string->list + (getenv "CPATH"))) + (libpath (search-path-as-string->list + (getenv "LIBRARY_PATH")))) + (setenv "CPATH" + (list->search-path-as-string + (remove cross? cpath) ":")) + (setenv "LIBRARY_PATH" + (list->search-path-as-string + (remove cross? libpath) ":")) + #t))) + ,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 + ;; + ;; for instance. + #f)))) (define* (cross-gcc target #:optional (xbinutils (cross-binutils target)) libc) diff --git a/tests/monads.scm b/tests/monads.scm index b31cabdb54..5514c8386c 100644 --- a/tests/monads.scm +++ b/tests/monads.scm @@ -123,10 +123,10 @@ (test-assert "package-file + package->cross-derivation" (run-with-store %store - (mlet* %store-monad ((file (package-file coreutils "bin/ls" - #:target "foo64-gnu")) - (xcu (package->cross-derivation coreutils - "foo64-gnu"))) + (mlet* %store-monad ((target -> "mips64el-linux-gnu") + (file (package-file coreutils "bin/ls" + #:target target)) + (xcu (package->cross-derivation coreutils target))) (let ((output (derivation->output-path xcu))) (return (string=? file (string-append output "/bin/ls"))))) #:guile-for-build (package-derivation %store %bootstrap-guile)))