- eve package now keys off the target SDK (share/eve/TARGET_PLATFORM): win32
targets get bin/eve.exe, linux/macosx get bin/eve, so a Linux/macOS host can
produce a Windows game folder without a Visual Studio install.
- win32 SDKs bundle vulkan-1.dll + the VC redistributable next to eve.exe
(cmake/win32_bundle_runtime.cmake), making packaged games self-contained and
letting any host copy them into a package; eve package prefers those bundled
DLLs and only falls back to a local VS redist on Windows hosts.
- main.cpp makes stdout unbuffered so startup markers from eve_init are visible
in redirected CI logs (previously buffered and lost on force-kill).
Verified end-to-end on this machine: the packaged win32 game mounts game.eve,
loads config/main.nut, runs eve_init (EVE_VERIFY_OK) and presents the first
frame.
The official SDK's platform/apk template is compiled once by test-sdk.sh in the
release pipeline, so its app/build tree ships a leftover CI test APK inside the
zip. eve build copied the whole template (copyTree only skips top-level build
dirs), leaving a stale 123MB app-debug.apk built from a different game in every
assembled project. Skip app/build when copying the template, and stop zip-sdk.py
from packaging build/.gradle outputs in future SDK releases.
eve now picks the eve-sdk-<plat>-<tag>.zip asset matching its own version
(v0.1.0-dev normalizes to v0.1.0; EVE_SDK_TAG overrides), verifies it against
SHA256SUMS, extracts eve-sdk/android into %LOCALAPPDATA%/EVEngine/sdk/android
(EVE_SDK_INSTALL_ROOT overrides), and records EVENGINE_SDK in eve-android.env
so ve build android finds it without --sdk or EVENGINE_SDK.
Also harden SDK discovery: only a share/eve/TARGET_PLATFORM marker counts as an
SDK root (build trees with a platform/ dir are no longer misdetected), and
findSdkRoot falls back to SDKs installed by ve get.
Real end-to-end verification (eve get android + eve build android ->
APK) surfaced two bugs:
- copyTreeContents mapped every source entry to the destination root
instead of to/rel, so nested game files were never copied and
top-level files collided with the destination directory; the APK
shipped without assets/game. Copy relative paths in both modes.
- A release build without a signing config makes AGP emit
app-release-unsigned.apk, which eve build did not recognize. Accept
the unsigned name (with a hint) as a fallback.
The assemble test now uses REQUIRE for the asset/lib/APK assertions
(zeroerr treats CHECK failures as warnings, which CTest counted as
passing) so regressions fail the suite.
Users only receive a prebuilt EVEngine SDK (runtime libs, APK template,
game shell) and have no engine source, Makefile, cmake or NDK. Rework:
- eve build android no longer shells out to make. It copies the SDK APK
template (platform/apk) into an output dir, injects the game assets,
copies the prebuilt lib/*.so into jniLibs/arm64-v8a, writes
local.properties (sdk.dir), and runs the Gradle distribution
(assembleRelease/assembleDebug). SDK root is found via --sdk,
$EVENGINE_SDK, <sdk>/bin/eve, or cwd.
- eve get android installs what that flow needs: JDK 17, Android
cmdline-tools, platform-tools, platforms;android-34, build-tools, and
Gradle 8.5 (the APK template ships no gradlew.bat). The NDK is no
longer installed because native code ships prebuilt in the SDK.
- Tests now drive a fake SDK + fake gradle to verify the whole APK
assembly path, plus wrong-SDK-platform / missing-toolchain errors.
`eve get android` downloads and sets up everything `eve build android`
needs: Android command-line tools (via curl + tar), platform-tools,
platforms;android-34, build-tools;34.0.0, NDK 26.1.10909125 (versions
matching the repo Makefile and APK project), plus JDK 17 (Temurin)
unless JAVA_HOME is already set. It writes <sdk>/eve-android.env so
`eve build android` picks up ANDROID_HOME / JAVA_HOME when the shell
environment has not been updated. Other platforms report a clear
not-implemented error. Regression tests cover the already-installed and
unsupported-platform paths; URLs/paths are overridable via env vars.
`eve build android` now runs the repo Makefile's build/android target with
ANDROID_GAME set (so an APK is produced from the current game), and the
other platforms map to build/win32|linux|macosx|ios[-debug]. A positional
that matches a known platform is treated as the platform; otherwise it
stays the game path (legacy behavior). The engine checkout root is
auto-detected by walking up from cwd, or via --sdk / $EVENGINE_SDK.
Android builds require the Android SDK; when it is missing the command
points the user at `eve get android`. Linux builds on a Windows host use
the Makefile WSL2 targets. Adds sdk_tools helpers (platform names, env,
shell runner) and regression tests with a fake Makefile target.
First regression tests for the eve CLI: --help/--version wiring,
unknown-subcommand errors, create scaffolding (incl. skip-existing),
clean no longer creating a project, doc printing the URL with --no-open,
and zip producing a valid archive named after the cwd without embedding
itself.