You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

632 lines
26 KiB

  1. ;;; GNU Guix --- Functional package management for GNU
  2. ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
  3. ;;;
  4. ;;; This file is part of GNU Guix.
  5. ;;;
  6. ;;; GNU Guix is free software; you can redistribute it and/or modify it
  7. ;;; under the terms of the GNU General Public License as published by
  8. ;;; the Free Software Foundation; either version 3 of the License, or (at
  9. ;;; your option) any later version.
  10. ;;;
  11. ;;; GNU Guix is distributed in the hope that it will be useful, but
  12. ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. ;;; GNU General Public License for more details.
  15. ;;;
  16. ;;; You should have received a copy of the GNU General Public License
  17. ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
  18. (define-module (gnu packages make-bootstrap)
  19. #:use-module (guix utils)
  20. #:use-module (guix packages)
  21. #:use-module (guix licenses)
  22. #:use-module (guix build-system trivial)
  23. #:use-module (guix build-system gnu)
  24. #:use-module ((gnu packages) #:select (search-patch))
  25. #:use-module (gnu packages base)
  26. #:use-module (gnu packages cross-base)
  27. #:use-module (gnu packages bash)
  28. #:use-module (gnu packages compression)
  29. #:use-module (gnu packages gawk)
  30. #:use-module (gnu packages gcc)
  31. #:use-module (gnu packages guile)
  32. #:use-module (gnu packages bdw-gc)
  33. #:use-module (gnu packages linux)
  34. #:use-module (gnu packages multiprecision)
  35. #:use-module (ice-9 match)
  36. #:use-module (srfi srfi-1)
  37. #:export (%bootstrap-binaries-tarball
  38. %binutils-bootstrap-tarball
  39. %glibc-bootstrap-tarball
  40. %gcc-bootstrap-tarball
  41. %guile-bootstrap-tarball
  42. %bootstrap-tarballs))
  43. ;;; Commentary:
  44. ;;;
  45. ;;; This module provides tools to build tarballs of the "bootstrap binaries"
  46. ;;; used in (gnu packages bootstrap). These statically-linked binaries are
  47. ;;; taken for granted and used as the root of the whole bootstrap procedure.
  48. ;;;
  49. ;;; Code:
  50. (define* (glibc-for-bootstrap #:optional (base glibc))
  51. "Return a libc deriving from BASE whose `system' and `popen' functions looks
  52. for `sh' in $PATH, and without nscd, and with static NSS modules."
  53. (package (inherit base)
  54. (source (origin (inherit (package-source base))
  55. (patches (cons (search-patch "glibc-bootstrap-system.patch")
  56. (origin-patches (package-source base))))))
  57. (arguments
  58. (substitute-keyword-arguments (package-arguments base)
  59. ((#:configure-flags flags)
  60. ;; Arrange so that getaddrinfo & co. do not contact the nscd,
  61. ;; and can use statically-linked NSS modules.
  62. `(cons* "--disable-nscd" "--disable-build-nscd"
  63. "--enable-static-nss"
  64. ,flags))))))
  65. (define (package-with-relocatable-glibc p)
  66. "Return a variant of P that uses the libc as defined by
  67. `glibc-for-bootstrap'."
  68. (define (cross-bootstrap-libc)
  69. (let ((target (%current-target-system)))
  70. (glibc-for-bootstrap
  71. ;; `cross-libc' already returns a cross libc, so clear
  72. ;; %CURRENT-TARGET-SYSTEM.
  73. (parameterize ((%current-target-system #f))
  74. (cross-libc target)))))
  75. ;; Standard inputs with the above libc and corresponding GCC.
  76. (define (inputs)
  77. (if (%current-target-system) ; is this package cross built?
  78. `(("cross-libc" ,(cross-bootstrap-libc)))
  79. '()))
  80. (define (native-inputs)
  81. (if (%current-target-system)
  82. (let ((target (%current-target-system)))
  83. `(("cross-gcc" ,(cross-gcc target
  84. (cross-binutils target)
  85. (cross-bootstrap-libc)))
  86. ("cross-binutils" ,(cross-binutils target))
  87. ,@%final-inputs))
  88. `(("libc" ,(glibc-for-bootstrap))
  89. ("gcc" ,(package (inherit gcc-4.7)
  90. (inputs
  91. `(("libc",(glibc-for-bootstrap))
  92. ,@(package-inputs gcc-4.7)))))
  93. ,@(fold alist-delete %final-inputs '("libc" "gcc")))))
  94. (package-with-explicit-inputs p inputs
  95. (current-source-location)
  96. #:native-inputs native-inputs))
  97. (define %bash-static
  98. (static-package bash-light))
  99. (define %static-inputs
  100. ;; Packages that are to be used as %BOOTSTRAP-INPUTS.
  101. (let ((coreutils (package (inherit coreutils)
  102. (arguments
  103. `(#:configure-flags
  104. '("--disable-nls"
  105. "--disable-silent-rules"
  106. "--enable-no-install-program=stdbuf,libstdbuf.so"
  107. "CFLAGS=-Os -g0" ; smaller, please
  108. "LDFLAGS=-static -pthread")
  109. #:tests? #f ; signal-related Gnulib tests fail
  110. ,@(package-arguments coreutils)))
  111. ;; Remove optional dependencies such as GMP. Keep Perl
  112. ;; except if it's missing (which is the case when
  113. ;; cross-compiling).
  114. (inputs (match (assoc "perl" (package-inputs coreutils))
  115. (#f '())
  116. (x (list x))))
  117. ;; Remove the `debug' output.
  118. (outputs '("out"))))
  119. (bzip2 (package (inherit bzip2)
  120. (arguments
  121. (substitute-keyword-arguments (package-arguments bzip2)
  122. ((#:phases phases)
  123. `(alist-cons-before
  124. 'build 'dash-static
  125. (lambda _
  126. (substitute* "Makefile"
  127. (("^LDFLAGS[[:blank:]]*=.*$")
  128. "LDFLAGS = -static")))
  129. ,phases))))))
  130. (xz (package (inherit xz)
  131. (arguments
  132. `(#:strip-flags '("--strip-all")
  133. #:phases (alist-cons-before
  134. 'configure 'static-executable
  135. (lambda _
  136. ;; Ask Libtool for a static executable.
  137. (substitute* "src/xz/Makefile.in"
  138. (("^xz_LDADD =")
  139. "xz_LDADD = -all-static")))
  140. %standard-phases)))))
  141. (gawk (package (inherit gawk)
  142. (source (origin (inherit (package-source gawk))
  143. (patches (cons (search-patch "gawk-shell.patch")
  144. (origin-patches
  145. (package-source gawk))))))
  146. (arguments
  147. `(;; Starting from gawk 4.1.0, some of the tests for the
  148. ;; plug-in mechanism just fail on static builds:
  149. ;;
  150. ;; ./fts.awk:1: error: can't open shared library `filefuncs' for reading (No such file or directory)
  151. #:tests? #f
  152. ,@(substitute-keyword-arguments (package-arguments gawk)
  153. ((#:phases phases)
  154. `(alist-cons-before
  155. 'configure 'no-export-dynamic
  156. (lambda _
  157. ;; Since we use `-static', remove
  158. ;; `-export-dynamic'.
  159. (substitute* "configure"
  160. (("-export-dynamic") "")))
  161. ,phases)))))
  162. (inputs (if (%current-target-system)
  163. `(("bash" ,%bash-static))
  164. '()))))
  165. (finalize (compose static-package
  166. package-with-relocatable-glibc)))
  167. `(,@(map (match-lambda
  168. ((name package)
  169. (list name (finalize package))))
  170. `(("tar" ,tar)
  171. ("gzip" ,gzip)
  172. ("bzip2" ,bzip2)
  173. ("xz" ,xz)
  174. ("patch" ,patch)
  175. ("coreutils" ,coreutils)
  176. ("sed" ,sed)
  177. ("grep" ,grep)
  178. ("gawk" ,gawk)))
  179. ("bash" ,%bash-static))))
  180. (define %static-binaries
  181. (package
  182. (name "static-binaries")
  183. (version "0")
  184. (build-system trivial-build-system)
  185. (source #f)
  186. (inputs %static-inputs)
  187. (arguments
  188. `(#:modules ((guix build utils))
  189. #:builder
  190. (begin
  191. (use-modules (ice-9 ftw)
  192. (ice-9 match)
  193. (srfi srfi-1)
  194. (srfi srfi-26)
  195. (guix build utils))
  196. (let ()
  197. (define (directory-contents dir)
  198. (map (cut string-append dir "/" <>)
  199. (scandir dir (negate (cut member <> '("." ".."))))))
  200. (define (copy-directory source destination)
  201. (for-each (lambda (file)
  202. (format #t "copying ~s...~%" file)
  203. (copy-file file
  204. (string-append destination "/"
  205. (basename file))))
  206. (directory-contents source)))
  207. (let* ((out (assoc-ref %outputs "out"))
  208. (bin (string-append out "/bin")))
  209. (mkdir-p bin)
  210. ;; Copy Coreutils binaries.
  211. (let* ((coreutils (assoc-ref %build-inputs "coreutils"))
  212. (source (string-append coreutils "/bin")))
  213. (copy-directory source bin))
  214. ;; For the other inputs, copy just one binary, which has the
  215. ;; same name as the input.
  216. (for-each (match-lambda
  217. ((name . dir)
  218. (let ((source (string-append dir "/bin/" name)))
  219. (format #t "copying ~s...~%" source)
  220. (copy-file source
  221. (string-append bin "/" name)))))
  222. (alist-delete "coreutils" %build-inputs))
  223. ;; But of course, there are exceptions to this rule.
  224. (let ((grep (assoc-ref %build-inputs "grep")))
  225. (copy-file (string-append grep "/bin/fgrep")
  226. (string-append bin "/fgrep"))
  227. (copy-file (string-append grep "/bin/egrep")
  228. (string-append bin "/egrep")))
  229. ;; Clear references to the store path.
  230. (for-each remove-store-references
  231. (directory-contents bin))
  232. (with-directory-excursion bin
  233. ;; Programs such as Perl's build system want these aliases.
  234. (symlink "bash" "sh")
  235. (symlink "gawk" "awk"))
  236. #t)))))
  237. (synopsis "Statically-linked bootstrap binaries")
  238. (description
  239. "Binaries used to bootstrap the distribution.")
  240. (license #f)
  241. (home-page #f)))
  242. (define %binutils-static
  243. ;; Statically-linked Binutils.
  244. (package (inherit binutils)
  245. (name "binutils-static")
  246. (arguments
  247. `(#:configure-flags (cons "--disable-gold"
  248. ,(match (memq #:configure-flags
  249. (package-arguments binutils))
  250. ((#:configure-flags flags _ ...)
  251. flags)))
  252. #:strip-flags '("--strip-all")
  253. #:phases (alist-cons-before
  254. 'configure 'all-static
  255. (lambda _
  256. ;; The `-all-static' libtool flag can only be passed
  257. ;; after `configure', since configure tests don't use
  258. ;; libtool, and only for executables built with libtool.
  259. (substitute* '("binutils/Makefile.in"
  260. "gas/Makefile.in"
  261. "ld/Makefile.in")
  262. (("^LDFLAGS =(.*)$" line)
  263. (string-append line
  264. "\nAM_LDFLAGS = -static -all-static\n"))))
  265. %standard-phases)))))
  266. (define %binutils-static-stripped
  267. ;; The subset of Binutils that we need.
  268. (package (inherit %binutils-static)
  269. (name (string-append (package-name %binutils-static) "-stripped"))
  270. (build-system trivial-build-system)
  271. (outputs '("out"))
  272. (arguments
  273. `(#:modules ((guix build utils))
  274. #:builder
  275. (begin
  276. (use-modules (guix build utils))
  277. (setvbuf (current-output-port) _IOLBF)
  278. (let* ((in (assoc-ref %build-inputs "binutils"))
  279. (out (assoc-ref %outputs "out"))
  280. (bin (string-append out "/bin")))
  281. (mkdir-p bin)
  282. (for-each (lambda (file)
  283. (let ((target (string-append bin "/" file)))
  284. (format #t "copying `~a'...~%" file)
  285. (copy-file (string-append in "/bin/" file)
  286. target)
  287. (remove-store-references target)))
  288. '("ar" "as" "ld" "nm" "objcopy" "objdump"
  289. "ranlib" "readelf" "size" "strings" "strip"))
  290. #t))))
  291. (inputs `(("binutils" ,%binutils-static)))))
  292. (define %glibc-stripped
  293. ;; GNU libc's essential shared libraries, dynamic linker, and headers,
  294. ;; with all references to store directories stripped. As a result,
  295. ;; libc.so is unusable and need to be patched for proper relocation.
  296. (let ((glibc (glibc-for-bootstrap)))
  297. (package (inherit glibc)
  298. (name "glibc-stripped")
  299. (build-system trivial-build-system)
  300. (arguments
  301. `(#:modules ((guix build utils))
  302. #:builder
  303. (begin
  304. (use-modules (guix build utils))
  305. (setvbuf (current-output-port) _IOLBF)
  306. (let* ((out (assoc-ref %outputs "out"))
  307. (libdir (string-append out "/lib"))
  308. (incdir (string-append out "/include"))
  309. (libc (assoc-ref %build-inputs "libc"))
  310. (linux (assoc-ref %build-inputs "linux-headers")))
  311. (mkdir-p libdir)
  312. (for-each (lambda (file)
  313. (let ((target (string-append libdir "/"
  314. (basename file))))
  315. (copy-file file target)
  316. (remove-store-references target)))
  317. (find-files (string-append libc "/lib")
  318. "^(crt.*|ld.*|lib(c|m|dl|rt|pthread|nsl|util).*\\.so(\\..*)?|libc_nonshared\\.a)$"))
  319. (copy-recursively (string-append libc "/include") incdir)
  320. ;; Copy some of the Linux-Libre headers that glibc headers
  321. ;; refer to.
  322. (mkdir (string-append incdir "/linux"))
  323. (for-each (lambda (file)
  324. (copy-file (string-append linux "/include/linux/" file)
  325. (string-append incdir "/linux/"
  326. (basename file))))
  327. '("limits.h" "errno.h" "socket.h" "kernel.h"
  328. "sysctl.h" "param.h" "ioctl.h" "types.h"
  329. "posix_types.h" "stddef.h"))
  330. (copy-recursively (string-append linux "/include/asm")
  331. (string-append incdir "/asm"))
  332. (copy-recursively (string-append linux "/include/asm-generic")
  333. (string-append incdir "/asm-generic"))
  334. #t))))
  335. (inputs `(("libc" ,(let ((target (%current-target-system)))
  336. (if target
  337. (glibc-for-bootstrap
  338. (parameterize ((%current-target-system #f))
  339. (cross-libc target)))
  340. glibc)))
  341. ("linux-headers" ,linux-libre-headers)))
  342. ;; Only one output.
  343. (outputs '("out")))))
  344. (define %gcc-static
  345. ;; A statically-linked GCC, with stripped-down functionality.
  346. (package-with-relocatable-glibc
  347. (package (inherit gcc-4.7)
  348. (name "gcc-static")
  349. (arguments
  350. `(#:modules ((guix build utils)
  351. (guix build gnu-build-system)
  352. (srfi srfi-1)
  353. (srfi srfi-26)
  354. (ice-9 regex))
  355. ,@(substitute-keyword-arguments (package-arguments gcc-4.7)
  356. ((#:guile _) #f)
  357. ((#:implicit-inputs? _) #t)
  358. ((#:configure-flags flags)
  359. `(append (list
  360. "--disable-shared"
  361. "--disable-plugin"
  362. "--enable-languages=c"
  363. "--disable-libmudflap"
  364. "--disable-libgomp"
  365. "--disable-libssp"
  366. "--disable-libquadmath"
  367. "--disable-decimal-float")
  368. (remove (cut string-match "--(.*plugin|enable-languages)" <>)
  369. ,flags)))
  370. ((#:make-flags flags)
  371. (if (%current-target-system)
  372. `(cons "LDFLAGS=-static" ,flags)
  373. `(cons "BOOT_LDFLAGS=-static" ,flags))))))
  374. (inputs `(("gmp-source" ,(package-source gmp))
  375. ("mpfr-source" ,(package-source mpfr))
  376. ("mpc-source" ,(package-source mpc))
  377. ("binutils" ,binutils)
  378. ,@(package-inputs gcc-4.7))))))
  379. (define %gcc-stripped
  380. ;; The subset of GCC files needed for bootstrap.
  381. (package (inherit gcc-4.7)
  382. (name "gcc-stripped")
  383. (build-system trivial-build-system)
  384. (source #f)
  385. (arguments
  386. `(#:modules ((guix build utils))
  387. #:builder
  388. (begin
  389. (use-modules (srfi srfi-1)
  390. (srfi srfi-26)
  391. (guix build utils))
  392. (setvbuf (current-output-port) _IOLBF)
  393. (let* ((out (assoc-ref %outputs "out"))
  394. (bindir (string-append out "/bin"))
  395. (libdir (string-append out "/lib"))
  396. (libexecdir (string-append out "/libexec"))
  397. (gcc (assoc-ref %build-inputs "gcc")))
  398. (copy-recursively (string-append gcc "/bin") bindir)
  399. (for-each remove-store-references
  400. (find-files bindir ".*"))
  401. (copy-recursively (string-append gcc "/lib") libdir)
  402. (for-each remove-store-references
  403. (remove (cut string-suffix? ".h" <>)
  404. (find-files libdir ".*")))
  405. (copy-recursively (string-append gcc "/libexec")
  406. libexecdir)
  407. (for-each remove-store-references
  408. (find-files libexecdir ".*"))
  409. #t))))
  410. (inputs `(("gcc" ,%gcc-static)))))
  411. (define %guile-static
  412. ;; A statically-linked Guile that is relocatable--i.e., it can search
  413. ;; .scm and .go files relative to its installation directory, rather
  414. ;; than in hard-coded configure-time paths.
  415. (let* ((patches* (cons* (search-patch "guile-relocatable.patch")
  416. (search-patch "guile-default-utf8.patch")
  417. (search-patch "guile-linux-syscalls.patch")
  418. (origin-patches (package-source guile-2.0))))
  419. (source* (origin (inherit (package-source guile-2.0))
  420. (patches patches*)))
  421. (guile (package (inherit guile-2.0)
  422. (name (string-append (package-name guile-2.0) "-static"))
  423. (source source*)
  424. (synopsis "Statically-linked and relocatable Guile")
  425. (propagated-inputs
  426. `(("bdw-gc" ,libgc)
  427. ,@(alist-delete "bdw-gc"
  428. (package-propagated-inputs guile-2.0))))
  429. (arguments
  430. `(;; When `configure' checks for ltdl availability, it
  431. ;; doesn't try to link using libtool, and thus fails
  432. ;; because of a missing -ldl. Work around that.
  433. #:configure-flags '("LDFLAGS=-ldl"
  434. ,@(if (%current-target-system)
  435. '("CC_FOR_BUILD=gcc")
  436. '()))
  437. #:phases (alist-cons-before
  438. 'configure 'static-guile
  439. (lambda _
  440. (substitute* "libguile/Makefile.in"
  441. ;; Create a statically-linked `guile'
  442. ;; executable.
  443. (("^guile_LDFLAGS =")
  444. "guile_LDFLAGS = -all-static")
  445. ;; Add `-ldl' *after* libguile-2.0.la.
  446. (("^guile_LDADD =(.*)$" _ ldadd)
  447. (string-append "guile_LDADD = "
  448. (string-trim-right ldadd)
  449. " -ldl\n"))))
  450. %standard-phases)
  451. ;; There are uses of `dynamic-link' in
  452. ;; {foreign,coverage}.test that don't fly here.
  453. #:tests? #f)))))
  454. (package-with-relocatable-glibc (static-package guile))))
  455. (define %guile-static-stripped
  456. ;; A stripped static Guile binary, for use during bootstrap.
  457. (package (inherit %guile-static)
  458. (name "guile-static-stripped")
  459. (build-system trivial-build-system)
  460. (arguments
  461. `(#:modules ((guix build utils))
  462. #:builder
  463. (let ()
  464. (use-modules (guix build utils))
  465. (let* ((in (assoc-ref %build-inputs "guile"))
  466. (out (assoc-ref %outputs "out"))
  467. (guile1 (string-append in "/bin/guile"))
  468. (guile2 (string-append out "/bin/guile")))
  469. (mkdir-p (string-append out "/share/guile/2.0"))
  470. (copy-recursively (string-append in "/share/guile/2.0")
  471. (string-append out "/share/guile/2.0"))
  472. (mkdir-p (string-append out "/lib/guile/2.0/ccache"))
  473. (copy-recursively (string-append in "/lib/guile/2.0/ccache")
  474. (string-append out "/lib/guile/2.0/ccache"))
  475. (mkdir (string-append out "/bin"))
  476. (copy-file guile1 guile2)
  477. ;; Does the relocated Guile work?
  478. (and ,(if (%current-target-system)
  479. #t
  480. '(zero? (system* guile2 "--version")))
  481. (begin
  482. ;; Strip store references.
  483. (remove-store-references guile2)
  484. ;; Does the stripped Guile work? If it aborts, it could be
  485. ;; that it tries to open iconv descriptors and fails because
  486. ;; libc's iconv data isn't available (see
  487. ;; `guile-default-utf8.patch'.)
  488. ,(if (%current-target-system)
  489. #t
  490. '(zero? (system* guile2 "--version")))))))))
  491. (inputs `(("guile" ,%guile-static)))
  492. (outputs '("out"))
  493. (synopsis "Minimal statically-linked and relocatable Guile")))
  494. (define (tarball-package pkg)
  495. "Return a package containing a tarball of PKG."
  496. (package (inherit pkg)
  497. (location (source-properties->location (current-source-location)))
  498. (name (string-append (package-name pkg) "-tarball"))
  499. (build-system trivial-build-system)
  500. (native-inputs `(("tar" ,tar)
  501. ("xz" ,xz)))
  502. (inputs `(("input" ,pkg)))
  503. (arguments
  504. (let ((name (package-name pkg))
  505. (version (package-version pkg)))
  506. `(#:modules ((guix build utils))
  507. #:builder
  508. (begin
  509. (use-modules (guix build utils))
  510. (let ((out (assoc-ref %outputs "out"))
  511. (input (assoc-ref %build-inputs "input"))
  512. (tar (assoc-ref %build-inputs "tar"))
  513. (xz (assoc-ref %build-inputs "xz")))
  514. (mkdir out)
  515. (set-path-environment-variable "PATH" '("bin") (list tar xz))
  516. (with-directory-excursion input
  517. (zero? (system* "tar" "cJvf"
  518. (string-append out "/"
  519. ,name "-" ,version
  520. "-"
  521. ,(or (%current-target-system)
  522. (%current-system))
  523. ".tar.xz")
  524. "."))))))))))
  525. (define %bootstrap-binaries-tarball
  526. ;; A tarball with the statically-linked bootstrap binaries.
  527. (tarball-package %static-binaries))
  528. (define %binutils-bootstrap-tarball
  529. ;; A tarball with the statically-linked Binutils programs.
  530. (tarball-package %binutils-static-stripped))
  531. (define %glibc-bootstrap-tarball
  532. ;; A tarball with GNU libc's shared libraries, dynamic linker, and headers.
  533. (tarball-package %glibc-stripped))
  534. (define %gcc-bootstrap-tarball
  535. ;; A tarball with a dynamic-linked GCC and its headers.
  536. (tarball-package %gcc-stripped))
  537. (define %guile-bootstrap-tarball
  538. ;; A tarball with the statically-linked, relocatable Guile.
  539. (tarball-package %guile-static-stripped))
  540. (define %bootstrap-tarballs
  541. ;; A single derivation containing all the bootstrap tarballs, for
  542. ;; convenience.
  543. (package
  544. (name "bootstrap-tarballs")
  545. (version "0")
  546. (source #f)
  547. (build-system trivial-build-system)
  548. (arguments
  549. `(#:modules ((guix build utils))
  550. #:builder
  551. (let ((out (assoc-ref %outputs "out")))
  552. (use-modules (guix build utils)
  553. (ice-9 match)
  554. (srfi srfi-26))
  555. (setvbuf (current-output-port) _IOLBF)
  556. (mkdir out)
  557. (chdir out)
  558. (for-each (match-lambda
  559. ((name . directory)
  560. (for-each (lambda (file)
  561. (format #t "~a -> ~a~%" file out)
  562. (symlink file (basename file)))
  563. (find-files directory "\\.tar\\."))))
  564. %build-inputs)
  565. #t)))
  566. (inputs `(("guile-tarball" ,%guile-bootstrap-tarball)
  567. ("gcc-tarball" ,%gcc-bootstrap-tarball)
  568. ("binutils-tarball" ,%binutils-bootstrap-tarball)
  569. ("glibc-tarball" ,%glibc-bootstrap-tarball)
  570. ("coreutils&co-tarball" ,%bootstrap-binaries-tarball)))
  571. (synopsis #f)
  572. (description #f)
  573. (home-page #f)
  574. (license gpl3+)))
  575. ;;; make-bootstrap.scm ends here