diff options
| -rw-r--r-- | Cargo.toml | 4 | ||||
| -rw-r--r-- | Dockerfile | 51 | ||||
| -rw-r--r-- | Makefile | 23 | ||||
| -rw-r--r-- | flake.nix | 18 |
4 files changed, 33 insertions, 63 deletions
@@ -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"] @@ -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 $< $@ @@ -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; |