#!/usr/bin/env bash # Compila o Circuit Artist (lets-all-be-stupid-forever, GPL-3.0; raylib + Emscripten) do commit 1bbbf45 para o # fredygames.com, com o Emscripten 6.0.10, em vez de usar o static/ ja compilado do repositorio. # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-circuit-artist.sh # precisa tambem de cmake, make e python3 # # O tarball do commit nao traz os submodulos (freetype, json-c, msgpack-c; clip e nativefiledialog sao so da # versao desktop), entao o script baixa tambem os tarballs dos commits que o .gitmodules fixa. Mudancas nossas: # - circuit-artist/circuit-artist-fredygames.patch: o texto "Sobre" sem os links da loja, do Discord e do blog; o link # com -lidbfs.js (a pagina guarda os saves no IndexedDB); o stage_wasm_assets.py sem o font3x6.png (m3x6, de licenca # pouco clara, que o jogo nem carrega), sem o banner do Discord e sem o .aseprite; # - circuit-artist/gen-sounds.py: os oito .wav do jogo nao tem autor declarado, entao saem e entram seis sons # sinteticos nossos (dois eram nao usados: explosion.wav e s2.wav). # A pagina (play.html) e nossa, em Content/games/circuit-artist/. # # Saida: artifacts/build/circuit-artist-1bbbf45/ca_wasm.{js,wasm,data} set -euo pipefail COMMIT=1bbbf455ec96c85cc6efa3ba5f94d5c19db0f612 SHA256=814737512f85240107c01818ec97b1a2ba973c3fd8faa0264aa9d950fc46a93d FREETYPE=5a280ecde6f324de0d226261036e736e0cb49a71 FREETYPE_SHA256=23fde74d0a7a0bac2c16e4e7c07ec6283da6dca14ecdc445b0edddbaf7db8079 JSONC=a1249bfda0f6adf0363d5ab42d9ca816b3366ff2 JSONC_SHA256=2121a33f5d075b053c74981f05344569cd7cba84430145600362034b1b38923a MSGPACK=306d59d52f752388f276aa5244cdd56be3ad75e0 MSGPACK_SHA256=74d0e0b6dd0087083caa1cebe2149587aa725afd6c471d169d408c1a39fae0ab EMSCRIPTEN=6.0.10 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/circuit-artist-${COMMIT:0:7}" cache="$root/artifacts/build/cache" if ! emcc --version 2>/dev/null | head -1 | grep -q " $EMSCRIPTEN "; then [ -f "$root/artifacts/tools/emsdk/emsdk_env.sh" ] && source "$root/artifacts/tools/emsdk/emsdk_env.sh" >/dev/null 2>&1 fi emcc --version 2>/dev/null | head -1 | grep -q " $EMSCRIPTEN " || { echo "Precisa do Emscripten $EMSCRIPTEN no PATH." >&2; exit 1; } for tool in cmake make python3; do command -v "$tool" >/dev/null || { echo "Precisa do $tool no PATH." >&2; exit 1; }; done # Arquivo auxiliar: em circuit-artist/ (repositorio) ou ao lado do script (pasta de fontes do site). aux() { if [ -f "$here/circuit-artist/$1" ]; then echo "$here/circuit-artist/$1"; else echo "$here/$1"; fi; } mkdir -p "$cache" fetch() { # nome url sha256 [ -f "$cache/$1" ] || curl -fsSL --retry 4 "$2" -o "$cache/$1" echo "$3 $cache/$1" | shasum -a 256 -c - >/dev/null } fetch "circuit-artist-${COMMIT:0:7}.tar.gz" "https://github.com/lets-all-be-stupid-forever/circuit-artist/archive/$COMMIT.tar.gz" "$SHA256" fetch "freetype-${FREETYPE:0:7}.tar.gz" "https://github.com/freetype/freetype/archive/$FREETYPE.tar.gz" "$FREETYPE_SHA256" fetch "json-c-${JSONC:0:7}.tar.gz" "https://github.com/json-c/json-c/archive/$JSONC.tar.gz" "$JSONC_SHA256" fetch "msgpack-c-${MSGPACK:0:7}.tar.gz" "https://github.com/msgpack/msgpack-c/archive/$MSGPACK.tar.gz" "$MSGPACK_SHA256" rm -rf "$out" mkdir -p "$out/tree/third_party/freetype" "$out/tree/third_party/json-c" "$out/tree/third_party/msgpack-c" "$out/build" tar -xzf "$cache/circuit-artist-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 tar -xzf "$cache/freetype-${FREETYPE:0:7}.tar.gz" -C "$out/tree/third_party/freetype" --strip-components 1 tar -xzf "$cache/json-c-${JSONC:0:7}.tar.gz" -C "$out/tree/third_party/json-c" --strip-components 1 tar -xzf "$cache/msgpack-c-${MSGPACK:0:7}.tar.gz" -C "$out/tree/third_party/msgpack-c" --strip-components 1 ( cd "$out/tree" && patch -p1 < "$(aux circuit-artist-fredygames.patch)" ) python3 -I "$(aux gen-sounds.py)" "$out/tree/assets/sounds" rm "$out/tree/assets/sounds/explosion.wav" "$out/tree/assets/sounds/s2.wav" cd "$out/build" emcmake cmake ../tree -DPLATFORM=Web -DCMAKE_BUILD_TYPE=Release > cmake.log 2>&1 || { tail -30 cmake.log; exit 1; } emmake make -j"$(sysctl -n hw.ncpu 2>/dev/null || nproc)" ca_wasm > make.log 2>&1 || { tail -30 make.log; exit 1; } cp "$out/tree/static/ca_wasm.js" "$out/tree/static/ca_wasm.wasm" "$out/tree/static/ca_wasm.data" "$out/" rm -rf "$out/tree" "$out/build" shasum -a 256 "$out"/ca_wasm.*