Added raylib+rmlui template
This commit is contained in:
195
flake.nix
Normal file
195
flake.nix
Normal file
@@ -0,0 +1,195 @@
|
||||
{
|
||||
description = "Raylib + RmlUI gamejam dev environment (desktop + wasm)";
|
||||
|
||||
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"
|
||||
];
|
||||
|
||||
# Emscripten's toolchain file restricts find_library/find_path/find_package
|
||||
# to CMAKE_FIND_ROOT_PATH (its own sysroot) by default. Our externally-built
|
||||
# wasm deps (freetypeWasm, raylibWasm, rmluiWasm) live in the Nix store,
|
||||
# outside that sysroot, so CMAKE_PREFIX_PATH alone is silently ignored
|
||||
# unless we relax these three modes to BOTH.
|
||||
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 "native 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 = "gamejam";
|
||||
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 = "gamejam-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
|
||||
'';
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user