昨天晚上打算在 macOS 上玩玩 native-comp 特性的 Emacs、然后因为不想装 brew/nix 这些包管理器、于是稍微折腾了一下。
首先就是 libgccjit.dylib
。可以用包管理器装,比如用 pkgsrc 的话需要装 gcc12-libjit
和 gcc12-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
,然后扬掉罢了。