From f13f60cb2620433280ccb2132376b7c6d3dbc06f Mon Sep 17 00:00:00 2001 From: Manolis Ragkousis Date: Wed, 30 Nov 2016 16:49:48 +0200 Subject: gnu: make-bootstrap: Produce the correct %glibc-bootstrap-tarball for Hurd systems. * gnu/packages/make-bootstrap.scm (%glibc-bootstrap-tarball): Make it a procedure. (%glibc-stripped): Make it a procedure and move the kernel specific part from here to ... * guix/build/make-bootstrap.scm (make-stripped-libc): ... here. New file. * Makefile.am (MODULES): Add it. --- guix/build/make-bootstrap.scm | 84 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 guix/build/make-bootstrap.scm (limited to 'guix/build') diff --git a/guix/build/make-bootstrap.scm b/guix/build/make-bootstrap.scm new file mode 100644 index 0000000000..bc4c0e3d5f --- /dev/null +++ b/guix/build/make-bootstrap.scm @@ -0,0 +1,84 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 Manolis Fragkiskos Ragkousis +;;; Copyright © 2015 Ludovic Courtès +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (guix build make-bootstrap) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) + #:use-module (srfi srfi-19) + #:use-module (srfi srfi-26) + #:use-module (guix build utils) + #:export (make-stripped-libc)) + +;; Commentary: +;; +;; This module provides facilities to build the bootstrap binaries. +;; +;; Code: + +(define (make-stripped-libc output libc kernel-headers) + "Copy to OUTPUT the subset of LIBC and KERNEL-HEADERS that is needed +when producing a bootstrap libc." + + (define (copy-mach-headers output kernel-headers) + (let* ((incdir (string-append output "/include"))) + (copy-recursively (string-append libc "/include") incdir) + + (copy-recursively (string-append kernel-headers "/include/mach") + (string-append incdir "/mach")) + #t)) + + (define (copy-linux-headers output kernel-headers) + (let* ((incdir (string-append output "/include"))) + (copy-recursively (string-append libc "/include") incdir) + + ;; Copy some of the Linux-Libre headers that glibc headers + ;; refer to. + (mkdir (string-append incdir "/linux")) + (for-each (lambda (file) + (install-file (string-append kernel-headers "/include/linux/" file) + (string-append incdir "/linux"))) + '("limits.h" "errno.h" "socket.h" "kernel.h" + "sysctl.h" "param.h" "ioctl.h" "types.h" + "posix_types.h" "stddef.h")) + + (copy-recursively (string-append kernel-headers "/include/asm") + (string-append incdir "/asm")) + (copy-recursively (string-append kernel-headers "/include/asm-generic") + (string-append incdir "/asm-generic")) + #t)) + + (define %libc-object-files-rx "^(crt.*|ld.*|lib(c|m|dl|rt|pthread|nsl|\ +util).*\\.so(\\..*)?|lib(machuser|hurduser).so.*|libc(rt|)_nonshared\\.a)$") + + (setvbuf (current-output-port) _IOLBF) + (let* ((libdir (string-append output "/lib"))) + (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") %libc-object-files-rx)) + #t) + + (if (directory-exists? (string-append kernel-headers "/include/mach")) + (copy-mach-headers output kernel-headers) + (copy-linux-headers output kernel-headers))) + + -- cgit v1.2.3