Install Emacs with native-comp on Darwin (Apple Silicon)

昨天晚上打算在 macOS 上玩玩 native-comp 特性的 Emacs、然后因为不想装 brew/nix 这些包管理器、于是稍微折腾了一下。

首先就是 libgccjit.dylib。可以用包管理器装,比如用 pkgsrc 的话需要装 gcc12-libjitgcc12-libs;也可以用 GCC-14.2-darwin-r2

git clone --depth 1 https://github.com/iains/gcc-14-branch

cd gcc-14-branch

./contrib/download_prerequisites # installs gettext, gmp, mpfr, mpcomplex, and isl for you

mkdir build && cd build # out-of-tree build

../configure --prefix=/opt/gnu/gcc-14.2.0 \
             --enable-languages=c,c++,jit \
             --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk # rather than the dumb XCode SDK

make -j8 && sudo make install

然后就是编译 Emacs 了:

export LIBJIT_INCLUDE=/opt/gnu/gcc-14.2.0/include
export LIBJIT_LIBRARY=/opt/gnu/gcc-14.2.0/lib

export LIBRARY_PATH=$LIBJIT_LIBRARY:$LIBJIT_LIBRARY/gcc/aarch64-apple-darwin24.2.0/14.2.0 # make sure libemutls_w.a covered

./configure CPPFLAGS="-I${LIBJIT_INCLUDE} ${CPPFLAGS:-}" \
            LDFLAGS="-L${LIBJIT_LIBRARY} ${LDFLAGS:-} -Wl,-rpath,${LIBJIT_LIBRARY}" \
            --disable-gc-mark-trace \
            --without-all \
            --with-zlib \
            --with-native-compilation=aot \
            <...>

make -j && make install

rm -r /Applications/Emacs.app
sudo ditto nextstep/Emacs.app /Applications/Emacs.app

收工。


所以我就从此过上开 native-comp 的幸福生活了吗?

没有。跑一下 elisp-benchmarks,然后扬掉罢了。

3 个赞

顺便、想要 self-contain(不想留着 gcc 的)可以用 otool 看一下链接情况、用 install_name_tool 把路径改到 Emacs.app