(add-after 'strip 'compress-debug-symbols (lambda* (#:key outputs parallel-build? #:allow-other-keys) (define output:debug (assoc-ref outputs "debug")) (when output:debug (let* ((common-file (string-append output:debug "/lib/debug/" #$output "/common.debug")) (shared-object-file? (lambda (file) (and (elf-file? file) (member (call-with-input-file file (compose elf-type parse-elf get-bytevector-all)) (list ET_EXEC ET_DYN))))) ;; dwz only operates on ELF shared object files. (debug-files (find-files output:debug (lambda (f st) (shared-object-file? f)))) (debug-files-count (length debug-files))) (unless (zero? debug-files-count) (when (> debug-files-count 1) (mkdir-p (dirname common-file))) (apply invoke "dwz" "-j" (number->string (if parallel-build? (parallel-job-count) 1)) `(,@(if (> debug-files-count 1) `("--multifile" ,common-file) '()) ,@debug-files)))))))