summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/cross-base.scm175
-rw-r--r--tests/monads.scm8
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
-     ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
-     ;; 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
+       ;; <http://lists.fedoraproject.org/pipermail/arm/2010-August/000663.html>
+       ;; 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)))