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:
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
nix-env -iA emacsGccDarwin -f https://github.com/twlz0ne/nix-gccemacs-darwin/archive/master.zip
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
nix-env -iA emacsGccSierra -f https://github.com/twlz0ne/nix-gccemacs-sierra/archive/master.zip
Launch emacs from terminal, and you could find related app bundle's path by right click emacs icon in Docker.
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.
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
Clone https://github.com/emacs-mirror/emacs and checkout feature/native-comp branch.
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 .
No special actions are needed.
Latest doom already support to compile all modules with native-comp.
To do so, upgrade doom to latest version.
doom upgrade
After that, do doom sync
to compile all modules.
Run doom env
to generate local env file.
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.