From: John Soo <jsoo1@asu.edu>
To: 44775@debbugs.gnu.org
Subject: [bug#44775] [PATCH] WIP: Add gccemacs
Date: Sat, 21 Nov 2020 01:15:40 -0800 [thread overview]
Message-ID: <874kljnk8z.fsf@asu.edu> (raw)
[-- Attachment #1: Type: text/plain, Size: 271 bytes --]
Hi Guix,
I was curious how fast this gccemacs branch might be, so I got it to
compile.
It feels fast but there are bugs and the closure is huge. Also these
patches do not use any of the parameterization machinery.
I just thought I would share my work.
Thanks,
John
[-- Attachment #2: 0001-gnu-Add-emacs-next-no-x.patch --]
[-- Type: text/x-patch, Size: 1780 bytes --]
From 642c087de1592aeea0e65d04589423a05a96d68e Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sat, 21 Nov 2020 00:56:30 -0800
Subject: [PATCH 1/3] gnu: Add emacs-next-no-x.
* gnu/packages/emacs.scm (emacs-next-no-x): New variable.
---
gnu/packages/emacs.scm | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 4f5a67093c..2d9f2e7ec1 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -22,6 +22,7 @@
;;; Copyright © 2019 Amin Bandali <bandali@gnu.org>
;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2020 John Soo <jsoo1@asu.edu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -376,6 +377,27 @@ editor (console only)")
(delete 'restore-emacs-pdmp)
(delete 'strip-double-wrap)))))))
+(define-public emacs-next-no-x
+ (package
+ (inherit emacs-next)
+ (name "emacs-next-no-x")
+ (synopsis (package-synopsis emacs-no-x))
+ (build-system gnu-build-system)
+ (arguments
+ (substitute-keyword-arguments (package-arguments emacs-next)
+ ((#:configure-flags flags)
+ `(append '("--with-x-toolkit=no"
+ "--with-xpm=no"
+ "--with-jpeg=no"
+ "--with-gif=no"
+ "--with-tiff=no")
+ ,flags))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (delete 'restore-emacs-pdmp)
+ (delete 'strip-double-wrap)))))
+ (inputs (package-inputs emacs-no-x))))
+
(define-public emacs-no-x-toolkit
(package/inherit emacs
(name "emacs-no-x-toolkit")
--
2.29.1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-gnu-Add-gccemacs.patch --]
[-- Type: text/x-patch, Size: 5778 bytes --]
From 3d1948d2512a5fc09ed36de752fb36178517cab2 Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sat, 21 Nov 2020 00:57:27 -0800
Subject: [PATCH 2/3] gnu: Add gccemacs.
* gnu/packages/emacs.scm (gccemacs): New variable.
Add supporting definitions for gccemacs-{version,commit,source} for other
gccemacsen.
---
gnu/packages/emacs.scm | 89 +++++++++++++++++++
gnu/packages/patches/gccemacs-exec-path.patch | 18 ++++
2 files changed, 107 insertions(+)
create mode 100644 gnu/packages/patches/gccemacs-exec-path.patch
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 2d9f2e7ec1..6312fde3ad 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -53,6 +53,7 @@
#:use-module (gnu packages compression)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages fribidi)
+ #:use-module (gnu packages gcc)
#:use-module (gnu packages gd)
#:use-module (gnu packages gettext)
#:use-module (gnu packages glib)
@@ -398,6 +399,94 @@ editor (console only)")
(delete 'strip-double-wrap)))))
(inputs (package-inputs emacs-no-x))))
+;; feature/native-comp
+(define-public gccemacs-commit
+ "6781cd670d1487bbf0364d80de68ca9733342769")
+
+(define-public gccemacs-version
+ (git-version "28.0.50" "0" gccemacs-commit))
+
+(define-public gccemacs-source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.sv.gnu.org/emacs.git")
+ (commit gccemacs-commit)))
+ (sha256
+ (base32
+ "13pmrak5jvk5qp4i5iccn0fqa6by8ig8l0n3qqirm67dxrqiz2ya"))
+ (patches (search-patches "gccemacs-exec-path.patch"
+ "emacs-fix-scheme-indent-function.patch"
+ "emacs-ignore-empty-xim-styles.patch"
+ "emacs-source-date-epoch.patch"))
+ (modules '((guix build utils)))
+ (snippet
+ '(with-directory-excursion "lisp"
+ ;; Delete the bundled byte-compiled elisp files and generated
+ ;; autoloads.
+ (for-each delete-file
+ (append (find-files "." "\\.elc$")
+ (find-files "." "loaddefs\\.el$")
+ (find-files "eshell" "^esh-groups\\.el$")))
+
+ ;; Make sure Tramp looks for binaries in the right places on
+ ;; remote Guix System machines, where 'getconf PATH' returns
+ ;; something bogus.
+ (substitute* "net/tramp-sh.el"
+ ;; Patch the line after "(defcustom tramp-remote-path".
+ (("\\(tramp-default-remote-path")
+ (format #f "(tramp-default-remote-path ~s ~s ~s ~s "
+ "~/.guix-profile/bin" "~/.guix-profile/sbin"
+ "/run/current-system/profile/bin"
+ "/run/current-system/profile/sbin")))
+
+ ;; Make sure Man looks for C header files in the right
+ ;; places.
+ (substitute* "man.el"
+ (("\"/usr/local/include\"" line)
+ (string-join
+ (list line
+ "\"~/.guix-profile/include\""
+ "\"/var/guix/profiles/system/profile/include\"")
+ " ")))
+ #t))))
+
+(define add-libgccjit-gcc-lib-to-library-path
+ '(lambda* (#:key inputs #:allow-other-keys)
+ (let* ((libgccjit (assoc-ref inputs "libgccjit"))
+ (gcc-dirs (find-files
+ libgccjit "^gcc$" #:directories? #t))
+ (gcc-dirs-paths (string-join gcc-dirs ":"))
+ (prepend-to-env (lambda (val var)
+ (setenv
+ var (string-append
+ val
+ (or (getenv var) ""))))))
+ (prepend-to-env gcc-dirs-paths "LIBRARY_PATH")
+ (prepend-to-env gcc-dirs-paths "LD_LIBRARY_PATH")
+ (prepend-to-env gcc-dirs-paths "PATH")
+ #t)))
+
+(define-public gccemacs
+ (package
+ (inherit emacs-next)
+ (name "gccemacs")
+ (version gccemacs-version)
+ (source gccemacs-source)
+ (synopsis "The extensible, customizeable, self-documenting text
+editor (from the native compilation branch)")
+ (inputs
+ `(("libgccjit" ,(canonical-package libgccjit))
+ ,@(package-inputs emacs-next)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments emacs-next)
+ ((#:phases p)
+ `(modify-phases ,p
+ (add-after 'bootstrap 'add-libgccjit-gcc-lib-to-library-path
+ ,add-libgccjit-gcc-lib-to-library-path)))
+ ((#:configure-flags flags ''())
+ `(cons "--with-nativecomp" ,flags))))))
+
(define-public emacs-no-x-toolkit
(package/inherit emacs
(name "emacs-no-x-toolkit")
diff --git a/gnu/packages/patches/gccemacs-exec-path.patch b/gnu/packages/patches/gccemacs-exec-path.patch
new file mode 100644
index 0000000000..3c75f9465e
--- /dev/null
+++ b/gnu/packages/patches/gccemacs-exec-path.patch
@@ -0,0 +1,18 @@
+Do not capture the build-time value of $PATH in the 'emacs' executable
+since this can noticeably increase the size of the closure of Emacs
+with things like GCC being referenced.
+
+diff --git a/lisp/loadup.el.old b/lisp/loadup.el
+index 158a4bf..f853a48 100644
+--- a/lisp/loadup.el
++++ b/lisp/loadup.el
+@@ -509,7 +509,8 @@ lost after dumping")))
+ ((equal dump-mode "dump") "emacs")
+ ((equal dump-mode "bootstrap") "emacs")
+ ((equal dump-mode "pbootstrap") "bootstrap-emacs.pdmp")
+- (t (error "unrecognized dump mode %s" dump-mode)))))
++ (t (error "unrecognized dump mode %s" dump-mode))))
++ (exec-path nil))
+ (when (and (featurep 'nativecomp)
+ (equal dump-mode "pdump"))
+ ;; Don't enable this before bootstrap is completed the as the
--
2.29.1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-gnu-Add-gcceamcs-no-x.patch --]
[-- Type: text/x-patch, Size: 1521 bytes --]
From f23ebabab5e57b22b45fea3a26f9a1814331f39a Mon Sep 17 00:00:00 2001
From: John Soo <jsoo1@asu.edu>
Date: Sat, 21 Nov 2020 00:59:14 -0800
Subject: [PATCH 3/3] gnu: Add gcceamcs-no-x.
* gnu/packages/emacs.scm (gccemacs-no-x): New variable.
---
gnu/packages/emacs.scm | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 6312fde3ad..721a13f429 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -487,6 +487,26 @@ editor (from the native compilation branch)")
((#:configure-flags flags ''())
`(cons "--with-nativecomp" ,flags))))))
+(define-public gccemacs-no-x
+ (package/inherit emacs-next-no-x
+ (name "gccemacs-no-x")
+ (version gccemacs-version)
+ (source gccemacs-source)
+ (synopsis "The extensible, customizable, self-documenting text
+editor (console only, from the native compilation branch)")
+ (build-system gnu-build-system)
+ (inputs
+ `(("libgccjit" ,(canonical-package libgccjit))
+ ,@(package-inputs emacs-next-no-x)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments emacs-next-no-x)
+ ((#:phases p)
+ `(modify-phases ,p
+ (add-after 'bootstrap 'add-libgccjit-gcc-lib-to-library-path
+ ,add-libgccjit-gcc-lib-to-library-path)))
+ ((#:configure-flags flags ''())
+ `(cons "--with-nativecomp" ,flags))))))
+
(define-public emacs-no-x-toolkit
(package/inherit emacs
(name "emacs-no-x-toolkit")
--
2.29.1
next reply other threads:[~2020-11-21 9:16 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-21 9:15 John Soo [this message]
2020-11-23 22:22 ` [bug#44775] [PATCH] WIP: Add gccemacs zimoun
2020-11-24 15:06 ` John Soo
2020-12-18 2:50 ` zimoun
2020-11-24 15:28 ` John Soo
2020-11-29 2:14 ` Morgan Smith
2020-12-11 20:40 ` John Soo
2020-12-17 17:26 ` Morgan Smith
2020-12-18 0:25 ` Andrew Whatson
2023-05-29 12:06 ` bug#44775: " Jelle Licht
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
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874kljnk8z.fsf@asu.edu \
--to=jsoo1@asu.edu \
--cc=44775@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 public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).