emacsのnative compilation機能

emacs28にNative Compilation機能が統合されたことが一時話題になっていて気になっていたので試してみた。世間的には周回遅れといったところ。環境はWindows11 + WSL2(Ubuntu 20.04LTS)。やったことは以下の通り。

WSL2のUbuntuの立上げ

PowerShellでWSLを起動してUbuntuをインストールする。

WSL --install -d Ubuntu

しかしインストールが終わり、Ubuntuを立上げようとすると以下のようなエラーメッセージが出て起動しない。

WslRegisterDistribution failed with error: 0x80370102

UEFIの設定は正しかったのでWindows11の設定を起動してアプリ→オプション機能→Windowsのその他の機能→仮想マシンプラットフォームにチェックした。そして無事WSLが起動。

emacsリポジトリからチェックアウト

git clone https://git.savannah.gnu.org/git/emacs.git
cd emacs
./autogen.sh

ここでautoconfがないと言われる。autoconfをインストール…しようとしたらUnable to locate packageとエラーが出たのでapt自身をupdate。

sudo apt update
sudo apt install autoconf
./autogen.sh
./configure --prefix=/usr/local --with-xwidgets --with-mailutils --with-native-compilation

ここでgccもmakeもないことに気が付く。

emacsのビルドに使用するソフトウェアをインストール

WSLのUbuntuはインストールした直後の状態だとgccをはじめとする開発ツールやX関連のライブラリが入っていないのでそれらをaptでインストール。その後は依存するライブラリをインストール。もちろん事前にすべてがわかっていたわけではなくconfigureを動かしつつエラーの都度対処していった。

sudo apt install build-essential
sudo apt install xwidgets
sudo apt install libgtk-3-dev
sudo apt install libwebkit2gtk-4.0-dev
sudo apt install libxpm-dev
sudo apt install libjpeg-dev
sudo apt install libgif-dev
sudo apt install libungif-dev
sudo apt install libtiff-dev
sudo apt install libgnutls28-dev
sudo apt install libncurses-dev
sudo apt install libgccjit-9-dev
./autogen.sh ./configure --prefix=/usr/local --with-xwidgets --with-mailutils --with-native-compilation sudo make install

コンパイルできたのでぐるぐるぐりっどさんと同じ方法Emacs Wikiバブルソートで性能を見てみた。やっぱり速い。