summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/base.scm3
-rw-r--r--gnu/packages/commencement.scm4
-rw-r--r--guix/build-system/gnu.scm2
-rw-r--r--guix/build/gnu-build-system.scm11
4 files changed, 19 insertions, 1 deletions
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 5bf27c9ef1..b4f4d8ee06 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -421,6 +421,9 @@ included.")
             ;; XXX: Work around "undefined reference to `__stack_chk_guard'".
             "libc_cv_ssp=no")
 
+      ;; Using '--strip-all' on crt*.o breaks them.
+      #:strip-flags '("--strip-debug")
+
       #:tests? #f                                 ; XXX
       #:phases (alist-cons-before
                 'configure 'pre-configure
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 20831de997..309e195bc2 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -170,6 +170,10 @@ identifier SYSTEM."
                    (ice-9 regex)
                    (srfi srfi-1)
                    (srfi srfi-26))
+
+        ;; Using '--strip-all' leads to a link failure while building libc.
+        #:strip-flags '("--strip-debug")
+
         ,@(substitute-keyword-arguments (package-arguments gcc-4.8)
             ((#:configure-flags flags)
              `(append (list ,(string-append "--target=" (boot-triplet))
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index f765a144c4..e2b41b1898 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -275,6 +275,7 @@ standard packages used as implicit inputs of the GNU build system."
                     (patch-shebangs? #t)
                     (strip-binaries? #t)
                     (strip-flags ''("--strip-all"))
+                    (archive-strip-flags ''("--strip-debug"))
                     (strip-directories ''("lib" "lib64" "libexec"
                                           "bin" "sbin"))
                     (phases '%standard-phases)
@@ -338,6 +339,7 @@ are allowed to refer to."
                   #:patch-shebangs? ,patch-shebangs?
                   #:strip-binaries? ,strip-binaries?
                   #:strip-flags ,strip-flags
+                  #:archive-strip-flags ,archive-strip-flags
                   #:strip-directories ,strip-directories)))
 
   (define guile-for-build
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 11b43c521f..a985b1c715 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -298,6 +298,12 @@ makefiles."
                                      (string-append target "-objcopy")
                                      "objcopy"))
                 (strip-flags '("--strip-all"))
+
+                ;; Using '--strip-all' on .a file would remove the archive
+                ;; index, leading to "Archive has no index" errors when
+                ;; linking against them.
+                (archive-strip-flags '("--strip-debug"))
+
                 (strip-directories '("lib" "lib64" "libexec"
                                      "bin" "sbin"))
                 #:allow-other-keys)
@@ -353,7 +359,10 @@ makefiles."
                              (or (not debug-output)
                                  (make-debug-file path))
                              (zero? (apply system* strip-command
-                                           (append strip-flags (list path))))
+                                           (append (if (ar-file? path)
+                                                       archive-strip-flags
+                                                       strip-flags)
+                                                   (list path))))
                              (or (not debug-output)
                                  (add-debug-link path))))
                       (const #t)                  ; down