macOSにネイティブコンパイル対応のEmacs29を導入する(Orgファイル/Makefileで管理)
はじめに
普段はVSCode使いですがやっていきます。
以下はこれまでの調査と試行を自分なりにまとめたものになりますが、より良い方法がありましたらご教授いただけると嬉しいです。
環境はVentura13.4.1です。
OSをクリーンインストールしたばかりのほぼまっさらな状態にHomebrewを入れてスタートしています。
準備
ネイティブコンパイル対応のEmacsをインストールするにはソースからビルドするしかなさそうです。
当方の環境では事前準備として以下が必要でインストールしました。
$ brew install autoconf texinfo gnutls pkgconfig gcc libgccjit
ソースをダウンロードする
公式からgit clone
します。
$ git clone --depth 1 --branch emacs-29 https://git.savannah.gnu.org/git/emacs.git
ビルド
落としたリポジトリの第一階層にINSTALL.REPOという名前のファイルがあります。
ここにビルドする手順が記されているのでこれを参考にビルドします。
$ cd emacs
$ ./autogen.sh
$ ./configure --with-native-compilation=aot --with-ns --without-x
$ make -j9
$ make install
make
のオプションはマシンのコア数に応じて適宜変更してください。
macOSの場合、左上のリンゴマーク > このMacについて > 詳細情報 > システムレポート > ハードウェア > コアの総数から調べられます。
インストール
ビルドによってemacs/nextstepディレクトリにEmacs.appが生成されます。
これをアプリケーションフォルダにコピーします。
つづいて、~/.zshrcに以下を追加します。
ファイルがない場合は新規作成します。
alias emacs='/Applications/Emacs.app/Contents/MacOS/Emacs'
以下を実行します。
$ source ~/.zshrc
emacs
コマンドで起動できることを確認します。
$ emacs
ネイティブコンパイル対応になっているかはscratchバッファで以下を実行することにより確認できます。
実行方法はコードの終端でC-j
です。
M-x describe-variable
もしくはM-:
から実行することでも確認できます。
(describe-variable 'system-configuration-features)
NATIVE_COMPと表示されればインストール成功です。
Orgファイルで設定を管理する
~/.emacs.dにMakefileとinit.orgを用意します。
EMACS = /Applications/Emacs.app/Contents/MacOS/Emacs
EMACS_BATCH = $(EMACS) -Q --batch
.PHONY: byte-compile
byte-compile:
$(EMACS_BATCH) --eval "(progn (require 'ob-tangle) (org-babel-tangle-file \"./init.org\" \"./init.el\" \"emacs-lisp\"))"
$(EMACS_BATCH) -f batch-byte-compile init.el
init.orgの内容については適宜となりますが、ここでは組み込みのテーマを設定してみます。
#+begin_src emacs-lisp
(use-package emacs
:config
(load-theme 'modus-vivendi)
:bind ("<f5>" . modus-themes-toggle))
#+end_src
以下を実行します。
$ cd ~/.emacs.d
$ make
~/.emacs.dにinit.elとinit.elcが生成されれば成功です。
ネイティブコンパイルを試す
scratchバッファで以下を実行してみます。
(native-compile-async "~/.emacs.d/init.el")
~/.emacs.d/eln-cache/29_x_xx-xxxxxxxxの中にinitで始まるelnファイルが生成されていれば成功です。
Discussion