Files
mice/ARM_APPIMAGE_PLAN.md
T
John Doe 02202e4d3d Add new PNG images for clean and preview outputs
- Added `image_clean.png` to the output directory for the clean image representation.
- Added `image_clean_preview.png` for the preview of the clean image.
- Introduced `image_svg_clean.png` for the SVG clean image representation.
2026-03-27 23:40:27 +01:00

77 lines
2.9 KiB
Markdown

# Piano di distribuzione ARM con AppImage
Questo repository ora e pronto per essere portato dentro un bundle AppImage senza dipendere dalla directory corrente e senza scrivere nel filesystem montato in sola lettura dell'AppImage.
## Stato attuale
- Le risorse di runtime vengono risolte a partire dal root del progetto tramite `MICE_PROJECT_ROOT`.
- I dati persistenti (`scores.txt`, `user_profiles.json`) vengono scritti in una directory utente persistente:
- `MICE_DATA_DIR`, se impostata.
- altrimenti `${XDG_DATA_HOME}/mice`.
- fallback: `~/.local/share/mice`.
- E presente uno scaffold di packaging in `packaging/`.
## Strategia consigliata
1. Costruire l'AppImage su una macchina `aarch64` reale o in una chroot/container ARM.
2. Creare dentro `AppDir` un ambiente Python copiato localmente con `python -m venv --copies`.
3. Installare le dipendenze Python da `requirements.txt` dentro quel Python locale.
4. Copiare il gioco e gli asset in `AppDir/usr/share/mice`.
5. Bundlare le librerie native richieste da SDL2 e dai wheel Python dentro `AppDir/usr/lib`.
6. Usare `AppRun` per esportare `LD_LIBRARY_PATH`, `MICE_PROJECT_ROOT` e `MICE_DATA_DIR` prima del lancio di `rats.py`.
7. Generare il file finale con `appimagetool`.
## Perche costruire nativamente su ARM
- Un AppImage deve contenere binari della stessa architettura del target.
- `PySDL2`, `numpy` e `Pillow` portano con se librerie native o dipendenze native.
- Il cross-build da `x86_64` a `aarch64` e possibile, ma aumenta molto il rischio di incompatibilita su `glibc`, `libSDL2` e wheel Python.
## Comando di build
Da una macchina Linux `aarch64` con `python3`, `rsync`, `ldd`, `ldconfig` e `appimagetool` disponibili:
```bash
./packaging/build_appimage_aarch64.sh
```
Output previsto:
- `dist/AppDir`
- `dist/Mice-aarch64.AppImage`
## Dipendenze host richieste al builder ARM
Serve un sistema di build ARM con almeno:
- `python3`
- `python3-venv`
- `rsync`
- `glibc` userland standard
- `appimagetool`
- librerie di sviluppo/runtime installate sul builder, in particolare:
- `libSDL2`
- `libSDL2_ttf`
## Test minimi da fare sul target ARM
1. Avvio del gioco da shell.
2. Caricamento font e immagini.
3. Riproduzione audio WAV.
4. Salvataggio punteggi in `~/.local/share/mice/scores.txt`.
5. Creazione e lettura profili in `~/.local/share/mice/user_profiles.json`.
6. Cambio livello da `assets/Rat/level.dat`.
## Rischi residui
- La relocazione di un venv copiato dentro AppImage e pratica, ma va verificata sul target reale.
- Se il target ARM ha un userland molto vecchio, conviene costruire l'AppImage su una distro ARM con `glibc` piu vecchia del target.
- Se emergono problemi di relocazione del Python del venv, il passo successivo corretto e passare a un Python relocatable tipo `python-build-standalone` mantenendo invariato il launcher.
## File introdotti
- `runtime_paths.py`
- `packaging/appimage/AppRun`
- `packaging/appimage/mice.desktop`
- `packaging/build_appimage_aarch64.sh`