Rename the injector and package it with an embedded payload for Windows, Linux, and macOS x64/ARM64. Add a core-only ImGui native build, multi-platform CI and release packaging, and shared per-user storage with legacy config migration.
50 lines
2.7 KiB
Markdown
50 lines
2.7 KiB
Markdown
# Core ImGui JNI build
|
|
|
|
OpenPrestige uses core ImGui with its Java OpenGL backend. This build keeps all core and internal
|
|
JNI methods from imgui-java 1.92.7.1, and removes the native extension implementations for ImPlot,
|
|
ImNodes, ImGuizmo, imgui-node-editor, text editor, file dialog, knobs, and memory editor. Demo
|
|
windows are disabled. Core callbacks, font rendering, tables, docking, and draw lists remain available.
|
|
|
|
The source revisions and generator dependencies are pinned in `../build_imgui_core.py`.
|
|
The build consumes upstream generated Java without modifying it. A portability step replaces
|
|
GNU variable-length arrays in the generated C++ with standard C++ vectors for MSVC.
|
|
|
|
## Windows x64
|
|
|
|
Set `JAVA_HOME` to JDK 21 and install Visual Studio C++ tools and CMake. From the repository root run
|
|
|
|
```powershell
|
|
python scripts/build_imgui_core.py --output build/core-natives/windows-x86_64 --architecture x64
|
|
```
|
|
|
|
The output contains `imgui-java64.dll` and the upstream licenses. Gradle picks up
|
|
`build/core-natives`, embeds it under `prestige-natives`, and omits the corresponding upstream
|
|
native. The Java extension wrappers are omitted from the shaded payload.
|
|
|
|
Use a distinct `--build-dir` for each target. ARM64 cross builds use the toolchain files in
|
|
`toolchains`, which require LLVM-MinGW on Windows targets and an aarch64 Linux cross compiler on
|
|
Linux targets. The macOS toolchain produces a universal library. CI builds all five variants.
|
|
|
|
## Full release build on Windows
|
|
|
|
`build-release.bat` calls `python scripts/build_release_imgui.py` before Gradle builds the JAR.
|
|
The helper fetches the pinned sources and generator dependencies, installs CMake, Ninja and Zig
|
|
when needed, and builds Windows and Linux x64/ARM64 plus both macOS slices. It combines the macOS
|
|
slices into a universal library. Downloads are cached in `build/imgui-core-cache`, and compilation
|
|
is incremental under `build/imgui-core-release`.
|
|
|
|
The complete release still requires JDK 21, Rust, and the MSVC x64/ARM64 build tools used by the
|
|
Rust Windows targets. Python's package installer needs network access on the first run.
|
|
|
|
To diagnose one cross build, use `python scripts/build_release_imgui.py --platform windows-aarch64`.
|
|
Running the helper without arguments builds the entire ImGui release set.
|
|
|
|
## JNI verification
|
|
|
|
```powershell
|
|
java -Dimgui.library.path=build/core-natives/windows-x86_64 -cp build/imgui-core/deps/imgui-java-binding-1.92.7.1.jar scripts/imgui-core/SmokeTest.java src/main/resources/prestige_ui/fonts/DMSans-Regular.ttf
|
|
```
|
|
|
|
This initializes JNI, builds the real UI font atlas, and generates geometry from widgets and draw
|
|
lists. A Minecraft smoke test should additionally exercise the ClickGUI and OpenGL backend.
|