WindowsでSymbolサーバをビルドする

# 参照元
VisualStudio 2019 を使用したビルド

https://github.com/symbol/symbol/blob/main/client/catapult/docs/BUILD-vs.md



# 必須バージョン要件

Gitバージョン >= 2.25
Pythonバージョン >= 3.8
Visual Studio 2019+ (2022 推奨): 2022 (17.9.6) でテスト済み
vcpkgパッケージ マネージャー >= 2024.04.26 (インストール手順は下記)

:::note warn
Visual Studioとvcpkgは、上記のバージョンになるだけ寄せていく。場合によっては、VS2022のダウングレード(要アンインストール)する。
100GB程の空き容量と**挫けない心**も必要になる。
:::



## Git
https://git-scm.com/download/win

Standalone Installerで良いかと思います。

バージョン確認するコマンド
```posh
git --version
```

すでにインストール済でアップデートしたい場合は、以下のコマンドでもアップデート出来ます。
```posh
git update-git-for-windows
```

私の環境は、ちょっと古かったのでアップデートしました。
```
> git version
git version 2.46.0.windows.1
```

## Python
https://www.python.org/downloads/windows/

バージョン確認するコマンド
```posh
python --version
```

私の環境は、元からそれなりなバージョンだったのでそのまま。
```
> python --version
Python 3.11.2
```



## Visual Studio
https://visualstudio.microsoft.com/ja/downloads/

:::note alert
私の環境ではv17.10.0でしかvcpkgでのビルドが完走しませんでした。ダウングレードしたい場合は、アンインストールする必要があります。
:::

Windowsボタンを右クリックしてターミナル(管理者)を起動する。

アンインストール
```posh
winget uninstall --id Microsoft.VisualStudio.2022.Community
```

バージョンを指定してインストール
```posh
winget install --id Microsoft.VisualStudio.2022.Community --version 17.10.0
```

https://mseeeen.msen.jp/downgrade-visual-studio-2022-with-winget/

インストール出来たら、Visual Studio Installerを起動し、Visual Studio 2022の変更ボタンを押す。
C++によるデスクトップ開発にチェックして変更ボタンを押す。



## vcpkgパッケージ マネージャー
https://github.com/microsoft/vcpkg

動作確認が取れているタグ(2024.04.26)をクローンする。
Symbol関連置いてるところとかの適当な場所にクローンしてビルドする。

:::note warn
どうやら、vcpkgは各パッケージの最新版は問題なくインストール出来るが、過去バージョンは上手くインストール出来ないことがあるようだ…
:::

```posh
git clone https://github.com/microsoft/vcpkg.git -b 2024.04.26
cd vcpkg
.\bootstrap-vcpkg.bat
```

### 環境変数を設定
1. システムの詳細設定(システムのプロパティ)を開く
Windowsキー+Pause/Breakから辿るとかあるけど、「SystemPropertiesAdvanced」が速い
1. 環境変数 ボタンを押す
1. ユーザー環境変数のpathにvcpkgのフルパス(ex.H:\symbol_src\vcpkg)を新規登録する
1. ユーザー環境変数に以下を新規追加する
変数: VCPKG_ROOT
値: vcpkgのフルパス(ex.H:\symbol_src\vcpkg)


# Symbolのビルド
## ソースの取得
開発中のソースを取得するとvcpkgでインストール出来る依存パッケージとCMakeで要求されるバージョンに不整合があるので、動作確認が取れている付近のタグをクローンする。

```posh
git clone https://github.com/symbol/symbol.git -b sdk/python/v3.2.2
```

`symbol\client\catapult\vcpkg.json`を修正する。
```diff:symbol\client\catapult\vcpkg.json
    {
      "name": "boost-modular-build-helper",
-      "version": "1.83.0#0"
+      "version": "1.84.0#3"
    },
```

## 依存パッケージビルド

1. Visual Studio 2022を起動
1. 最初に出てくるウィンドウは「コードなしで続行」を押す
1. メニュー「ファイル -> 開く -> CMake」を選択
1. symbol\client\catapult\CMakeLists.txtを開く

これで、Symbolのビルドに必要なもの(boostとかmongoとか)がダウンロード＆ビルドされるので「CMake generation finished.」または「CMake 生成が完了しました。」のメッセージが出るまで待ちます。そこそこ時間が掛かるのでコーヒーでも入れて待ちましょう。
**エラーが出ると思うので頑張って調べて解消する。**

:::note info
メニュー「プロジェクト -> キャッシュを構成する」で依存パッケージの再ビルドができます。
:::

## Symbolのビルド
メニュー「ビルド -> すべてビルド」を選択して、ビルドが終わるまで待ちます。これもそこそこ時間が掛かるので紅茶でも入れて待ちましょう。

ビルドが終わったら、以下のコマンドで確認出来ます。

```posh
.\symbol\client\catapult\build\x64-Debug\bin\catapult.tools.address.exe --help
```

```text
Address Inspector Tool
Copyright (c) Jaguar0625, gimre, BloodyRookie, Tech Bureau, Corp.
catapult version: 1.0.3.7 116d7f630 [HEAD]

Address Inspector Tool options:
  -h [ --help ]     print help message
  -l [ --loggingConfigurationPath ] arg
                    path to the logging configuration file
  -n [ --network ] arg (=testnet)
                    network, possible values: testnet (default), mainnet
  -i [ --input ] arg
                    input value (comma-delimited) or file
  -o [ --output ] arg
                    (optional) output file
  -f [ --format ] arg (=pretty)
                    output format, possible values: pretty (default), csv
  --suppressConsole
                    true to suppress console output
  -m [ --mode ] arg mode, possible values: encoded, decoded, public, secret
```


Symbolサーバーの起動はまた今度…