{ description = "RmlUi android app"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; utils.url = "github:numtide/flake-utils"; }; outputs = {self, nixpkgs, utils}: utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; config = { allowUnfree = true; android_sdk.accept_license = true; }; }; rmlui = pkgs.stdenv.mkDerivation rec { pname = "rmlui"; version = "6.2"; src = pkgs.fetchFromGitHub { owner = "mikke89"; repo = "RmlUi"; rev = "6.2"; hash = "sha256-K/znksrli3/FQ+lHgZgMgefFrWAGbxKNvFIIqtybOMc="; }; nativeBuildInputs = [ pkgs.cmake pkgs.pkg-config ]; buildInputs = [ pkgs.freetype ]; cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" "-DBUILD_SAMPLES=OFF" "-DBUILD_TESTING=OFF" "-DNO_FONT_INTERFACE_DEFAULT=OFF" ]; }; buildDeps = with pkgs; [ cmake pkg-config gcc clang-tools ]; runtimeDeps = with pkgs; [ sdl3 sdl3-image libGL wayland libxkbcommon rmlui freetype ]; ndkVersion = "26.3.11579264"; androidComposition = pkgs.androidenv.composeAndroidPackages { platformVersions = [ "34" ]; buildToolsVersions = [ "34.0.0" ]; includeNDK = true; ndkVersions = [ ndkVersion ]; cmakeVersions = [ "3.22.1" ]; abiVersions = [ "arm64-v8a" ]; includeEmulator = false; }; androidSdkRoot = "${androidComposition.androidsdk}/libexec/android-sdk"; androidNdkRoot = "${androidSdkRoot}/ndk/${ndkVersion}"; androidDeps = [ androidComposition.androidsdk pkgs.gradle pkgs.jdk17 pkgs.ninja ]; in { devShells.default = pkgs.mkShell { nativeBuildInputs = buildDeps ++ androidDeps; buildInputs = runtimeDeps; shellHook = '' export CP_PATH="${rmlui}/include" export LIBRARY_PATH="${pkgs.libGL}/lib:${rmlui}/lib" export LD_LIBRARY_PATH="$LIBRARY_PATH:$LD_LIBRARY_PATH" export ANDROID_HOME="${androidSdkRoot}" export ANDROID_SDK_ROOT="${androidSdkRoot}" export ANDROID_NDK_HOME="${androidNdkRoot}" export ANDROID_NDK_ROOT="${androidNdkRoot}" echo "Env ready (desktop + Android NDK ${ndkVersion}, arm64-v8a)" ''; }; packages.default = pkgs.stdenv.mkDerivation { pname = "rmlandroid"; version = "0.1.0"; src = ./.; nativeBuildInputs = buildDeps ++ [ pkgs.makeWrapper ]; buildInputs = runtimeDeps; cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ]; postInstall = '' wrapProgram $out/bin/rmlandroid \ --prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath runtimeDeps}" ''; }; } ); }