all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Liliana Marie Prikler <liliana.prikler@gmail.com>
To: 57086@debbugs.gnu.org
Subject: [bug#57086] [PATCH 4/6] gnu: emacs: Build with native compilation.
Date: Sat, 6 Aug 2022 00:37:43 +0200	[thread overview]
Message-ID: <ec0cdcedf6ea647e5431430ec05b737aca13b50c.camel@gmail.com> (raw)
In-Reply-To: <4c232648145659a2c3edca6d32725d8120cc14d3.camel@gmail.com>

* gnu/packages/emacs.scm (%emacs-modules): New variable.
(emacs)[arguments]<#:modules>: Use it here.
<#:configure-flags> Add “--with-native-compilation”.
<#:make-flags>: Add “NATIVE_FULL_AOT=1”.
<#:phases>: Add ‘set-libgccjit-path’ and ‘patch-compilation-driver’.
[inputs]: Add explicit ld-wrapper, binutils, glibc, and libgccjit.
(emacs-minimal, emacs-xwidgets, emacs-no-x)
(emacs-no-x-toolkit): Adjust accordingly.
---
 gnu/packages/emacs.scm | 64 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 62 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index ffd1eda08e..68afdb0446 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -45,6 +45,7 @@ (define-module (gnu packages emacs)
   #:use-module (guix gexp)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages)
@@ -55,6 +56,7 @@ (define-module (gnu packages emacs)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages fribidi)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gd)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
@@ -81,6 +83,13 @@ (define-module (gnu packages emacs)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
+(define (%emacs-modules build-system)
+  (let ((which (build-system-name build-system)))
+    `((guix build ,(symbol-append which '-build-system))
+      (guix build utils)
+      (srfi srfi-1)
+      (ice-9 ftw))))
+
 (define-public emacs
   (package
     (name "emacs")
@@ -129,11 +138,33 @@ (define-public emacs
     (arguments
      (list
       #:tests? #f                      ; no check target
+      #:modules (%emacs-modules build-system)
       #:configure-flags #~(list "--with-modules"
                                 "--with-cairo"
+                                "--with-native-compilation"
                                 "--disable-build-details")
+      #:make-flags #~(list "NATIVE_FULL_AOT=1")
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'set-paths 'set-libgccjit-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (define (first-subdirectory/absolute directory)
+                (let ((files (scandir
+                              directory
+                              (lambda (file)
+                                (and (not (member file '("." "..")))
+                                     (file-is-directory? (string-append
+                                                          directory "/"
+                                                          file)))))))
+                  (and (not (null? files))
+                       (string-append directory "/" (car files)))))
+              (let* ((libgccjit-libdir
+                      (first-subdirectory/absolute ;; version
+                       (first-subdirectory/absolute ;; host type
+                        (search-input-directory inputs "lib/gcc")))))
+                (setenv "LIBRARY_PATH"
+                        (string-append (getenv "LIBRARY_PATH")
+                                       ":" libgccjit-libdir)))))
           (add-after 'unpack 'enable-elogind
             (lambda _
               (substitute* "configure.ac"
@@ -164,6 +195,20 @@ (define-public emacs
                 (("\\(tramp-compat-process-running-p \"(.*)\"\\)" all process)
                  (format #f "(or ~a (tramp-compat-process-running-p ~s))"
                          all (string-append "." process "-real"))))))
+          (add-after 'unpack 'patch-compilation-driver
+            (lambda _
+              (substitute* "lisp/emacs-lisp/comp.el"
+                (("\\(defcustom native-comp-driver-options nil")
+                 (format
+                  #f "(defcustom native-comp-driver-options '(~@{~s~^ ~})"
+                  (string-append
+                   "-B" #$(this-package-input "binutils") "/bin/")
+                  (string-append
+                   "-B" #$(this-package-input "glibc") "/lib/")
+                  (string-append
+                   "-B" #$(this-package-input "libgccjit") "/lib/")
+                  (string-append
+                   "-B" #$(this-package-input "libgccjit") "/lib/gcc/"))))))
           (add-before 'configure 'fix-/bin/pwd
             (lambda _
               ;; Use `pwd', not `/bin/pwd'.
@@ -256,6 +301,14 @@ (define* (emacs-byte-compile-directory dir)
      (list gnutls
            ncurses
 
+           ;; To "unshadow" ld-wrapper in native builds
+           (make-ld-wrapper "ld-wrapper" #:binutils binutils)
+
+           ;; For native compilation
+           binutils
+           glibc
+           libgccjit
+
            ;; Required for "core" functionality, such as dired and compression.
            coreutils
            gzip
@@ -377,12 +430,16 @@ (define-public emacs-minimal
     (arguments
      (substitute-keyword-arguments (package-arguments emacs)
        ((#:configure-flags flags #~'())
-        #~(list "--with-gnutls=no" "--disable-build-details"))
+        #~(list "--with-gnutls=no" "--with-native-compilation"
+                "--disable-build-details"))
+       ((#:modules _) (%emacs-modules build-system))
        ((#:phases phases)
         #~(modify-phases #$phases
             (delete 'restore-emacs-pdmp)
             (delete 'strip-double-wrap)))))
-    (inputs (list ncurses coreutils gzip))
+    (inputs (list ncurses coreutils gzip
+                  (make-ld-wrapper "ld-wrapper" #:binutils binutils)
+                  binutils glibc libgccjit zlib))
     (native-inputs (list autoconf pkg-config))))
 
 (define-public emacs-xwidgets
@@ -395,6 +452,7 @@ (define-public emacs-xwidgets
      (substitute-keyword-arguments (package-arguments emacs)
        ((#:configure-flags flags #~'())
         #~(cons "--with-xwidgets" #$flags))
+       ((#:modules _) (%emacs-modules build-system))
        ((#:phases phases)
         #~(modify-phases #$phases
             (delete 'restore-emacs-pdmp)
@@ -419,6 +477,7 @@ (define-public emacs-no-x
      (substitute-keyword-arguments (package-arguments emacs)
        ((#:configure-flags flags #~'())
         #~(delete "--with-cairo" #$flags))
+       ((#:modules _) (%emacs-modules build-system))
        ((#:phases phases)
         #~(modify-phases #$phases
             (delete 'restore-emacs-pdmp)
@@ -437,6 +496,7 @@ (define-public emacs-no-x-toolkit
      (substitute-keyword-arguments (package-arguments emacs)
        ((#:configure-flags flags #~'())
         #~(cons "--with-x-toolkit=no" #$flags))
+       ((#:modules _) (%emacs-modules build-system))
        ((#:phases phases)
         #~(modify-phases #$phases
            (delete 'restore-emacs-pdmp)
-- 
2.37.0





  parent reply	other threads:[~2022-08-09 18:52 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-26 13:07 bug#55657: libgccjit is unusable Liliana Marie Prikler
2022-06-04 14:07 ` Remco van 't Veer
2022-06-04 14:22 ` Tobias Geerinckx-Rice via Bug reports for GNU Guix
2022-06-04 14:25   ` Tobias Geerinckx-Rice via Bug reports for GNU Guix
2022-06-04 15:14     ` Liliana Marie Prikler
2022-06-28  0:53 ` John Kehayias via Bug reports for GNU Guix
2022-06-28  4:17   ` Liliana Marie Prikler
2022-06-28  5:16     ` John Kehayias via Bug reports for GNU Guix
2022-08-03 21:13       ` John Kehayias via Bug reports for GNU Guix
2022-08-04  4:26         ` Liliana Marie Prikler
2022-08-04  4:48           ` Andrew Whatson
2022-08-04 16:52             ` Liliana Marie Prikler
2022-08-05  0:59               ` Andrew Whatson
2022-08-05 18:44                 ` Liliana Marie Prikler
2022-08-05 20:01                   ` John Kehayias via Bug reports for GNU Guix
2022-08-05 21:31                     ` Liliana Marie Prikler
2022-08-06  5:37                       ` John Kehayias via Bug reports for GNU Guix
2022-08-06  5:53                         ` Liliana Marie Prikler
2022-08-07  3:19                           ` John Kehayias via Bug reports for GNU Guix
2022-08-07 13:59                             ` Liliana Marie Prikler
2022-08-07 15:09                               ` John Kehayias via Bug reports for GNU Guix
2022-08-07 15:41                                 ` Liliana Marie Prikler
2022-08-09 20:44                                   ` John Kehayias via Bug reports for GNU Guix
2022-08-09 23:53                                     ` Andrew Whatson
2022-08-09 18:37 ` bug#55657: [PATCH 0/6] Add native compilation to Emacs Liliana Marie Prikler
2022-08-05  3:29   ` [bug#57086] [PATCH 1/6] gnu: Parameterize libgccjit Liliana Marie Prikler
2022-08-05  3:29   ` [bug#57086] [PATCH v3 1/7] " Liliana Marie Prikler
2022-08-05 18:27   ` [bug#57086] [PATCH v3 2/7] gnu: libgccjit: Build with bootstrapped gcc Liliana Marie Prikler
2022-08-05 18:27   ` [bug#57086] [PATCH 2/6] " Liliana Marie Prikler
2022-08-05 18:30   ` [bug#57086] [PATCH v3 3/7] gnu: libgccjit: Build multiple versions Liliana Marie Prikler
2022-08-05 18:30   ` [bug#57086] [PATCH 3/6] " Liliana Marie Prikler
2022-08-05 22:37   ` [bug#57086] [PATCH v3 4/7] gnu: emacs: Build with native compilation Liliana Marie Prikler
2022-08-05 22:37   ` Liliana Marie Prikler [this message]
2022-08-09 18:26   ` [bug#57086] [PATCH v3 5/7] guix: emacs-utils: Add emacs-compile-directory Liliana Marie Prikler
2022-08-09 18:26   ` [bug#57086] [PATCH 5/6] " Liliana Marie Prikler
2022-08-09 18:26     ` [bug#57086] [PATCH v2 " Liliana Marie Prikler
2022-08-09 18:32   ` [bug#57086] [PATCH v3 6/7] build-system: emacs: Use native compilation Liliana Marie Prikler
2022-08-09 18:32   ` [bug#57086] [PATCH 6/6] " Liliana Marie Prikler
2022-08-09 21:19   ` [bug#57086] [PATCH 0/6] Add native compilation to Emacs ( via Guix-patches via
2022-08-10  4:19     ` Liliana Marie Prikler
2022-08-10  6:11       ` ( via Guix-patches via
2022-08-23 20:07     ` Liliana Marie Prikler
2022-08-24 21:59   ` [bug#57086] [PATCH v3 7/7] gnu: emacs-yasnippet: Fix build Liliana Marie Prikler
2022-08-25  7:08   ` [bug#57086] [PATCH v3 0/7] Add native compilation to Emacs Liliana Marie Prikler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ec0cdcedf6ea647e5431430ec05b737aca13b50c.camel@gmail.com \
    --to=liliana.prikler@gmail.com \
    --cc=57086@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.