guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/04: compile: Disable cross-module inlining and related features.


From: guix-commits
Subject: 02/04: compile: Disable cross-module inlining and related features.
Date: Fri, 14 Jan 2022 16:43:22 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit d87a1ba6b8b2f08ba6898033353d7463355bd146
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Fri Jan 14 15:59:37 2022 +0100

    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.
---
 guix/build/compile.scm | 32 ++++++++++++++++++++++++++++----
 1 file 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."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]