Native compilationを有効化したEmacs28のインストール

2022年4月27日 2023年12月11日

こんにちは。 Emacs28.1がリリースされましたね。 色々な新機能が導入されていますが、やはりEmacsが高速になるというNative Compilation機能が気になります。

そこで、この記事ではUbuntu、Arch Linux、macOSで、Native compilationを有効化したEmacs28のインストール方法を個人的にまとめます。

基本的な流れ

Native compilationを有効化したEmacs28のインストールは基本的に以下の流れで実施します。

  1. libgccjitライブラリとEmacs28のビルドに必要なライブラリ群のインストール

Native compilationを有効化するためにはlibgccjitライブラリが必須です。

  1. Emacsリポジトリのclone
  2. Emacs28のビルド

では、Ubuntu、Arch Linux、macOSでEmacs28をインストールしていきます。

Ubuntu編

必要なライブラリ群のインストール

以下のコマンドでEmacs28のビルドに必要なライブラリをインストールします。 libgccjitにはいくつかバージョンがあるので、適宜変更してください。私はlibgccjit-12-devを使いました。

terminal
sudo apt install autoconf make texinfo gnutls-bin libgccjit-12-dev

Emacsリポジトリのclone

以下のコマンドでEmacsリポジトリをクローンします。 今回はEmacs28をビルドするだけなので、--depth 1 --branch emacs-28オプションを付与して必要なファイル群だけをcloneします。

terminal
git clone --depth 1 --branch emacs-28 git://git.savannah.gnu.org/emacs.git

Emacs28のビルド

まず、リポジトリに移動して、autogen.shを実行してconfigureファイルを作成します。

terminal
cd ./emacs
./autogen.sh

次に自分に必要なオプションを付与して、configureを実行します。 このオプションに--with-native-compilationを付与することでNative compilationが有効になります。 他のオプションは個人の好み・環境に合わせて、付与してください。私はGUI環境が不要なので、--with-x=noとしています。

なお、この際にCFLAGSでlibgccjitのパスをconfigureへ渡しています。libgccjitのインストールバージョンによってpathが少し変わりますので、気をつけてください。

terminal
CFLAGS='-I/usr/lib/gcc/x86_64-linux-gnu/12/include -L/usr/lib/gcc/x86_64-linux-gnu/12' ./configure --prefix=/usr/local --with-native-compilation --with-x=no --with-gnutls=ifavailable --without-pop

configureの実行が無事に完了しましたら、最後にmakemake installを実行します。

terminal
make
sudo make install

これでUbuntuでのインストールは完了です。

Arch Linux編

Arch Linuxではpacman -S emacs-nativecompでNative compilationを有効化したEmacsがインストール可能です。 ただし、GUI版がインストールされるため、gtk等のGUIライブラリもインストールされてしまいます。 私はgtk等のGUIライブラリが不要かつEmacsをterminalでしか利用しないので、GUI機能を除いたEmacsを以下の手順でビルドします。

必要なライブラリ群のインストール

以下のコマンドでEmacs28のビルドに必要なライブラリをインストールします。

terminal
sudo pacman -S libgccjit

上記以外にもビルドに必要なライブラリがあるのですが、何をインストールしたか忘れてしまったので、今回は割愛します。 ライブラリが足りない場合はビルド時にエラーが表示されますので、その際に適宜インストールしてください。

Emacsリポジトリのclone

以下のコマンドでEmacsリポジトリをクローンします。 今回はEmacs28をビルドするだけなので、--depth 1 --branch emacs-28オプションを付与して必要なファイル群だけをcloneします。

terminal
git clone --depth 1 --branch emacs-28 git://git.savannah.gnu.org/emacs.git

Emacs28のビルド

まず、リポジトリに移動して、autogen.shを実行してconfigureファイルを作成します。

terminal
cd ./emacs
./autogen.sh

次に必要なオプションを付与して、configureを実行します。 このオプションに--with-native-compilationを付与することでNative compilationが有効になります。 他のオプションは個人の好み・環境に合わせて、付与してください。私はGUI環境が不要なので、--with-x=noとしています。

terminal
./configure --prefix=/usr/local --with-native-compilation --with-x=no --with-gnutls=ifavailable --without-pop

configureが無事に完了しましたら、最後makemake installを実行します。

terminal
make
sudo make install

これでArch Linuxでのインストールは完了です。

macOS編

私はmacOSではHomebrewを利用しているので、HomebrewでNative compilationを有効化したEmacs28をインストールします。

Emacs Plusのformulaでインストールできますので、その手順に従ってインストールします。

terminal
brew tap d12frosted/emacs-plus
brew install emacs-plus@28 --with-native-comp

確認

ビルドが完了したEmacs28でNative compilationが有効になっているか確認します。

Emacsを起動してM-x describe-variable RET system-configuration-features RETを実行します。 以下の画像のようにIts value isNATIVE_COMPが含まれていれば有効になっています。

HELP

終わりに

Emacs27からEmacs28に移行した感想としては、気になっていた部分が高速化されていて良かったです。 Native compilationを有効化したバージョンとは比較していないので、Emacs28にしただけで高速化した部分もあると思いますが、特にlsp-modeの動作全体が高速になっていたので大満足です。

まだ、Native compilationを有効化したEmacs28を利用したことがない方はぜひ一度試してみてください!

Posted by mako
関連記事
コメント
...