Windows で deno をビルドする

### やること

https://docs.deno.com/runtime/contributing/building_from_source/

1. Visual Studio build tools のパスを通す
1. 開発者モードをオンにする

# はじめに

[deno](https://github.com/denoland/deno) を Windows でビルドしようとしたときに失敗したので必要な手順を残しておきます。
Windows で開発している人の一助になれば幸いです。

# Visual Studio build tools のパスを通す

```
error: failed to run custom build command for `libz-sys v1.1.20`

Caused by:
  process didn't exit successfully: `%USERPROFILE%\AppData\Local\Temp\cargo-installvNqHIq\release\build\libz-sys-869690de956ef958\build-script-build` (exit code: 101)
  --- stdout
  cargo:rerun-if-env-changed=LIBZ_SYS_STATIC
  cargo:rerun-if-changed=build.rs
  cargo:rerun-if-changed=zng/cmake.rs
  cargo:rerun-if-changed=zng/cc.rs
  CMAKE_TOOLCHAIN_FILE_x86_64-pc-windows-msvc = None
  CMAKE_TOOLCHAIN_FILE_x86_64_pc_windows_msvc = None
  HOST_CMAKE_TOOLCHAIN_FILE = None
  CMAKE_TOOLCHAIN_FILE = None
  CMAKE_GENERATOR_x86_64-pc-windows-msvc = None
  CMAKE_GENERATOR_x86_64_pc_windows_msvc = None
  HOST_CMAKE_GENERATOR = None
  CMAKE_GENERATOR = None
  CMAKE_PREFIX_PATH_x86_64-pc-windows-msvc = None
  CMAKE_PREFIX_PATH_x86_64_pc_windows_msvc = None
  HOST_CMAKE_PREFIX_PATH = None
  CMAKE_PREFIX_PATH = None
  CMAKE_x86_64-pc-windows-msvc = None
  CMAKE_x86_64_pc_windows_msvc = None
  HOST_CMAKE = None
  CMAKE = None
  running: "cmake" "%CARGO_HOME%\\registry\\src\\index.crates.io-6f17d22bba15001f\\libz-sys-1.1.20\\src/zlib-ng" "-G" "Visual Studio 17 2022" "-Thost=x64" "-Ax64" "-DBUILD_SHARED_LIBS=OFF" "-DZLIB_COMPAT=ON" "-DZLIB_ENABLE_TESTS=OFF" "-DWITH_GZFILEOP=ON" "-DCMAKE_INSTALL_PREFIX=%USERPROFILE%\\AppData\\Local\\Temp\\cargo-installvNqHIq\\release\\build\\libz-sys-f64c2b82c1fa3508\\out" "-DCMAKE_C_FLAGS= -nologo -MD -Brepro" "-DCMAKE_C_FLAGS_RELEASE= -nologo -MD -Brepro" "-DCMAKE_CXX_FLAGS= -nologo -MD -Brepro" "-DCMAKE_CXX_FLAGS_RELEASE= -nologo -MD -Brepro" "-DCMAKE_ASM_FLAGS= -nologo -MD -Brepro" "-DCMAKE_ASM_FLAGS_RELEASE= -nologo -MD -Brepro" "-DCMAKE_BUILD_TYPE=Release"

  --- stderr
  thread 'main' panicked at %CARGO_HOME%\registry\src\index.crates.io-6f17d22bba15001f\cmake-0.1.50\src\lib.rs:1098:5:

  failed to execute command: program not found
  is `cmake` not installed?

  build script failed, must exit now
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

`cmake` が見つからずにエラーが発生してしまう場合はパスを通す必要があります。
Rust のインストール時に Visual Studio Build Tools をインストールしているはずですが、 cmd.exe を通常起動してもパスは通っていません。
スタートメニューから **Developer Command Prompt** を探すと各機能が使える状態で起動できるショートカットが見つかるので、そこから cmd.exe を起動しましょう。
`cmake --version` で `cmake` へのパスが通っていることが確認出来たら、そのシェルからビルドを実行します。

# 開発者モードをオンにする

https://github.com/denoland/rusty_v8/issues/1563

Windows では開発者モードを有効にしないとビルドできない場合があるようです。

Windows10 では、
**設定** → **更新とセキュリティ** → **開発者向け** → **開発者モード**

Windows11では、
**設定** → **システム** → **開発者向け** → **開発者モード**

から切り替えることができます。

## `libclang.dll` へのパスを通す

```
error: failed to run custom build command for `libsqlite3-sys v0.30.1`

Caused by:
  process didn't exit successfully: `%USERPROFILE%\AppData\Local\Temp\cargo-installJtNiZv\release\build\libsqlite3-sys-0c91121a2d754a43\build-script-build` (exit code: 101)
  --- stdout
  cargo:rerun-if-env-changed=LIBSQLITE3_SYS_USE_PKG_CONFIG
  cargo:rerun-if-env-changed=LIBSQLITE3_SYS_BUNDLING

  --- stderr

  thread 'main' panicked at %CARGO_HOME%\registry\src\index.crates.io-1949cf8c6b5b557f\bindgen-0.69.5\lib.rs:622:31:
  Unable to find libclang: "couldn't find any valid shared libraries matching: ['clang.dll', 'libclang.dll'], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: [])"
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: failed to compile `deno v2.2.3`, intermediate artifacts can be found at `%USERPROFILE%\AppData\Local\Temp\cargo-installJtNiZv`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.
```

`clang.dll` または `libclang.dll` が見つからない場合はインストールしてパスを通す必要があります。
Visual Studio Installer のオプションで、 `C++ Clang tools for Windows` （`Windows 用 C++ Clang コンパイラ`） をインストールすると clang をインストールすることができます。
その後、 Developer Command Prompt で `libclang.dll` を探すと見つけることができるはずです。

```cmd
cmd> where libclang.dll
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\bin\libclang.dll
```

パスが通っているように見えるのですが、実はこの `libclang.dll` ではコンパイルすることができません。
Llvm ディレクトリ直下はなく、 Llvm/x64 配下のディレクトリを指定する必要があります。

```
cmd >rg --files -g **/*clang.dll
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\bin\libclang.dll
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\x64\bin\libclang.dll
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\ARM64\bin\libclang.dll

cmd> set LIBCLANG_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\x64\bin

cmd> cargo install --locked deno
```