aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--distro/packages/base.scm35
1 files changed, 35 insertions, 0 deletions
diff --git a/distro/packages/base.scm b/distro/packages/base.scm
index 29ef2748fd..e153077424 100644
--- a/distro/packages/base.scm
+++ b/distro/packages/base.scm
@@ -2138,6 +2138,37 @@ store.")
#t))))
(inputs `(("binutils" ,%binutils-static)))))
+(define %glibc-stripped
+ ;; GNU libc's essential shared libraries, dynamic linker, and headers,
+ ;; with all references to store directories stripped. As a result,
+ ;; libc.so is unusable and need to be patched for proper relocation.
+ (package (inherit glibc-final)
+ (name "glibc-stripped")
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+
+ (setvbuf (current-output-port) _IOLBF)
+ (let* ((out (assoc-ref %outputs "out"))
+ (libdir (string-append out "/lib"))
+ (incdir (string-append out "/include"))
+ (libc (assoc-ref %build-inputs "libc")))
+ (mkdir-p libdir)
+ (for-each (lambda (file)
+ (let ((target (string-append libdir "/"
+ (basename file))))
+ (copy-file file target)
+ (remove-store-references target)))
+ (find-files (string-append libc "/lib")
+ "^(crt.*|ld.*|lib(c|m|dl|rt|pthread|nsl|util).*\\.so|libc_nonshared\\.a)$"))
+
+ (copy-recursively (string-append libc "/include") incdir)
+ #t))))
+ (inputs `(("libc" ,glibc-final)))))
+
(define %guile-static
;; A statically-linked Guile that is relocatable--i.e., it can search
;; .scm and .go files relative to its installation directory, rather
@@ -2248,6 +2279,10 @@ store.")
;; A tarball with the statically-linked Binutils programs.
(tarball-package %binutils-static-stripped))
+(define %glibc-bootstrap-tarball
+ ;; A tarball with GNU libc's shared libraries, dynamic linker, and headers.
+ (tarball-package %glibc-stripped))
+
(define %guile-bootstrap-tarball
;; A tarball with the statically-linked, relocatable Guile.
(tarball-package %guile-static-stripped))