Build, Configure and Export your project - godot-nim/gdext-nim GitHub Wiki
Basic usage
For example, the simplest example would be as follows:
# config.nims
import gdext/buildconf
--path: src
let setting = BuildSettings(
name: "MyExtension",
)
configure(setting)
This will generate a MyExtension.gdextension file in the same directory as config.nims. We can build it as follows:
$ gdextwiz build PROJECT # to build for your system
$ gdextwiz run PROJECT # to build and execute project
$ gdextwiz build -d:platform=web -d:target=release PROJECT # to make a release build for web platform
see also: gdextwiz
Dynamic .gdextension configuration
The path to the generated .gdextension can be set with the extpath property:
# config.nims
import gdext/buildconf
--path: src
let setting = BuildSettings(
name: "MyExtension",
extpath: projectDir() & "/myextension.gdextension",
)
configure(setting)
If you want to change the name or path of the generated DLL, do the following:
# config.nims
import gdext/buildconf
import std/[strformat, strutils]
--path: src
let setting = BuildSettings(
name: "MyExtension",
)
let bin = setting.name.toLowerAscii
configure(setting):
[libraries]
linux.debug = &"res://nim/lib/lib{bin}.so"
if true:
linux.release = &"res://nim/lib/lib{bin}.release.so"
else:
linux.release = &"res://nim/lib/release/lib{bin}.so"
The build system checks the platform, target, and arch in the BuildSettings and outputs binaries to the appropriate paths.
In this example, if you build with gdextwiz build -d:platform=linux -d:target=release, res://nim/lib/libmyextension.release.so is automatically selected as the output destination.
There are three update methods for the .gdextension file. See the documentation for details.
Cross-platform build
By using the value of setting.platform, you can easily get a cross-platform build environment as well. For example, if you want to build for WebAssembly, you can do the following:
[!NOTE] The emcc backend is already built into the library, so there is no need to copy and paste this.
# config.nims
import gdext/buildconf
--path: src
let setting = BuildSettings(
name: "MyExtension",
)
configure(setting)
case setting.platform
of web:
--cpu: wasm32
--cc: clang
when buildOS == "windows":
--clang.exe: emcc.bat
--clang.linkerexe: emcc.bat
else:
--clang.exe: emcc
--clang.linkerexe: emcc
--passC: "-s SIDE_MODULE=1 -s SUPPORT_LONGJMP='wasm'"
--passL: "-s SIDE_MODULE=1 -s SUPPORT_LONGJMP='wasm' -s WASM_BIGINT"
Export to web
[!NOTE] Web platform support depends on emscripten.
Step by step
- Install emscripten following the guide
- Set up export templates following [exporting projects] (https://docs.godotengine.org/en/stable/tutorials/export/exporting_projects.html#exporting-projects)
- Build your extension:
gdextwiz build -d:platform=web - Check [Extensions Support] and [Thread Support] on
- Start HTTP server and have fun!