build-system/go: Add pre-built standard library as implicit input.

* gnu/packages/golang.scm (make-go-std): New procedure.
* guix/build-system/go.scm (make-go-std): New procedure.
(lower): Use it.  Add pre-built standard library to inputs.

Signed-off-by: Leo Famulari <leo@famulari.name>
This commit is contained in:
Sarah Morgensen 2021-09-19 22:20:50 -07:00 committed by Leo Famulari
parent c90f73f816
commit d6121d7dd6
No known key found for this signature in database
GPG Key ID: 2646FA30BACA7F08
2 changed files with 44 additions and 2 deletions

@ -831,6 +831,36 @@ in the style of communicating sequential processes (@dfn{CSP}).")
(define-public go go-1.14) (define-public go go-1.14)
(define-public (make-go-std go)
"Return a package which builds the standard library for Go compiler GO."
(package
(name (string-append (package-name go) "-std"))
(version (package-version go))
(source #f)
(build-system go-build-system)
(arguments
`(#:import-path "std"
#:build-flags `("-pkgdir" "pkg") ; "Install" to build directory.
#:allow-go-reference? #t
#:substitutable? #f ; Faster to build than download.
#:tests? #f ; Already tested in the main Go build.
#:go ,go
#:phases
(modify-phases %standard-phases
(delete 'unpack)
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(out-cache (string-append out "/var/cache/go/build")))
(copy-recursively (getenv "GOCACHE") out-cache)
(delete-file (string-append out-cache "/trim.txt"))
(delete-file (string-append out-cache "/README")))))
(delete 'install-license-files))))
(home-page (package-home-page go))
(synopsis "Cached standard library build for Go")
(description (package-description go))
(license (package-license go))))
(define-public go-0xacab-org-leap-shapeshifter (define-public go-0xacab-org-leap-shapeshifter
(let ((commit "0aa6226582efb8e563540ec1d3c5cfcd19200474") (let ((commit "0aa6226582efb8e563540ec1d3c5cfcd19200474")
(revision "12")) (revision "12"))

@ -4,6 +4,7 @@
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net> ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -112,6 +113,9 @@ commit hash and its date rather than a proper release tag."
(let ((go (resolve-interface '(gnu packages golang)))) (let ((go (resolve-interface '(gnu packages golang))))
(module-ref go 'go))) (module-ref go 'go)))
(define (make-go-std)
(module-ref (resolve-interface '(gnu packages golang)) 'make-go-std))
(define* (lower name (define* (lower name
#:key source inputs native-inputs outputs system target #:key source inputs native-inputs outputs system target
(go (default-go)) (go (default-go))
@ -121,6 +125,14 @@ commit hash and its date rather than a proper release tag."
(define private-keywords (define private-keywords
'(#:target #:go #:inputs #:native-inputs)) '(#:target #:go #:inputs #:native-inputs))
(define inputs-with-cache
;; XXX: Avoid a circular dependency. This should be rewritten with
;; 'package-mapping' or similar.
(let ((go-std-name (string-append (package-name go) "-std")))
(if (string-prefix? go-std-name name)
inputs
(cons `(,go-std-name ,((make-go-std) go)) inputs))))
(bag (bag
(name name) (name name)
(system system) (system system)
@ -130,7 +142,7 @@ commit hash and its date rather than a proper release tag."
'()) '())
,@`(("go" ,go)) ,@`(("go" ,go))
,@native-inputs ,@native-inputs
,@(if target '() inputs) ,@(if target '() inputs-with-cache)
,@(if target ,@(if target
;; Use the standard cross inputs of ;; Use the standard cross inputs of
;; 'gnu-build-system'. ;; 'gnu-build-system'.
@ -138,7 +150,7 @@ commit hash and its date rather than a proper release tag."
'()) '())
;; Keep the standard inputs of 'gnu-build-system'. ;; Keep the standard inputs of 'gnu-build-system'.
,@(standard-packages))) ,@(standard-packages)))
(host-inputs (if target inputs '())) (host-inputs (if target inputs-with-cache '()))
;; The cross-libc is really a target package, but for bootstrapping ;; The cross-libc is really a target package, but for bootstrapping
;; reasons, we can't put it in 'host-inputs'. Namely, 'cross-gcc' is a ;; reasons, we can't put it in 'host-inputs'. Namely, 'cross-gcc' is a