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
next prev 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.