#!/usr/bin/env bash # Compila o Coric's Quest (RPG de console em 2D de Tung Nguyen, MIT; Rust + Miniquad para wasm32-unknown-unknown) a partir do commit # 215476b de github.com/tung/corics-quest, como o "task wasm-site" do autor: cargo build --release --locked --target # wasm32-unknown-unknown (Cargo.lock do autor, Rust 1.92.0 de artifacts/tools/rustup). Imagens, musicas e fases entram no .wasm por # include_bytes!. A pagina (corics-quest/index.html + start.js) e nossa, com CSP sem rede externa; os JS do Miniquad (gl.js), do # quad-snd (audio.js) e do sapp-jsutils vem das caixas do crates.io ja conferidas pelo Cargo.lock, e o quad-storage.js do commit # a359374 de optozorax/quad-storage (o da versao 0.1.2 do plugin, a mesma do quad-storage-sys 0.1.0). # # Mudancas (corics-quest/patch.py): a fonte bitmap hp-100lx-6x8.png, sem credito nem licenca, e trocada por uma gerada de Spleen 5x8 # (BSD-2-Clause) por corics-quest/make-font.py; as chaves do save e das opcoes no localStorage levam o prefixo "corics-quest.". # # src/FredGames.Bundler/Builds/build-corics-quest.sh # # Saida: artifacts/build/corics-quest-215476b/{corics-quest-215476b-dist.tar.gz,licenses.txt}; o tar.gz tem que sair igual em dois builds. set -euo pipefail COMMIT=215476b69b39080ecd287704d78ced6f0fffbe68 SHA256=953a8e563434e66b33d06fd9913fb8ca01baa52f9236e5411f06f6ef194d9c07 SPLEEN_URL=https://raw.githubusercontent.com/fcambus/spleen/2.1.0/spleen-5x8.bdf SPLEEN_SHA256=31cc2fc353e59e2ec99fd2d7c34962c99a9ad56ac4de39555436be492f6dfb24 SPLEEN_LICENSE_URL=https://raw.githubusercontent.com/fcambus/spleen/2.1.0/LICENSE SPLEEN_LICENSE_SHA256=3cb3f3f5a795547d329828df881c80d923bfc75f65065c44ffa703ad78c678bd QS_COMMIT=a359374b4ced54ba6b272ca3f9e40d1d9051211e QS_SHA256=8f6a4e2bf818d00685d6d1ef1010ec9bb1c84a30401c253b353c09dec6c883d4 RUST=1.92.0 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/corics-quest-${COMMIT:0:7}" cache="$root/artifacts/build/cache" export RUSTUP_HOME="$root/artifacts/tools/rustup" CARGO_HOME="$root/artifacts/tools/cargo" export PATH="$CARGO_HOME/bin:$PATH" mkdir -p "$cache" fetch() { # url arquivo sha256 if [ ! -f "$cache/$2" ]; then curl -fsSL --retry 4 "$1" -o "$cache/$2.partial" && mv "$cache/$2.partial" "$cache/$2" fi echo "$3 $cache/$2" | shasum -a 256 -c - > /dev/null } fetch "https://github.com/tung/corics-quest/archive/$COMMIT.tar.gz" "corics-quest-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "$SPLEEN_URL" spleen-2.1.0-5x8.bdf "$SPLEEN_SHA256" fetch "$SPLEEN_LICENSE_URL" spleen-2.1.0-LICENSE "$SPLEEN_LICENSE_SHA256" fetch "https://raw.githubusercontent.com/optozorax/quad-storage/$QS_COMMIT/js/quad-storage.js" "quad-storage-${QS_COMMIT:0:7}.js" "$QS_SHA256" rm -rf "$out" mkdir -p "$out/tree" "$out/dist" tar -xzf "$cache/corics-quest-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 python3 -I "$here/corics-quest/make-font.py" "$cache/spleen-2.1.0-5x8.bdf" "$out/font-6x8.png" python3 -I "$here/corics-quest/patch.py" "$out/tree" "$out/font-6x8.png" cd "$out/tree" export RUSTFLAGS="--remap-path-prefix=$out/tree=/src --remap-path-prefix=$CARGO_HOME=/cargo" cargo "+$RUST" build --release --locked --target wasm32-unknown-unknown > "$out/cargo.log" 2>&1 || { tail -30 "$out/cargo.log"; exit 1; } cp target/wasm32-unknown-unknown/release/corics-quest.wasm "$out/dist/" reg="$(ls -d "$CARGO_HOME"/registry/src/index.crates.io-*/miniquad-0.4.2 | head -1)" reg="$(dirname "$reg")" cp "$reg/miniquad-0.4.2/js/gl.js" "$reg/quad-snd-0.2.8/js/audio.js" "$reg/sapp-jsutils-0.1.5/js/sapp_jsutils.js" "$out/dist/" cp "$cache/quad-storage-${QS_COMMIT:0:7}.js" "$out/dist/quad-storage.js" cp "$here/corics-quest/index.html" "$here/corics-quest/start.js" "$out/dist/" # licencas das bibliotecas que entram no .wasm (texto dos arquivos de licenca de cada caixa) e da fonte { for c in adler-1.0.2 bitflags-1.3.2 cfg-if-1.0.0 crc32fast-1.3.2 fdeflate-0.3.4 flate2-1.0.28 itoa-1.0.10 lazy_static-1.4.0 \ miniquad-0.4.2 miniserde-0.1.36 miniz_oxide-0.7.1 png-0.17.11 quad-snd-0.2.8 quad-storage-0.1.3 quad-storage-sys-0.1.0 \ ryu-1.0.16 sapp-jsutils-0.1.5 simd-adler32-0.3.7; do echo "=== $c" for f in "$reg/$c"/LICENSE* "$reg/$c"/COPYING*; do [ -f "$f" ] && { echo "--- $(basename "$f")"; cat "$f"; echo; }; done true done echo "=== quad-storage.js (optozorax/quad-storage, $QS_COMMIT): LICENSE-MIT" curl -fsSL "https://raw.githubusercontent.com/optozorax/quad-storage/$QS_COMMIT/LICENSE-MIT" echo echo "=== Spleen 5x8 2.1.0 (fonte): LICENSE" cat "$cache/spleen-2.1.0-5x8.bdf" > /dev/null cat "$cache/spleen-2.1.0-LICENSE" } > "$out/licenses.txt" find "$out/dist" -exec touch -t 202611060000 {} + ( cd "$out" && find dist -type f | LC_ALL=C sort > files.txt \ && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf - -T files.txt \ | gzip -n -9 > "corics-quest-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$out/tree" ls -l "$out/corics-quest-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/corics-quest-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"