2024年10月9日水曜日

Visual Studio で Vim をビルドする

この記事は Vim 駅伝 の 2024/10/09 の記事です。 前回の記事は monaqa さんによる、 2024/10/07 の「Vim で挿入モードから抜けることなく直前の単語を UPPER CASE にする」という記事でした。

次回は 2024/10/11 に投稿される予定です。

この記事はなに?

MinGW でビルドしたことはあるけど、 Visual Studio でビルドしたことがなかったので試してみる。

今回は、 GVim の 64 bit 版をビルドし、 %USERPROFILE%\app\vim にインストールします。

また、もろもろ環境を汚すのが嫌なので、Windows サンドボックス上で試していく。

前提

Windows サンドボックス環境の準備

winget のインストール

今回は、 Visual Studio Community や Git を winget でインストールするので、 Windows サンドボックスで winget を利用可能にする手順を実施する。

$progressPreference = 'silentlyContinue'
Write-Information "Downloading WinGet and its dependencies..."
Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -OutFile Microsoft.VCLibs.x64.14.00.Desktop.appx
Invoke-WebRequest -Uri https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx -OutFile Microsoft.UI.Xaml.2.8.x64.appx
Add-AppxPackage Microsoft.VCLibs.x64.14.00.Desktop.appx
Add-AppxPackage Microsoft.UI.Xaml.2.8.x64.appx
Add-AppxPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

†: 普通の Windows であれば winget 導入済みのはずなので不要なはず…

Vim ビルドの準備

Vim をビルドするために必要なパッケージをインストールしていく。

Visual Studio Community のインストール

winget install --silent --accept-source-agreements Microsoft.VisualStudio.2022.Community

これで、 Visual Studio Community と Visual Studio Installer がそれぞれ下記に配置され、

  • Visual Studio Community: C:\Program Files\Microsoft Visual Studio\2022\Community
  • Visual Studio Installer: C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe

次に、Vim のビルドに必要な NativeDesktop コンポーネントをインストール。

& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe" modify `
    --installPath "C:\Program Files\Microsoft Visual Studio\2022\Community" `
    --add Microsoft.VisualStudio.Workload.NativeDesktop `
    --add Microsoft.Component.MSBuild `
    --add Microsoft.VisualStudio.Component.VC.ATL `
    --add Microsoft.VisualStudio.Component.VC.CMake.Project `
    --add Microsoft.VisualStudio.Component.Windows11SDK.22621 `
    --quiet

†: インストール完了がとても分かりにくいので、 --quiet は付けない方が良いかも…?

Git のインストール

winget install --silent --accept-source-agreements Git.Git

Vim のビルド

以降のコマンドは、スタートメニューから x64 Native Tools Command Prompt for VS 2022 を起動し、その中で実行する。

Vim のクローン

git clone --depth 1 https://github.com/vim/vim

Vim のビルド

cd vim\src
.\msvc-latest.bat x86_amd64
nmake -f .\Make_mvc.mak GUI=yes

動作確認

src 直下に gvim.exe が生成されているので、それを実行する。

.\gvim.exe

gvim が起動すれば OK.

Windows 版 Vim の配布可能構成を作る

ここまは、「gvim.exe の実行ファイルを作成」しただけ。

そのほか gvim.exe の起動に必要なランタイムやデフォルトプラグインなどを指定の構成で配置する必要がある。

See: 17. Installing after building from sources

vim91 ディレクトリの作成

配布可能パッケージのルートとなるディレクトリを作成する。

cd ${VIM_REPOSITORY_ROOT}
mkdir vim91

runtime ディレクトリ内のファイルを vim91 内へコピー

copy runtime\* vim91
xcopy /s runtime\* vim91

ビルドした実行バイナリを vim91 内へコピー

copy src\*exe vim91
copy src\tee\tee.exe vim91
copy src\xxd\xxd.exe vim91
mkdir vim91\GvimExt64
copy src\GvimExt\gvimext.dll vim91\GvimExt64

gettext と iconv を取得し、配置

powershell.exe -Command Invoke-WebRequest -Uri https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-64.zip -OutFile .\gettext0.21-iconv1.16-shared-64.zip
powershell.exe -Command Expand-Archive -Path .\gettext0.21-iconv1.16-shared-64.zip -DestinationPath .\gettext-iconv

copy gettext-iconv\bin\libintl-8.dll vim91
copy gettext-iconv\bin\libintl-8.dll vim91\GvimExt64
copy gettext-iconv\bin\libiconv-2.dll vim91
copy gettext-iconv\bin\libiconv-2.dll vim91\GvimExt64

Vim のインストール

インストールディレクトリの作成

今回は、 %USERPROFILE%\app\vim にインストールしたいので、そのディレクトリを作成する。

mkdir %USERPROFILE%\app\vim

Vim の配置

mkdir %USERPROFILE%\app\vim\vim91
xcopy /e vim91 %USERPROFILE%\app\vim\vim91

Vim のインストール

cd %USERPROFILE%\app\vim\vim91
install.exe

install.exe を実行すると、「インストール時に何をするか・しないか」のリストが表示されるので、数字を入力し、「する・しない」を切り替える。

切り替えた後 d を入力すると選択したものが実行される。

デフォルトで d を押して、デスクトップに表示された gvim9.1 のショートカットから起動できれば OK.

参考資料

0 件のコメント:

コメントを投稿