added readme and removed wasm stuff from flake and cmake

This commit is contained in:
2026-08-30 17:37:16 -05:00
parent 761fa6ca21
commit cd6f2bb45c
4 changed files with 97 additions and 140 deletions

View File

@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
project(gamejam LANGUAGES C CXX) project(rrmlui LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -11,49 +11,32 @@ endif()
find_package(raylib REQUIRED) find_package(raylib REQUIRED)
find_package(RmlUi REQUIRED) find_package(RmlUi REQUIRED)
add_executable(gamejam add_library(rmlui_backend STATIC
src/main.cpp
src/Game.cpp
src/Application.cpp
src/Creature.cpp
src/Round.cpp
src/backend/RaylibSystemInterface.cpp src/backend/RaylibSystemInterface.cpp
src/backend/RaylibRenderInterface.cpp src/backend/RaylibRenderInterface.cpp
src/backend/RaylibInput.cpp src/backend/RaylibInput.cpp
) )
target_link_libraries(gamejam PRIVATE add_executable(${PROJECT_NAME}
src/main.cpp
)
target_link_libraries(${PROJECT_NAME} PRIVATE
raylib raylib
rmlui_backend
RmlUi::Core RmlUi::Core
RmlUi::Debugger RmlUi::Debugger
) )
target_include_directories(gamejam PRIVATE ${CMAKE_SOURCE_DIR}/src) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)
set(ASSET_DIR ${CMAKE_SOURCE_DIR}/assets) set(ASSET_DIR ${CMAKE_SOURCE_DIR}/assets)
if(EMSCRIPTEN) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
set(CMAKE_EXECUTABLE_SUFFIX ".html") COMMAND ${CMAKE_COMMAND} -E copy_directory
${ASSET_DIR} $<TARGET_FILE_DIR:${PROJECT_NAME}>/assets
target_link_options(gamejam PRIVATE COMMENT "Copying assets to build output"
"-sUSE_GLFW=3"
"-sASYNCIFY"
"-sALLOW_MEMORY_GROWTH=1"
"-sFORCE_FILESYSTEM=1"
"--preload-file=${ASSET_DIR}@assets"
# "--shell-file=${CMAKE_SOURCE_DIR}/shell.html"
) )
else() install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
add_custom_command(TARGET gamejam POST_BUILD install(DIRECTORY ${ASSET_DIR} DESTINATION bin)
COMMAND ${CMAKE_COMMAND} -E copy_directory
${ASSET_DIR} $<TARGET_FILE_DIR:gamejam>/assets
COMMENT "Copying assets to build output"
)
endif()
install(TARGETS gamejam RUNTIME DESTINATION bin)
if(NOT EMSCRIPTEN)
install(DIRECTORY ${ASSET_DIR} DESTINATION bin)
endif()

61
flake.lock generated Normal file
View File

@@ -0,0 +1,61 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1788039129,
"narHash": "sha256-pa4Q0qErvCvzCaaUph7Sm37RhR4xvPrYI8Lgz6k85+A=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d2f67949798825fe853f7c5d0492b8bf016d3f88",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"utils": "utils"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

110
flake.nix
View File

@@ -1,5 +1,5 @@
{ {
description = "Raylib + RmlUI (with android build support) dev shell"; description = "Raylib + RmlUi dev shell";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
@@ -25,13 +25,6 @@
"-DBUILD_TESTING=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 { rmlui = pkgs.stdenv.mkDerivation {
pname = "rmlui"; pname = "rmlui";
version = "master"; version = "master";
@@ -41,67 +34,6 @@
cmakeFlags = rmluiCmakeFlags ++ [ "-DBUILD_SHARED_LIBS=ON" ]; 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; [ nativeBuildTools = with pkgs; [
cmake cmake
pkg-config pkg-config
@@ -135,22 +67,6 @@
''; '';
}; };
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 { packages.default = pkgs.stdenv.mkDerivation {
pname = "rrmlui"; pname = "rrmlui";
version = "0.1.0"; version = "0.1.0";
@@ -159,32 +75,10 @@
buildInputs = nativeRuntimeDeps; buildInputs = nativeRuntimeDeps;
cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ]; cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
postInstall = '' postInstall = ''
wrapProgram $out/bin/gamejam \ wrapProgram $out/bin/rrmlui \
--prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath nativeRuntimeDeps}" --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
'';
};
} }
); );
} }

19
readme.md Normal file
View File

@@ -0,0 +1,19 @@
# RmlUi + Raylib
This project aims to create a fully featured Raylib backend and renderer for Rmlui projects.
I originally began creating this for a Game Jam project where I got the basic rendering implemented, but realized it would be nice to have as a seperate project to flesh out the rest of the features.
## Roadmap
*Rendering features (from the RmlUi render interfface documentation https://mikke89.github.io/RmlUiDoc/pages/cpp_manual/interfaces/render.html#feature-table):*
- [x] Basic rendering
- [ ] Clip Mask
- [ ] Transforms
- [ ] Layers
- [ ] Render textures
- [ ] Mask images
- [ ] Filters
- [ ] Shaders
*Backend features:*
- [x] Input handling