Godot GDEXTENSION build 環境構築のまとめ(その2)

Godot

本稿の内容に関して

本稿は GDEXTENSION の開発環境構築を行った際のメモの共有を意図した、一連の記事の2番目。1番目から順に読まれていくことを想定している。

対象としている Godot エンジンのバージョンは 4.2.1。

前稿(その1)では GDEXTENSION 開発に使うツール類を準備した。本稿ではそれらを使って、先ずは Godot エンジンとエクスポートテンプレートのビルドを試みる。また Microsoft Visual Code を用いたデバッグ環境の構築に関しても触れる。

GODOT エンジンのビルド

GODOT エンジンのソースコードの取得とビルド

GDEXTENSION のデバッグには Godot エンジンのデバッグビルド成果物が必要になる。ここでは先ず Godot エンジン がビルドできるかを試すために、 Godot エンジンをソースからリリースビルドしてみる。

注意:
Windows platformターゲットで MinGW-w64 で 4.2.1-stable のTAG をデバッグビルドでビルドした場合、動作しないことが確認されている。これは生成実行ファイルが 2G バイトを超えている(約2.4GB)ためだと思われる。この問題が根本解決するかしないのかは不明であるが、現状では、デバッグは 4.1.3-stable のデバッグビルド環境で行い、リリースビルドを 4.2.1-stable ベースで行う等の対処が必要。

Godot エンジンは以下の GitHub で公開されている。
https://github.com/godotengine/godot

GitHub 上のプロジェクトを取得する場合、TAG を気にする必要がある。TAG は上の図の場合、”55 tags” と書かれているリンクから確認できる。

4.2.1-stable のTAGを “./godot-4.2.1-stable” というディレクトリに取得する場合は以下のようにする。

c:\dev>git clone --depth 1 https://github.com/godotengine/godot.git -b 4.2.1-stable godot-4.2.1-stable
c:\dev\

Godot エンジンのリリースビルドは scons を用いて、以下のようにする。

c:\dev>cd godot-4.2.1-stable
c:\dev\godot-4.2.1-stable>scons platform=windows use_mingw=yes

ここで、”platform=windows” は、windows 用のビルドを指定し、”use_mingw=yes” は、ビルドツールチェーンに “mingw” を使うことを指定している。

“use_mingw” を指定しなければ、(もし開発環境に Visual Stadio がインストールされていれば)ビルドツールチェーンに Visual Stadio を使うことを試み、もし開発環境に Visual Stadio がインストールされていなければ、mingw を使うことを試みる。今回は mingw を使うよう明示させている。

Visual Stadio を含め、複数のビルドツールチェーンを混在させていると、scons などのビルドツールがどのツールチェーンを用いているかが分からなくなり、混乱の元となる。ビルドツールチェーンは必要な場合のみに PATH を通すなど、できるだけ整理された環境を維持することが望ましい。

後、一応説明しておくと、このコマンドは https://github.com/opencv/opencv のGitHub リポジトリの 4.8.1 のタグの表層を、カレントディレクトリ直下に opencv-4.8.1 というディレクトリを作成し、クローンするというもの。”–depth 1″ を付けないとリポジトリ全体を持ってこようとする。歴史のある巨大なリポジトリの全体をもってくるのはかなりの時間とディスク容量を必要とする。タグを決めて野良ビルドをしたいだけならば、”–depth 1″ を付けると、自分の時間やディスク容量も節約できる。インターネットリソースへの負荷も軽減できるので野良ビルドにはこのオプションの付与は殆ど必須でマナーともいえる。

ビルドに成功すると以下の2個の実行ファイルが生成される。

c:\dev\godot-4.2.1-stable>cd bin
c:\dev\godot-4.2.1-stable\bin>dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は 7C92-75B3 です

 c:\dev\godot-4.2.1-stable\bin のディレクトリ

2023/12/17  17:16    <DIR>          .
2023/12/17  17:16    <DIR>          ..
2023/12/17  17:16           183,296 godot.windows.editor.x86_64.console.exe
2023/12/17  17:16       103,923,200 godot.windows.editor.x86_64.exe
               2 個のファイル         104,106,496 バイト
               2 個のディレクトリ  35,694,694,400 バイトの空き領域

c:\dev\godot-4.2.1-stable\bin>

“godot.windows.editor.x86_64.exe” は GUI から起動できる Godot エンジンエディッタ実行ファイルであり、マウス左ダブルクリックで起動すると、通常の GODOT エディターが立ち上がる。

次にデバッグビルドを試す。先にも述べたように、4.2.1-stable をデバッグビルドしても生成実行ファイルは起動できない。よってデバッグビルドは 4.1.3-stable ベースで行うことにする。

4.1.3-stable のTAGを “./godot-4.1.3-stable” というディレクトリに取得する場合は以下のようにする。

c:\dev>git clone --depth 1 https://github.com/godotengine/godot.git -b 4.1.3-stable godot-4.1.3-stable
c:\dev>

Godot エンジンのデバッグビルドは scons を用いて、以下のようにする。

c:\dev>cd godot-4.1.3-stable
c:\dev\godot-4.1.3-stable>scons platform=windows use_mingw=yes dev_build=yes

dev_build=yes を指定するところがリリースビルドと異なる。ビルドに成功すると以下の2個の実行ファイルが生成される。

c:\dev\godot-4.1.3-stable>cd bin
c:\dev\godot-4.1.3-stable\bin>dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は 7C92-75B3 です

 c:\dev\godot-4.1.3-stable\bin のディレクトリ

2023/12/22  11:49    <DIR>          .
2023/12/22  11:49    <DIR>          ..
2023/12/22  11:49         1,649,544 godot.windows.editor.dev.x86_64.console.exe
2023/12/22  11:48     1,913,345,501 godot.windows.editor.dev.x86_64.exe
               2 個のファイル       1,914,995,045 バイト
               2 個のディレクトリ  53,684,400,128 バイトの空き領域

“godot.windows.editor.dev.x86_64.console.exe” は GUI から起動できる Godot エンジンエディッタのデバッグ情報付き実行ファイルであり、マウス左ダブルクリックで起動すると、通常の Godot エンジンエディターが立ち上がる。
これで Godot 4 エンジンエディッタのビルド可能なソースコード一式を入手した。後は自由に改造することができる。

godot エンジンエディッタの実行ファイルのある “c:\dev\godot-4.1.3-stable\bin” のディレクトリは 環境変数に PATH を通すために mingw64.bat に以下の記述を追加する。

%HOMEPATH%\mingw64.bat(追加部分)

SET c:\dev\godot-4.1.3-stable\bin;PATH=%PATH%

つまり mingw64.bat としては以下のようになる。

%HOMEPATH%\mingw64.bat

SET PATH=%PATH%;"C:\Program Files\7-Zip"
SET PATH=%PATH%;C:\dev\tools\pkg-config\bin
SET PATH=C:\dev\tools\Python\Python312\Scripts;C:\dev\tools\Python\Python312;%PATH%
SET PATH=C:\dev\tools\mingw64\bin;%PATH%
SET CMAKE_PREFIX_PATH=C:\dev\tools\mingw64\local
SET PATH=%PATH%;C:\dev\tools\mingw64\local
SET c:\dev\godot-4.1.3-stable\bin;PATH=%PATH%

cd c:\dev

これはビルドしたGodot エンジンのディレクトリに応じて適時書き換える。例えば “c:\dev\godot-4.2.1-stable\bin” である場合は以下のようにする。

%HOMEPATH%\mingw64.bat

SET PATH=%PATH%;"C:\Program Files\7-Zip"
SET PATH=%PATH%;C:\dev\tools\pkg-config\bin
SET PATH=C:\dev\tools\Python\Python312\Scripts;C:\dev\tools\Python\Python312;%PATH%
SET PATH=C:\dev\tools\mingw64\bin;%PATH%
SET CMAKE_PREFIX_PATH=C:\dev\tools\mingw64\local
SET PATH=%PATH%;C:\dev\tools\mingw64\local
SET c:\dev\godot-4.2.1-stable\bin;PATH=%PATH%

cd c:\dev

GODOT エンジンの Windows エクスポートテンプレートのビルド

同様にして Godot エンジンの Windows エクスポートテンプレートをビルドする。エクスポートテンプレートはリリース時にしか使わないので、4.2.1-stable だけで実施するので問題ないだろう。

c:\dev\godot-4.2.1-stable\bin>cd ..
c:\dev\godot-4.2.1-stable>scons platform=windows use_mingw=yes target=template_debug arch=x86_64
c:\dev\godot-4.2.1-stable>scons platform=windows use_mingw=yes target=template_release arch=x86_64

ビルドに成功すると以下のようにそれぞれ2個、合計4個の実行ファイルが生成される。

c:\dev\godot-4.2.1-stable>cd bin
c:\dev\godot-4.2.1-stable\bin>dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は 7C92-75B3 です

 c:\dev\godot-4.2.1-stable\bin のディレクトリ

2023/12/17  18:09    <DIR>          .
2023/12/17  18:09    <DIR>          ..
2023/12/17  17:16           183,296 godot.windows.editor.x86_64.console.exe
2023/12/17  17:16       103,923,200 godot.windows.editor.x86_64.exe
2023/12/17  17:38           183,296 godot.windows.template_debug.x86_64.console.exe
2023/12/17  17:38        66,007,552 godot.windows.template_debug.x86_64.exe
2023/12/17  18:09           183,296 godot.windows.template_release.x86_64.console.exe
2023/12/17  18:09        68,079,616 godot.windows.template_release.x86_64.exe
               6 個のファイル         238,560,256 バイト
               2 個のディレクトリ  34,024,960,000 バイトの空き領域

c:\dev\godot-4.2.1-stable\bin>

生成された Windows エクスポートテンプレートの実行ファイルは命名規則に準拠していないのでリネームする。

c:\dev\godot-4.2.1-stable\bin>rename godot.windows.template_debug.x86_64.console.exe windows_debug_x86_64_console.exe
c:\dev\godot-4.2.1-stable\bin>rename godot.windows.template_debug.x86_64.exe windows_debug_x86_64.exe
c:\dev\godot-4.2.1-stable\bin>rename godot.windows.template_release.x86_64.console.exe windows_release_x86_64_console.exe
c:\dev\godot-4.2.1-stable\bin>rename godot.windows.template_release.x86_64.exe windows_release_x86_64.exe

生成された Windows エクスポートテンプレートの実行ファイルは所定のディレクトリに格納することで、GODOTエディターに認識させることができるようになる。

c:\dev\godot-4.2.1-stable\bin>
c:\dev\godot-4.2.1-stable\bin>mkdir %USERPROFILE%\AppData\Roaming\Godot\export_templates\4.2-stable
c:\dev\godot-4.2.1-stable\bin>copy .\windows_*_x86_64.exe %USERPROFILE%\AppData\Roaming\Godot\export_templates\4.2-stable

VSCODE のインストールと設定

IDE 選択に関して

GDEXTENSION の開発は、ビルドからデバッグまでをコマンドプロンプトで行うことができるが、以下の IDE との連携も可能。

  • Android Studio
  • CLion
  • Code::Blocks
  • KDevelop
  • Qt Creator
  • Rider
  • Visual Studio
  • Visual Studio Code
  • Xcode

IDE を使う使わない、使うならば何を選択するかは人それぞれで、使っているプラットフォームにもよるし、所属している村の掟にも縛られる。宗教上の理由で使える IDE が決まってしまう場合もありえるだろう。とはいえ、Windows プラットフォームでの開発、ビルドツールチェーンに MinGW-w64、そして多くの人が無料で使えるという条件で IDE を選ぶならば、Visual Studio Code (以下 VSCODE) が良い選択肢となる。

ここでは Windows11 PC に VSCODE をインストールし、ビルド及びデバッグを行う方法に関して検討する。

VSCODE のインストール

VSCODE の配布サイトは以下。
https://code.visualstudio.com/download

このサイトから “Windows User Installer x64” のインストーラーをダウンロードし、インストールを行う。

VSCODE の初期設定

先ず、VSCODE で開くデフォルトのターミナルを「コマンドプロンプト」に変更する。VSCODE を開き、左下にある歯車のアイコンを左クリックする。

出てくるメニューの中から “Settings” を選択する。

検索欄に “Windows:terminal” と入力すると以下のような項目が出てくる。

Terminal › Integrated › Default Profile: Windows
The default terminal profile on Windows.

この項目を変えると、デフォルトで用いられるターミナルを変えることができる。プルダウンメニューから “Command Prompt” を選択する。

これで、Ctrl+Shift+”@” を押下して開くデフォルトターミナルが “Command Prompt” になった。

次に C++ の拡張機能をインストールする。

VSCODE を開き、Ctrl+Shift+”X” を押下して、ExtensionS を 開き、 c++ を検索する。

“C/C++ for Visual Studio Code” をインストールする。

“C/C++ for Visual Studio Code” のインストール完了後、別の窓として VSCODE を開き、Ctrl+Shift+”@” を押下すればターミナルを開くことができることを確認する。

環境変数を反映させる VSCODE の起動方法

ここで、System の環境変数には開発に必要な PATH を入れていないことに注意。%HOME%\mingw54.bat を実行することにより必要な環境変数 PATH が設定されるようにしている。これは、通常通りにアプリケーション起動として VSCODE を起動すると、環境変数には開発に必要な PATH が設定されていない状態となってしまうことを意味する。無論 VSCODE でターミナルを開き、%HOME%\mingw54.bat を実行するとそのターミナルでは必要な環境変数を定義できるのだが、VSCODE 全体に反映されるわけではなく、別ターミナルを開いてもそこに反映されるわけでもない。

以下、必要な環境変数 PATH が反映されている状態で VSCODE を起動する方法に関して説明する。

先ずコマンドプロンプトを立ち上げる。コマンドプロンプトを立ち上げる方法はいくつかあるが、簡便には Windows+”R” を押し「ファイル名を指定して実行」のダイアログに “cmd” と入力して 「OK」をクリックする。

コマンドプロンプトは %HOME% のディレクトリから始まる。

ここで、”.\mingw64.bat” を起動し、必要な環境変数を設定した後、”C:\dev” 配下のプロジェクトを格納したディレクトリに移動し、VSCODE を起動する。具体的には以下のコマンドを実行する。

C:\Users\user>.\mingw64.bat
c:\dev>cd godot-4.1.3-stable
c:\dev\godot-4.1.3-stable>code .

“code” というコマンドは VSCODE をコマンドプロンプト(を含む SHELL)から起動するものであるが、予め環境変数を設定してあるコマンドプロンプトから起動した VSCODE はそのコマンドプロンプトの環境変数を引き継ぐ。この仕組みを利用すれば、異なる環境変数 (例えば MinGW-w64 用と Emscripten 用など) を別窓として、VSCODE を複数起動することができる。

そして、”code .” とすると、カレントディレクトリを VSCODE で開く指定となる。

VSCODE で新規ディレクトリを開く場合、以下のように「このフォルダー内のファイルの作成者を信頼するか」を尋ねてくるので、信頼する場合は “Yes, I trust the authors” を選択する。

VSCODE で “c:\dev\godot-4.1.3-stable” ディレクトリが開けた。※図は “c:\dev\godot-4.2.1-stable” のディレクトリになっているが・・・。

Ctrl+Shift+”@” を押下し、ターミナルを開くと、C:\dev\godot-4.2.1-stable のディレクトリから開始する。

以下の3つのコマンドが通れば MinGW-w64 への PATH が通っている。

C:\dev\godot-4.2.1-stable>g++ --version
C:\dev\godot-4.2.1-stable>gcc --version
C:\dev\godot-4.2.1-stable>gdb --version

VSCODE のプロジェクトはディレクトリ単位で管理される。従って VSCODE の起動は以下の手順を踏むことがセオリーとなる。

  • コマンドプロンプトを開く
  • 環境変数設定バッチファイルを実行する
  • プロジェクトのルートディレクトリに移動する
  • “code .” によりVSCODE を起動する

これら一連の処理を行うバッチファイルをディスクトップに設置するのも良いかもしれない。

.vscode/tasks.json の生成と編集

以上の操作により、必要な環境変数が設定された状態で C:\dev\godot-4.2.1-stable のディレクトリを開くことができた。

Ctrl+Shift+”P” を押下し、開く “Command Prompt Window” に “Tasks: Configure Task” と入力する。

“Tasks: Configure Task” を選択する。

プルダウンメニューをスクロールさせて、”Create tasks.jsonfile from template” を選択する。

“Others” を選択すると、.vscode/tasks.json の編集画面となる。

プルダウンメニューで “Create tasks.jsonfile from template” が現れない場合は既に .vscode/tasks.json が存在する。既存の.vscode/tasks.json を一旦削除してやり直しても良いし、再編集しても良い。

.vscode/tasks.json を以下のように編集する。

.vscode/tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "group": "build",
            "type": "shell",
            "command": "scons",
            "args": [
                "platform=windows",
                "use_mingw=yes",
                // Uncomment if debug build. 
                "dev_build=yes",
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}

この例は デバッグビルド用のもので、shell で以下のコマンドを発行する意味になる。

scons platform=windows use_mingw=yes dev_build=yes

リリースビルド用のものは、以下のようにすればよい。

vscode/tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "group": "build",
            "type": "shell",
            "command": "scons",
            "args": [
                "platform=windows",
                "use_mingw=yes",
                // Uncomment if debug build. 
                //"dev_build=yes",
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}

編集終了後、Ctrl+”S” で .vscode/tasks.json をセーブする。

ビルドの実行は Ctrl+Shift+”B” を押下する。

注意:
Ctrl+Shift+”B” 実行時、.vscode/tasks.json は閉じておかないとエラーになる。

ビルドに成功すれば C:\dev\godot-4.1.3-stable\bin ディレクトリに以下の二つの実行ファイルが生成される。

godot.windows.editor.dev.x86_64.exe
godot.windows.editor.dev.x86_64.console.exe

.vscode/tasks.json の生成と編集

続いて Ctrl+Shift+”D” を押下し、”Run panel” を開く。

“create a launch.json file” をクリックする。

“C++ (GDB/LLDB)” を選択すると、.vscode/launch.json の編集画面となる。

Godot のプロジェクトが以下のように設置せされいる場合を考える。

C:\dev\MyProject
│  MyNode.gd
│  icon.svg
│  seane.tscn
│  project.godot
│
├─.godot
│
└─bin
        gdexample.gdextension
        libgdexample.windows.template_debug.x86_64.dll

.vscode/launch.json を以下のように編集する。

.vscode/launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Project",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bin/godot.windows.editor.dev.x86_64.exe",
            // Change the arguments below for the project you want to test with.
            // To run the project instead of editing it, remove the "--editor" argument.
            "args": [
                "--editor",
                "--path",
                // path to your godot project folder.
                "C:/dev/MyProject",
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "internalConsole",
            "visualizerFile": "${workspaceFolder}/platform/windows/godot.natvis",
            "preLaunchTask": "build"
        }
    ]
}

編集終了後、Ctrl+”S” で vscode/launch.json をセーブする。

デバッグの実行は “F5” を押下する。

注意:
“F5” 押下時 .vscode/launch.json は閉じておかないとエラーになる。

以上で、VSCODE 上で gdb を用いたデバッガを起動する方法について説明した。

なお、何をデバッグするかにより “args” 項目を変えなくてはならない。単に Godot エンジンエディッタをデバッグする場合は以下のようにする。

.vscode/launch.json(argセクション)

            "args": [
                "--editor",
            ],

プロジェクトを実行した Godot エンジンエディッタをデバッグする場合は以下のようにする。

.vscode/launch.json(argセクション)

            "args": [
                "--editor",
                "--path",
                // path to your godot project folder.
                "C:/dev/MyProject/myproject.godot",
            ],

プロジェクトを実行した Godot エンジンをデバッグする場合は以下のようにする。これは Godot エンジンエディッタでプロジェクトを “F5” で実行した際に起動する Godot エンジンに近い。メインシーンが定義されていないとエラーとなる。

.vscode/launch.json(argセクション)

            "args": [
                "--path",
                // path to your godot project folder.
                "C:/dev/MyProject",
            ],

    プロジェクトの任意のシーンを実行した Godot エンジンをデバッグする場合は以下のようにする。これは Godot エンジンエディッタでプロジェクトを “F6” で実行した際に起動する Godot エンジンに近い。

.vscode/launch.json(argセクション)

            "args": [
                "--path",
                // path to your godot project folder.
                "C:/dev/MyProject/scene.tscn",
            ],

GDEXTENSION のデバッグは多少入り組んでいて、GDEXTENSION で何を実装するかによりデバッグ方法は変わる。単に任意のノードを継承した拡張ノードである GDEXTENSION 実装のデバッグならば、その拡張ノードを使っているシーンをデバッグすれば良いだろう。一方、GDEXTENSION でゲーム全体を実装している場合は、シーンだけのデバッグでは足りないため、Godot エンジンのデバッグを行うことになるだろう。何れの場合でも Godot エンジンエディッタから起動される GDEXTENSION をデバッグするのではなく、GDEXTENSION を起動する Godot エンジンをデバッグするのが簡便。GDEXTENSION のデバッグを行うにあたり、Godot エンジンエディッタから起動される必要は必ずしも必要ではない。無論 GDEXTENSION でGodot エンジンエディッタの機能拡張を行っている場合は Godot エンジンエディッタをデバッグすることになるだろう。

本稿の振り返りと次稿について

本稿では Godot エンジン及び エクスポートテンプレートのビルドを実際に行った。また、Microsoft Visual Code を用いたデバッグ環境を整えた。

しかし、残念なことに Godot version 4.2.1 では Godot エンジンエディタのデバッグビルドがファイルサイズの関係で動作しない問題が発生している。

次稿(その3)では Godot 公式が提供する GDEXTENSION サンプルを実際にビルドし、設置及び動作させる。また、UtilityFunctions::print() を用いた簡易デバッグの方法にも触れる。

ということで(その3)に続く。

コメント

タイトルとURLをコピーしました