diff options
author | Ludovic Courtès <ludo@gnu.org> | 2022-01-14 15:59:37 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-01-14 22:39:24 +0100 |
commit | d87a1ba6b8b2f08ba6898033353d7463355bd146 (patch) | |
tree | 8631f751eaffa2af07e722d224a5c36c7a6a9719 /guix | |
parent | b0aab0f255556c8c5027e3ad11bfc7826bb1f609 (diff) |
compile: Disable cross-module inlining and related features.
This makes no difference on Guile <= 3.0.7.
* guix/build/compile.scm (strip-keyword-arguments): New procedure.
(optimizations-for-level): Use it to strip keywords related to
cross-module inlining.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/build/compile.scm | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/guix/build/compile.scm b/guix/build/compile.scm index b86ec3b743..82761a2190 100644 --- a/guix/build/compile.scm +++ b/guix/build/compile.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013-2014, 2016-2020, 2022 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> ;;; ;;; This file is part of GNU Guix. @@ -37,6 +37,21 @@ ;;; ;;; Code: +(define (strip-keyword-arguments keywords args) ;XXX: copied from (guix utils) + "Remove all of the keyword arguments listed in KEYWORDS from ARGS." + (let loop ((args args) + (result '())) + (match args + (() + (reverse result)) + (((? keyword? kw) arg . rest) + (loop rest + (if (memq kw keywords) + result + (cons* arg kw result)))) + ((head . tail) + (loop tail (cons head result)))))) + (define optimizations-for-level (or (and=> (false-if-exception (resolve-interface '(system base optimize))) @@ -60,9 +75,18 @@ (loop rest `(#f ,kw ,@result)))))) (lambda (level) - (if (<= level 1) - %lightweight-optimizations - %default-optimizations))))) + ;; In the upcoming Guile 3.0.8, .go files include code of their + ;; inlinable exports and free variables are resolved at compile time + ;; (both are enabled at -O1) to permit cross-module inlining + ;; (enabled at -O2). Unfortunately, this currently leads to + ;; non-reproducible and more expensive builds, so we turn it off + ;; here: + ;; <https://wingolog.org/archives/2021/05/13/cross-module-inlining-in-guile>. + (strip-keyword-arguments '(#:inlinable-exports? #:resolve-free-vars? + #:cross-module-inlining?) + (if (<= level 1) + %lightweight-optimizations + %default-optimizations)))))) (define (supported-warning-type? type) "Return true if TYPE, a symbol, denotes a supported warning type." |