Skip to content

Instantly share code, notes, and snippets.

@buzztaiki
Last active April 14, 2022 15:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save buzztaiki/efb2a370994a1ebf997df72e56429ee0 to your computer and use it in GitHub Desktop.
Save buzztaiki/efb2a370994a1ebf997df72e56429ee0 to your computer and use it in GitHub Desktop.
EmacsをNATIVE_FULL_AOT=1でビルドする

EmacsをNATIVE_FULL_AOT=1でビルドする

NATIVE_FULL_AOT=1 を付けると lisp 以下の全部のファイルがネイティブコンパイルされる。

$ ./configure --with-native-compilation
$ make bootstrap NATIVE_FULL_AOT=1
$ sudo make install

http://ftpmirror.gnu.org/emacs/ からダウンロードした場合 make ではなく make bootstrap にしないと eln が一部のファイルにしか作られない。理由は tar 玉の中に elc が入ってるから。そのせいで以下のサフィックスルールで batch-byte+native-compile が動かない。

.el.elc:
	$(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) \
	-l comp -f batch-byte+native-compile $<

make bootstrap すると elc が削除されてこのサフィックスルールが動くようになる。

ArchLinux の emacs-nativecomp 28.1-3 にも同様の問題があって、一部の elnしか含まれてない。この問題は https://bugs.archlinux.org/task/74433 で解決するはず。

ただ、ビルド結果に eln が含まれてなくても JIT で eln が作られるからネイティブコンパイルの恩恵はうけられる。自分でビルドする場合なら使わないファイルをコンパイルする時間が無駄だから NATIVE_FULL_AOT=1 じゃなくてもいいし make bootstrap しなくてもいいかもね。とは思う。パッケージされたファイルには入ってて欲しい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment