Files
StarterNG/README.md
2026-08-30 22:29:45 +02:00

49 lines
1.8 KiB
Markdown

# StarterNG
Launcher for the MaSzyna train simulator, written in C# with Avalonia.
## Building a native (NativeAOT) build
The project publishes as a self-contained NativeAOT binary — no .NET runtime is
needed on the target machine. The commands below are the same ones CI runs, see
[`.github/workflows/dotnet.yml`](.github/workflows/dotnet.yml).
Requirements:
- .NET SDK 9
- Linux: a native toolchain and zlib headers — `sudo apt install clang zlib1g-dev`
(Debian/Ubuntu) or `sudo dnf install clang zlib-devel` (Fedora)
- Windows: the Visual Studio C++ build tools (Desktop development with C++)
Restore for the target runtime first, then publish:
```sh
dotnet restore StarterNG/StarterNG.csproj -r linux-x64
dotnet publish StarterNG/StarterNG.csproj \
-c Release -r linux-x64 --self-contained true --no-restore \
-p:PublishAot=true -p:PublishTrimmed=true \
-o publish/linux-x64
```
For a Windows build swap both `linux-x64` occurrences for `win-x64` (and the
line continuations for PowerShell backticks). NativeAOT does not cross-compile,
so the Windows package has to be built on Windows and the Linux one on Linux —
that is why CI uses a `windows-2022` and an `ubuntu-22.04` runner.
The output directory is the whole distributable: the `Starter` executable, the
Skia/HarfBuzz native libraries and `startercfg/` with the translations and the
default key bindings. The `.dbg` (or `.pdb`) file next to it is debug symbols and
can be dropped from a release. Trim/AOT analysis warnings during the publish are
expected and do not fail the build.
CI builds both runtimes on every push and pull request to `main` and `staging`,
and on manual dispatch. Pushes additionally replace a rolling pre-release with
the packaged artifacts — tagged `latest` for `main` and `staging` for `staging`.
## Development build
```sh
dotnet build StarterNG/StarterNG.csproj
```