Files
rmlui-raylib-backend/flake.nix

191 lines
6.7 KiB
Nix

{
description = "Raylib + RmlUI (with android build support) dev shell";
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; };
rmluiSrc = pkgs.fetchFromGitHub {
owner = "mikke89";
repo = "RmlUi";
rev = "9c74c4fadc2ad7f1496239e560bab19ca2fe5072";
hash = "sha256-YZz41ViE3+a0VPypnbJ1Orlf5Hyxd65se5yzyHIY7ZI=";
};
rmluiCmakeFlags = [
"-DRMLUI_LUA_BINDINGS=OFF"
"-DRMLUI_SVG_PLUGIN=OFF"
"-DBUILD_SAMPLES=OFF"
"-DBUILD_TESTING=OFF"
];
wasmFindOverrides = [
"-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH"
"-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH"
"-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH"
];
# ---- native RmlUi (shared lib) --------------------------------------
rmlui = pkgs.stdenv.mkDerivation {
pname = "rmlui";
version = "master";
src = rmluiSrc;
nativeBuildInputs = [ pkgs.cmake pkgs.pkg-config ];
buildInputs = [ pkgs.freetype ];
cmakeFlags = rmluiCmakeFlags ++ [ "-DBUILD_SHARED_LIBS=ON" ];
};
# ---- WASM Freetype (static, minimal deps) ---------------------------
freetypeWasm = pkgs.stdenv.mkDerivation {
pname = "freetype-wasm";
version = pkgs.freetype.version;
src = pkgs.freetype.src;
nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ];
dontFixup = true;
configurePhase = ''
emcmake cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DFT_DISABLE_ZLIB=TRUE \
-DFT_DISABLE_BZIP2=TRUE \
-DFT_DISABLE_PNG=TRUE \
-DFT_DISABLE_HARFBUZZ=TRUE \
-DFT_DISABLE_BROTLI=TRUE \
-DCMAKE_INSTALL_PREFIX=$out
'';
buildPhase = "emmake make -C build -j$NIX_BUILD_CORES";
installPhase = "emmake make -C build install";
};
# ---- WASM RmlUi (static) ---------------------------------------------
rmluiWasm = pkgs.stdenv.mkDerivation {
pname = "rmlui-wasm";
version = "master";
src = rmluiSrc;
nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ];
dontFixup = true;
configurePhase = ''
emcmake cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
${pkgs.lib.concatStringsSep " " rmluiCmakeFlags} \
${pkgs.lib.concatStringsSep " " wasmFindOverrides} \
-DCMAKE_PREFIX_PATH="${freetypeWasm}" \
-DCMAKE_INSTALL_PREFIX=$out
'';
buildPhase = "emmake make -C build -j$NIX_BUILD_CORES";
installPhase = "emmake make -C build install";
};
# ---- WASM raylib (PLATFORM=Web) ---------------------------------------
raylibWasm = pkgs.stdenv.mkDerivation {
pname = "raylib-wasm";
version = pkgs.raylib.version;
src = pkgs.raylib.src;
nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ];
dontFixup = true;
configurePhase = ''
emcmake cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DPLATFORM=Web \
-DBUILD_EXAMPLES=OFF \
-DCMAKE_INSTALL_PREFIX=$out
'';
buildPhase = "emmake make -C build -j$NIX_BUILD_CORES";
installPhase = "emmake make -C build install";
};
# ---- native toolchain / runtime ---------------------------------------
nativeBuildTools = with pkgs; [
cmake
pkg-config
clang-tools
];
nativeRuntimeDeps = with pkgs; [
raylib
libGL
libX11
libXcursor
libXrandr
libXinerama
libXi
wayland
libxkbcommon
rmlui
freetype
];
in
{
devShells.default = pkgs.mkShell {
nativeBuildInputs = nativeBuildTools;
buildInputs = nativeRuntimeDeps;
shellHook = ''
export C_INCLUDE_PATH="${rmlui}/include:${pkgs.raylib}/include"
export CPLUS_INCLUDE_PATH="$C_INCLUDE_PATH"
export LIBRARY_PATH="${pkgs.lib.makeLibraryPath nativeRuntimeDeps}"
export LD_LIBRARY_PATH="$LIBRARY_PATH:$LD_LIBRARY_PATH"
echo "dev shell ready (raylib + rmlui)"
'';
};
devShells.wasm = pkgs.mkShell {
nativeBuildInputs = [ pkgs.cmake pkgs.emscripten pkgs.python3 ];
shellHook = ''
export RAYLIB_WASM="${raylibWasm}"
export RMLUI_WASM="${rmluiWasm}"
export FREETYPE_WASM="${freetypeWasm}"
echo "wasm dev shell ready, configure with:"
echo " emcmake cmake -B build-wasm -DPLATFORM=Web \\"
echo " -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \\"
echo " -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH \\"
echo " -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \\"
echo " -DCMAKE_PREFIX_PATH=\"\$RAYLIB_WASM;\$RMLUI_WASM;\$FREETYPE_WASM\""
echo " emmake make -C build-wasm"
'';
};
packages.default = pkgs.stdenv.mkDerivation {
pname = "rrmlui";
version = "0.1.0";
src = ./.;
nativeBuildInputs = nativeBuildTools ++ [ pkgs.makeWrapper ];
buildInputs = nativeRuntimeDeps;
cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
postInstall = ''
wrapProgram $out/bin/gamejam \
--prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath nativeRuntimeDeps}"
'';
};
packages.wasm = pkgs.stdenv.mkDerivation {
pname = "rrmlui-wasm";
version = "0.1.0";
src = ./.;
nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ];
dontFixup = true;
configurePhase = ''
emcmake cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DPLATFORM=Web \
${pkgs.lib.concatStringsSep " " wasmFindOverrides} \
-DCMAKE_PREFIX_PATH="${raylibWasm};${rmluiWasm};${freetypeWasm}" \
-DCMAKE_INSTALL_PREFIX=$out
'';
buildPhase = "emmake make -C build -j$NIX_BUILD_CORES";
installPhase = ''
mkdir -p $out
cp -r build/*.html build/*.js build/*.wasm $out/ 2>/dev/null || true
emmake make -C build install || true
'';
};
}
);
}