gnu: emacs: Build with native compilation.
* 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. [search-paths]: Add EMACSNATIVELOADPATH. (emacs-minimal, emacs-xwidgets, emacs-no-x) (emacs-no-x-toolkit): Adjust accordingly.master
parent
80a9b757e8
commit
dbcba75c0e
|
@ -45,6 +45,7 @@
|
||||||
#:use-module (guix gexp)
|
#:use-module (guix gexp)
|
||||||
#:use-module (guix download)
|
#:use-module (guix download)
|
||||||
#:use-module (guix git-download)
|
#:use-module (guix git-download)
|
||||||
|
#:use-module (guix build-system)
|
||||||
#:use-module (guix build-system gnu)
|
#:use-module (guix build-system gnu)
|
||||||
#:use-module (guix build-system glib-or-gtk)
|
#:use-module (guix build-system glib-or-gtk)
|
||||||
#:use-module (gnu packages)
|
#:use-module (gnu packages)
|
||||||
|
@ -55,6 +56,7 @@
|
||||||
#:use-module (gnu packages fontutils)
|
#:use-module (gnu packages fontutils)
|
||||||
#:use-module (gnu packages freedesktop)
|
#:use-module (gnu packages freedesktop)
|
||||||
#:use-module (gnu packages fribidi)
|
#:use-module (gnu packages fribidi)
|
||||||
|
#:use-module (gnu packages gcc)
|
||||||
#:use-module (gnu packages gd)
|
#:use-module (gnu packages gd)
|
||||||
#:use-module (gnu packages gettext)
|
#:use-module (gnu packages gettext)
|
||||||
#:use-module (gnu packages ghostscript)
|
#:use-module (gnu packages ghostscript)
|
||||||
|
@ -81,6 +83,13 @@
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (srfi srfi-1))
|
#: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
|
(define-public emacs
|
||||||
(package
|
(package
|
||||||
(name "emacs")
|
(name "emacs")
|
||||||
|
@ -129,11 +138,33 @@
|
||||||
(arguments
|
(arguments
|
||||||
(list
|
(list
|
||||||
#:tests? #f ; no check target
|
#:tests? #f ; no check target
|
||||||
|
#:modules (%emacs-modules build-system)
|
||||||
#:configure-flags #~(list "--with-modules"
|
#:configure-flags #~(list "--with-modules"
|
||||||
"--with-cairo"
|
"--with-cairo"
|
||||||
|
"--with-native-compilation"
|
||||||
"--disable-build-details")
|
"--disable-build-details")
|
||||||
|
#:make-flags #~(list "NATIVE_FULL_AOT=1")
|
||||||
#:phases
|
#:phases
|
||||||
#~(modify-phases %standard-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
|
(add-after 'unpack 'enable-elogind
|
||||||
(lambda _
|
(lambda _
|
||||||
(substitute* "configure.ac"
|
(substitute* "configure.ac"
|
||||||
|
@ -164,6 +195,20 @@
|
||||||
(("\\(tramp-compat-process-running-p \"(.*)\"\\)" all process)
|
(("\\(tramp-compat-process-running-p \"(.*)\"\\)" all process)
|
||||||
(format #f "(or ~a (tramp-compat-process-running-p ~s))"
|
(format #f "(or ~a (tramp-compat-process-running-p ~s))"
|
||||||
all (string-append "." process "-real"))))))
|
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
|
(add-before 'configure 'fix-/bin/pwd
|
||||||
(lambda _
|
(lambda _
|
||||||
;; Use `pwd', not `/bin/pwd'.
|
;; Use `pwd', not `/bin/pwd'.
|
||||||
|
@ -256,6 +301,14 @@
|
||||||
(list gnutls
|
(list gnutls
|
||||||
ncurses
|
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.
|
;; Required for "core" functionality, such as dired and compression.
|
||||||
coreutils
|
coreutils
|
||||||
gzip
|
gzip
|
||||||
|
@ -307,6 +360,9 @@
|
||||||
(list (search-path-specification
|
(list (search-path-specification
|
||||||
(variable "EMACSLOADPATH")
|
(variable "EMACSLOADPATH")
|
||||||
(files '("share/emacs/site-lisp")))
|
(files '("share/emacs/site-lisp")))
|
||||||
|
(search-path-specification
|
||||||
|
(variable "EMACSNATIVELOADPATH")
|
||||||
|
(files '("lib/emacs/native-site-lisp")))
|
||||||
(search-path-specification
|
(search-path-specification
|
||||||
(variable "INFOPATH")
|
(variable "INFOPATH")
|
||||||
(files '("share/info")))))
|
(files '("share/info")))))
|
||||||
|
@ -378,11 +434,14 @@ GTK and also enables xwidgets.")))
|
||||||
(substitute-keyword-arguments (package-arguments emacs)
|
(substitute-keyword-arguments (package-arguments emacs)
|
||||||
((#:configure-flags flags #~'())
|
((#:configure-flags flags #~'())
|
||||||
#~(list "--with-gnutls=no" "--disable-build-details"))
|
#~(list "--with-gnutls=no" "--disable-build-details"))
|
||||||
|
((#:modules _) (%emacs-modules build-system))
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
#~(modify-phases #$phases
|
#~(modify-phases #$phases
|
||||||
(delete 'restore-emacs-pdmp)
|
(delete 'restore-emacs-pdmp)
|
||||||
(delete 'strip-double-wrap)))))
|
(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))))
|
(native-inputs (list autoconf pkg-config))))
|
||||||
|
|
||||||
(define-public emacs-xwidgets
|
(define-public emacs-xwidgets
|
||||||
|
@ -395,6 +454,7 @@ editor (with xwidgets support)")
|
||||||
(substitute-keyword-arguments (package-arguments emacs)
|
(substitute-keyword-arguments (package-arguments emacs)
|
||||||
((#:configure-flags flags #~'())
|
((#:configure-flags flags #~'())
|
||||||
#~(cons "--with-xwidgets" #$flags))
|
#~(cons "--with-xwidgets" #$flags))
|
||||||
|
((#:modules _) (%emacs-modules build-system))
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
#~(modify-phases #$phases
|
#~(modify-phases #$phases
|
||||||
(delete 'restore-emacs-pdmp)
|
(delete 'restore-emacs-pdmp)
|
||||||
|
@ -419,6 +479,7 @@ editor (console only)")
|
||||||
(substitute-keyword-arguments (package-arguments emacs)
|
(substitute-keyword-arguments (package-arguments emacs)
|
||||||
((#:configure-flags flags #~'())
|
((#:configure-flags flags #~'())
|
||||||
#~(delete "--with-cairo" #$flags))
|
#~(delete "--with-cairo" #$flags))
|
||||||
|
((#:modules _) (%emacs-modules build-system))
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
#~(modify-phases #$phases
|
#~(modify-phases #$phases
|
||||||
(delete 'restore-emacs-pdmp)
|
(delete 'restore-emacs-pdmp)
|
||||||
|
@ -437,6 +498,7 @@ editor (without an X toolkit)" )
|
||||||
(substitute-keyword-arguments (package-arguments emacs)
|
(substitute-keyword-arguments (package-arguments emacs)
|
||||||
((#:configure-flags flags #~'())
|
((#:configure-flags flags #~'())
|
||||||
#~(cons "--with-x-toolkit=no" #$flags))
|
#~(cons "--with-x-toolkit=no" #$flags))
|
||||||
|
((#:modules _) (%emacs-modules build-system))
|
||||||
((#:phases phases)
|
((#:phases phases)
|
||||||
#~(modify-phases #$phases
|
#~(modify-phases #$phases
|
||||||
(delete 'restore-emacs-pdmp)
|
(delete 'restore-emacs-pdmp)
|
||||||
|
|
Reference in New Issue