メインコンテンツへスキップ

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

··1 分·
Arch-Linux Macos Ubuntu Emacs
Makoto Morinaga
著者
Makoto Morinaga
技術メモ、コーディング、環境構築のための個人ノート。
目次

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

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

基本的な流れ
#

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

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

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

  2. Emacsリポジトリのclone

  3. 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 version
#

私は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が含まれていれば有効になっています。

終わりに
#

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

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

関連記事

textlintとFlycheckによるEmacs上でのテキスト校正
··2 分
Flycheck Textlint Emacs
EmacsでのlspをベースとしたPython開発環境
··4 分
Emacs Lsp Python
M1 MacへのNodejs 14.xのインストール
··1 分
Macos Nodejs