(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)))))))