summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-11-17 11:31:12 -0500
committerFreya Murphy <freya@freyacat.org>2025-11-17 11:31:12 -0500
commit988bb3d9048c65e2c54d8b7e46a0e2d69e8aea13 (patch)
tree0a8cdcd1b1a45a5dd58d6229d4bbb432e07d1a0e
parentwasm support! (diff)
downloadDungeonCrawl-988bb3d9048c65e2c54d8b7e46a0e2d69e8aea13.tar.gz
DungeonCrawl-988bb3d9048c65e2c54d8b7e46a0e2d69e8aea13.tar.bz2
DungeonCrawl-988bb3d9048c65e2c54d8b7e46a0e2d69e8aea13.zip
get wasm building with just nixpkgs, remove docker
-rw-r--r--Cargo.toml4
-rw-r--r--Dockerfile51
-rw-r--r--Makefile23
-rw-r--r--flake.nix18
4 files changed, 33 insertions, 63 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 1a2ad4a..61c916d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -106,6 +106,10 @@ codegen-units = 1
panic = "abort"
strip = "symbols"
+[profile.wasm]
+inherits = "release"
+panic = "unwind"
+
[profile.small]
inherits = "release"
opt-level = "z"
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index b14aa15..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,51 +0,0 @@
-FROM debian:trixie
-
-# enable more components and update repos
-RUN apt update -y
-
-# install libraries
-RUN apt install -y \
- libasound2-dev \
- libpulse-dev \
- libwayland-dev \
- libxrandr-dev \
- libxinerama-dev \
- libxcursor-dev \
- libxi-dev \
- libxkbcommon-dev \
- libsdl2-dev \
- libclang-dev
-
-# Install build tools
-RUN apt install -y \
- rustup \
- gcc \
- g++ \
- cmake \
- git \
- xz-utils
-
-# Install emscripten
-RUN git clone https://github.com/emscripten-core/emsdk.git /emsdk
-RUN /emsdk/emsdk install latest
-RUN /emsdk/emsdk activate latest
-
-# add build user
-RUN useradd -u 1000 -m builder -d /home/builder
-USER builder
-
-# Install rust and toolchain
-RUN rustup default stable
-RUN rustup target add wasm32-unknown-emscripten
-
-# set emscripten env
-ENV RUSTFLAGS="-C panic=unwind"
-ENV EMCC_CFLAGS="-O3 -sUSE_GLFW=3 -sASSERTIONS=1 -sWASM=1 -sASYNCIFY -sGL_ENABLE_GET_PROC_ADDRESS=1 -sEXPORTED_RUNTIME_METHODS=HEAPF32,ccall,cwrap"
-ENV EMSDK=/emsdk
-ENV EMSDK_NODE=/emsdk/node/22.16.0_64bit/bin/node
-ENV PATH="${EMSDK}/upstream/bin:${EMSDK}/upstream/emscripten:${EMSDK_NODE}:${PATH}"
-
-# build the code
-VOLUME /data
-WORKDIR /data
-CMD ["cargo", "build", "--target", "wasm32-unknown-emscripten", "--release"]
diff --git a/Makefile b/Makefile
index 02714d0..5835dda 100644
--- a/Makefile
+++ b/Makefile
@@ -5,20 +5,31 @@ ASSETS_DST = $(patsubst game/www/%,dist/%,$(ASSETS_SRC))
TEST_PORT ?= 8000
-IMAGE := dungeon_crawl_builder
+EMCC_CFLAGS := -O3 \
+ -sUSE_GLFW=3 \
+ -sASSERTIONS=1 \
+ -sWASM=1 \
+ -sASYNCIFY \
+ -sGL_ENABLE_GET_PROC_ADDRESS=1 \
+ -sEXPORTED_RUNTIME_METHODS=HEAPF32,ccall,cwrap
web: dist $(ASSETS_DST)
test: web
cd dist && python3 -m http.server $(TEST_PORT)
-image:
- docker build -t $(IMAGE) .
-
dist:
- docker run --rm -it -v .:/data -v ~/.cargo:/home/builder/.cargo $(IMAGE)
+ env \
+ CC=emcc \
+ CXX=em++ \
+ AR=emar \
+ CFLAGS="$(EMCC_CFLAGS)" \
+ CXXFLAGS="$(EMCC_CFLAGS)" \
+ EMCC_CFLAGS="$(EMCC_CFLAGS)" \
+ CMAKE_INSTALL_LIBDIR=lib \
+ cargo build --target wasm32-unknown-emscripten --profile wasm
mkdir -p dist
- cp ./target/wasm32-unknown-emscripten/release/game.{js,wasm} dist
+ cp ./target/wasm32-unknown-emscripten/wasm/game.{js,wasm} dist
dist/%: game/www/%
cp -r $< $@
diff --git a/flake.nix b/flake.nix
index fc49406..10f9fea 100644
--- a/flake.nix
+++ b/flake.nix
@@ -41,14 +41,11 @@
packages = with pkgs;
[
# rust
- rustc
- rustfmt
- rust-analyzer
- cargo
- cargo-flamegraph
- clippy
+ rustup
# web
+ emscripten
python3
+ nodejs
# raylib
cmake
clang
@@ -64,10 +61,19 @@
else
export SDL_VIDEODRIVER=x11
fi
+
+ # setup wasm
+ export PATH="$EMSDK/share/emscripten:$PATH"
+ export C_INCLUDE_PATH="$EMSDK_SYSROOT/include:$C_INCLUDE_PATH"
+ export EM_CACHE="$HOME"/.emscripten_cache
'';
LD_LIBRARY_PATH = lib.makeLibraryPath libs;
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
+
+ EMSDK = "${pkgs.emscripten}";
+ EMSDK_NODE = "${pkgs.nodejs}/bin/node";
+ EMSDK_SYSROOT = "${pkgs.emscripten}/share/emscripten/cache/sysroot";
};
formatter = pkgs.alejandra;