Use pre-built gccemacs
Fortunatly we could use pre-built gccemacs right now.
Those two repos did the greate job for us.
https://github.com/twlz0ne/nix-gccemacs-darwin
https://github.com/twlz0ne/nix-gccemacs-sierra
Here is the tutorial:
Install nix
For MacOS catalina
Install
nix-env -iA cachix -f https://cachix.org/api/v1/install
cachix use gccemacs-darwin
nix-env -iA emacsGccDarwin -f https://github.com/twlz0ne/nix-gccemacs-darwin/archive/master.zip
Update
nix-env -iA emacsGccDarwin -f https://github.com/twlz0ne/nix-gccemacs-darwin/archive/master.zip
For MacOS sierra
Install
nix-env -iA cachix -f https://cachix.org/api/v1/install
cachix use gccemacs-sierra
nix-env -iA emacsGccSierra -f https://github.com/twlz0ne/nix-gccemacs-sierra/archive/master.zip
Update
nix-env -iA emacsGccSierra -f https://github.com/twlz0ne/nix-gccemacs-sierra/archive/master.zip
It's done
Launch emacs from terminal, and you could find related app bundle's path by right click emacs icon in Docker.
Build gccemacs on MacOS catalina
It's a hard time to make gccemacs work on MacOS catalina. I've met countless problems by following every tutorials I can get from google. Fortunately I finally get it work!
Hope this tutorial could help you.
GCC with libgccjit enabled
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
Edit gcc.rb like this
@@ -53,7 +53,7 @@ class Gcc < Formula
# - Ada, which requires a pre-existing GCC Ada compiler to bootstrap
# - Go, currently not supported on macOS
# - BRIG
- languages = %w[c c++ objc obj-c++ fortran]
+ languages = %w[c c++ objc obj-c++ fortran jit]
osmajor = `uname -r`.split(".").first
pkgversion = "Homebrew GCC #{pkg_version} #{build.used_options*" "}".strip
@@ -73,6 +73,7 @@ class Gcc < Formula
--with-system-zlib
--with-pkgversion=#{pkgversion}
--with-bugurl=https://github.com/Homebrew/homebrew-core/issues
+ --enable-host-shared
]
# Xcode 10 dropped 32-bit support
Build gcc by homebrew
brew install gcc --build-from-source --force
Get gccemacs source code
Clone https://github.com/emacs-mirror/emacs and checkout feature/native-comp branch.
Build using this script
Create a build.sh outside emacs source code folder.
# native-comp optimization
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:${PATH}"
export CFLAGS="-I/usr/local/Cellar/gcc/10.1.0/include"
export LDFLAGS="-L/usr/local/Cellar/gcc/10.1.0/lib/gcc/10 -I/usr/local/Cellar/gcc/10.1.0/include"
export LIBRARY_PATH="/usr/local/Cellar/gcc/10.1.0/lib/gcc/10:${LIBRARY_PATH:-}"
cd emacs || exit
git clean -xfd
./autogen.sh
./configure \
--disable-dependency-tracking \
--disable-silent-rules \
--enable-locallisppath=/usr/local/share/emacs/28.0.50/site-lisp \
--prefix=/usr/local/opt/gccemacs \
--without-dbus \
--without-imagemagick \
--with-mailutils \
--with-ns \
--disable-ns-self-contained \
--with-cairo \
--with-modules \
--with-xml2 \
--with-gnutls \
--with-json \
--with-rsvg \
--with-nativecomp
# Ensure /usr/local/opt/gccemacs exists
rm -rf /usr/local/opt/gccemacs
mkdir /usr/local/opt/gccemacs
# Ensure the directory to which we will dump Emacs exists and has the correct
# permissions set.
libexec=/usr/local/libexec/emacs/28.0.50
if [ ! -d $libexec ]; then
sudo mkdir -p $libexec
sudo chown $USER $libexec
fi
make -j4
make install
rm -rf "/Applications/Emacs.app"
mv nextstep/Emacs.app "/Applications/"
cd /usr/local/bin || exit
rm emacs
rm emacsclient
ln -s /usr/local/opt/gccemacs/bin/emacs .
ln -s /usr/local/opt/gccemacs/bin/emacsclient .
cd /Applications/Emacs.app/Contents || exit
ln -s /usr/local/opt/gccemacs/share/emacs/28.0.50/lisp .
To use Spacemacs
No special actions are needed.
To use Doom
Latest doom already support to compile all modules with native-comp.
Update to latest version.
To do so, upgrade doom to latest version.
doom upgrade
Compile all modules
After that, do doom sync
to compile all modules.
Generate local env file
Run doom env
to generate local env file.
It's done.
Open emacs and feel the performance boost. Enjoy!
So, compilation worked, but now running emacs fails with this:
emacs: dlopen(/usr/local/bin/../lisp/emacs-lisp/eln-x86_64-apple-darwin19.6.0-89a730c11dec204e/lisp-mode.eln, 1): image not found
Really weird.