#!/usr/bin/env bash # Instala o BlocksDS 1.25.0 (SDK de homebrew de Nintendo DS: libnds, Maxmod, DSWiFi, Nitro Engine...) e o # gcc 16.2.0 do Wonderful Toolchain em artifacts/tools/wonderful-root/opt/wonderful (macOS Apple Silicon), # tudo por arquivo e sha256 (os repositorios sao "rolling": o que muda de lugar e o banco de dados, nao os # pacotes). Rodar uma vez; o env.sh deste diretorio usa o resultado. # # O instalador oficial quer /opt/wonderful (root): aqui o wf-pacman roda de dentro da pasta do toolchain, que # ele trata como raiz, e os binarios (que apontam para /opt/wonderful/lib/libzstd) sao religados para a copia # local com install_name_tool + codesign. # # src/FredGames.Bundler/Builds/blocksds/install-toolchain.sh set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" base="${BLOCKSDS_ROOT:-$root/artifacts/tools/wonderful-root}" wf="$base/opt/wonderful" WF=https://wonderful.asie.pl BS=https://blocksds.skylyrac.net/packages/rolling/darwin/aarch64 BOOT_SHA=c5a10479a3da112e597ba9e31e0be57fef9a9d22d0cbf6f7cf185264a5d9c586 PACKAGES=( "$WF/packages/rolling/darwin/aarch64/runtime-zstd-1.5.7-3-aarch64.pkg.tar.xz 395b2e2a085ef4a0396ee1a3d068161a22a99bc1df91a27dc3fee9dd649ed9be" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-binutils-2.47-1-aarch64.pkg.tar.xz 04adfa39e6d65f9095b102aee5fd85c7754b837bad4e7389b9deada8021776de" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-gcc-1~16.2.0.r229124.be93d9d35bf-1-aarch64.pkg.tar.xz 2792de347109d758d7b91ee4cbd327beaf5bf4c1f4fd5fd06178549695942cb6" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-gcc-libs-1~16.2.0.r229124.be93d9d35bf-1-aarch64.pkg.tar.xz 1125425c5b22e851f87ed1d711ad835f84a6a626b7da3a0c274f7cfa75219f46" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-picolibc-generic-1.8.13.r26367.770d86889-1-any.pkg.tar.xz 6182b3db3750644bb0acf76ebc4e6c71e32d46ac57859857d21e9efe39662c0d" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-libstdcxx-picolibc-16.2.0.r229124.be93d9d35bf-1-any.pkg.tar.xz fc9a01673f955b3ea8feadb030972a911e582cd9277d1fa433a20a31fad2fb7b" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-zlib-1.4-1-any.pkg.tar.xz 41822d0b7f3bbf5cdf5dd3973d2a8a1ae6c323e432a902b62a7397bad96870eb" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-libpng16-1.6.59-1-any.pkg.tar.xz 229295d7f8e8cced98ef8f8bede4dbae4bd83b7b96f4c3dad513fa00f67a28e6" "$WF/packages/rolling/darwin/aarch64/toolchain-gcc-arm-none-eabi-freetype-2.14.3-2-any.pkg.tar.xz 4c2f04dda3f387fbab0f179e38943d03e7114459689fdc61760fdf2226677600" "$BS/blocksds-toolchain-1.25.0-1-aarch64.pkg.tar.xz 5f27facec64e58ab2eb03803ee02c499a2736056c701ab5051ea43b55bcf548a" "$BS/blocksds-nitroengine-0.16.0-1-any.pkg.tar.xz d0df0d97d81d41b01f6181f6d5c3816b24936a2c9bce97d8552830d8ce6960ce" "$BS/blocksds-nflib-1.1.13-1-any.pkg.tar.xz 7cebfafc14dae56996c5946254e194f529754a403a15ebceeed2a0bc9f1164e7" "$BS/blocksds-libdsf-0.2.0-1-any.pkg.tar.xz c43b800321577258d830b781600f9a8ee42e036ae3776d0c2e3935b15be2b1ce" "$BS/blocksds-mbedtls-3.6.4-2-any.pkg.tar.xz 26a31f99423e25f01e3c81c07df4afd44b4a587e05adf8825b1bbd5998acd8aa" "$BS/blocksds-libcurl-8.16.0-2-any.pkg.tar.xz 524feb3bb18da367027379483aca95ce911fba1acc024811fceae050c168b4ed" ) if [ -x "$wf/thirdparty/blocksds/core/tools/ndstool/ndstool" ]; then echo "BlocksDS ja instalado em $wf" exit 0 fi mkdir -p "$base/opt" "$base/cache" boot="$base/cache/wf-bootstrap-darwin-aarch64.tar.gz" [ -f "$boot" ] || curl -fsSL "$WF/bootstrap/wf-bootstrap-darwin-aarch64.tar.gz" -o "$boot" echo "$BOOT_SHA $boot" | shasum -a 256 -c - rm -rf "$wf"; mkdir -p "$wf" tar -xzf "$boot" -C "$wf" files=() for entry in "${PACKAGES[@]}"; do url="${entry% *}"; sha="${entry##* }" file="$base/cache/$(basename "$url")" [ -f "$file" ] || curl -fsSL "$url" -o "$file" echo "$sha $file" | shasum -a 256 -c - >/dev/null files+=("$file") done # -U com arquivos locais: o banco do repositorio darwin do Wonderful nao lista o gcc, entao nada vem por nome. "$wf/bin/wf-pacman" -U --noconfirm --nodeps "${files[@]}" >/dev/null # Religa os binarios a libzstd desta copia e assina de novo (o macOS mata binario com a assinatura quebrada). n=0 while IFS= read -r f; do file "$f" | grep -q Mach-O || continue libs="$(otool -L "$f" 2>/dev/null | awk '/\/opt\/wonderful\/lib\//{print $1}')" [ -n "$libs" ] || continue for lib in $libs; do install_name_tool -change "$lib" "$wf/lib/$(basename "$lib")" "$f"; done codesign --force -s - "$f" 2>/dev/null n=$((n + 1)) done < <(find "$wf/toolchain" "$wf/thirdparty" -type f -perm +111) echo "BlocksDS $(cat "$wf/thirdparty/blocksds/core/version.txt") instalado em $wf ($n binarios religados)"