aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Dong <accounts@carldong.me>2019-05-13 16:02:13 -0400
committerCarl Dong <contact@carldong.me>2019-07-16 11:13:15 -0400
commit6869b6635afd93872b8f0d9f2db0db4c0d765a86 (patch)
tree01f98c54bb1b66015008a4e5d34d4ec852e077b4
parentd4cafcaf30d3d82b89e87dc7acc9905083b39d03 (diff)
downloadguix-6869b6635afd93872b8f0d9f2db0db4c0d765a86.tar
guix-6869b6635afd93872b8f0d9f2db0db4c0d765a86.tar.gz
gnu: Allow building toolchain with non-default libc.
* gnu/packages/base.scm (make-gcc-libc): Make public. * gnu/packages/commencement.scm (make-gcc-toolchain): Add 'libc' optional argument to specify using a non-default glibc package, also make public.
-rw-r--r--gnu/packages/base.scm2
-rw-r--r--gnu/packages/commencement.scm111
2 files changed, 62 insertions, 51 deletions
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 90dd69cfa3..d984ebe1eb 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1009,7 +1009,7 @@ with the Linux kernel.")
(("/bin/pwd") "pwd"))
#t))))))))
-(define (make-gcc-libc base-gcc libc)
+(define-public (make-gcc-libc base-gcc libc)
"Return a GCC that targets LIBC."
(package (inherit base-gcc)
(name (string-append (package-name base-gcc) "-"
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index a8ec677cee..4a41e2abf3 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -54,7 +54,8 @@
#:use-module (srfi srfi-26)
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
- #:use-module (ice-9 regex))
+ #:use-module (ice-9 regex)
+ #:export (make-gcc-toolchain))
;;; Commentary:
;;;
@@ -1014,55 +1015,65 @@ COREUTILS-FINAL vs. COREUTILS, etc."
;;; GCC toolchain.
;;;
-(define (make-gcc-toolchain gcc)
- "Return a complete toolchain for GCC."
- (package
- (name "gcc-toolchain")
- (version (package-version gcc))
- (source #f)
- (build-system trivial-build-system)
- (arguments
- '(#:modules ((guix build union))
- #:builder (begin
- (use-modules (ice-9 match)
- (srfi srfi-26)
- (guix build union))
-
- (let ((out (assoc-ref %outputs "out")))
-
- (match %build-inputs
- (((names . directories) ...)
- (union-build out directories)))
-
- (union-build (assoc-ref %outputs "debug")
- (list (assoc-ref %build-inputs
- "libc-debug")))
- (union-build (assoc-ref %outputs "static")
- (list (assoc-ref %build-inputs
- "libc-static")))
- #t))))
-
- (native-search-paths (package-native-search-paths gcc))
- (search-paths (package-search-paths gcc))
-
- (license (package-license gcc))
- (synopsis "Complete GCC tool chain for C/C++ development")
- (description
- "This package provides a complete GCC tool chain for C/C++ development to
-be installed in user profiles. This includes GCC, as well as libc (headers
-and binaries, plus debugging symbols in the @code{debug} output), and Binutils.")
- (home-page "https://gcc.gnu.org/")
- (outputs '("out" "debug" "static"))
-
- ;; The main raison d'ĂȘtre of this "meta-package" is (1) to conveniently
- ;; install everything that we need, and (2) to make sure ld-wrapper comes
- ;; before Binutils' ld in the user's profile.
- (inputs `(("gcc" ,gcc)
- ("ld-wrapper" ,(car (assoc-ref %final-inputs "ld-wrapper")))
- ("binutils" ,binutils-final)
- ("libc" ,glibc-final)
- ("libc-debug" ,glibc-final "debug")
- ("libc-static" ,glibc-final "static")))))
+;; Using the following procedure, a gcc toolchain targeting glibc-2.27 can be
+;; instantiated like this:
+;;
+;; (define-public gcc-glibc-2.27-toolchain
+;; (make-gcc-toolchain gcc glibc-2.27))
+
+(define* (make-gcc-toolchain gcc
+ #:optional
+ (libc #f))
+ "Return a complete toolchain for GCC. If LIBC is specified, target that libc."
+ (let ((gcc (if libc (make-gcc-libc gcc libc) gcc))
+ (libc (if libc libc glibc-final)))
+ (package
+ (name (string-append (package-name gcc) "-toolchain"))
+ (version (package-version gcc))
+ (source #f)
+ (build-system trivial-build-system)
+ (arguments
+ '(#:modules ((guix build union))
+ #:builder (begin
+ (use-modules (ice-9 match)
+ (srfi srfi-26)
+ (guix build union))
+
+ (let ((out (assoc-ref %outputs "out")))
+
+ (match %build-inputs
+ (((names . directories) ...)
+ (union-build out directories)))
+
+ (union-build (assoc-ref %outputs "debug")
+ (list (assoc-ref %build-inputs
+ "libc-debug")))
+ (union-build (assoc-ref %outputs "static")
+ (list (assoc-ref %build-inputs
+ "libc-static")))
+ #t))))
+
+ (native-search-paths (package-native-search-paths gcc))
+ (search-paths (package-search-paths gcc))
+
+ (license (package-license gcc))
+ (synopsis "Complete GCC tool chain for C/C++ development")
+ (description
+ "This package provides a complete GCC tool chain for C/C++ development to
+be installed in user profiles. This includes GCC, as well as libc (headers
+an d binaries, plus debugging symbols in the @code{debug} output), and Binutils.")
+ (home-page "https://gcc.gnu.org/")
+ (outputs '("out" "debug" "static"))
+
+ ;; The main raison d'ĂȘtre of this "meta-package" is (1) to conveniently
+ ;; install everything that we need, and (2) to make sure ld-wrapper comes
+ ;; before Binutils' ld in the user's profile.
+ (inputs `(("gcc" ,gcc)
+ ("ld-wrapper" ,(car (assoc-ref %final-inputs "ld-wrapper")))
+ ("binutils" ,binutils-final)
+ ("libc" ,libc)
+ ("libc-debug" ,libc "debug")
+ ("libc-static" ,libc "static"))))))
(define-public gcc-toolchain-4.8
(make-gcc-toolchain gcc-4.8))