GERBEN'S BLOG

Recompiler ScummVM pour une vieille tablette Android

Je n’aime pas me débarasser de mon ancien matériel s’il fonctionne encore. Cependant, après quelques années, les mises à jour se font de plus en plus rare et parfois, même l’offre logicielle devient inaccessible.

J’ai un cas concret à l’esprit : ma tablette Android Acer Iconia A500.

Acer Iconia A500

Elle m’a rendu de nombreux services (ainsi qu’aux enfants pour voir des dessins animés en voiture :)), mais n’est désormais plus maintenue et il est devenu difficile de trouver des logiciels qui tournent dessus. L’heure de la reconversion est donc arrivée.

J’avais d’abord pensé à extraire l’écran pour l’utiliser avec un Raspberry Pi, mais au final, elle fonctionne encore, à quoi bon la désosser ?

Cette tablette a plusieurs avantages :

  • un grand écran offrant une très bonne lisibilité
  • un port USB Host permettant de brancher clavier, souris, clé USB …
  • un port micro HDMI permettant une sortie vidéo
  • un slot micro SD pour étendre la capacité de stockage

Une nouvelle vie, pourquoi/comment ?

Parmi les choses que j’aimerais faire tourner dessus, j’ai 2 applications dans le viseur :

  • ScummVM (abordé dans cet article)
  • Retroarch (abordé dans un futur post)

Cependant, plusieurs problèmes se posent du fait de l’obsolescence de la plateforme. En effet :

  1. La tablette est bloquée à la version Ice Cream Sandwich 4.0.3 du firmware Android
  2. Les applications utilisant le développement natif (NDK) d’Android ne supportent plus le processeur de la tablette (Tegra 2) sauf si compilé explicitement pour celui-ci.

Pour le premier point j’ai suivi un tuto en ligne pour installer Android 4.4.4 KitKat sur la tablette (Attention, il y a toujours un risque de briquer la tablette durant ce genre d’opération).

Cortex-A9, extensions Neon et VFP

ARM CPU icon Ce processeur est la 2eme génération du SoC Tegra. Il dispose d’un CPU 32 bits ARM Cortex-A9 double coeur qui ne supporte pas les extensions SIMD NEON. Ce sont justement ces extensions qui posent problème, car tous les processeurs récents supportant celles-ci, les NDKs récents les intègrent dans le binaire compilé. Il existe heureusement des solutions via la modification de flags de compilation.

ScummVM

J’étais assez frustré en constatant que les dernières versions de ScummVM plantaient au lancement, je me suis donc dit que j’allais le recompiler.

Voici les différentes étapes que j’ai appliquées.

Checkout

S’agissant d’un build android, j’ai effectué un checkout de la branche branch-2-2-1-android des sources :

git clone https://github.com/scummvm/scummvm
cd scummvm
git checkout branch-2-2-1-android

J’ai aussi téléchargé les dépendances précompilées utilisées par le code : http://sourceforge.net/projects/scummvm/files/build/3rd-android-4.tar.bz2/download

Configuration du build

En suivant les instructions du site (https://wiki.scummvm.org/index.php/Compiling_ScummVM/Android), j’ai configuré le build Android avec la commande suivante, pointant notamment vers les dépendances téléchargées :

./configure --host=android-arm-v7a --with-jpeg-prefix=/Users/gerben/src/AndroidLibs/jpeg8d-build --with-png-prefix=/Users/gerben/src/AndroidLibs/3rd-android-4-armeabi-v7a-release --with-tremor-prefix=/Users/gerben/src/AndroidLibs/3rd-android-4-armeabi-v7a-release --with-mad-prefix=/Users/gerben/src/AndroidLibs/3rd-android-4-armeabi-v7a-release

A noter : le host android-arm-v7a qui correspond à un build android ARM 32 bits.

Prise en compte des spécificités du CPU Cortex A9

La subtilité de configuration a lieu maintenant : le fichier de configuration généré permet de produire un build comportant des instructions à virgule flottante incompatibles avec le Cortex A9.

Ces extensions “Vector Floating Point” des CPUs ARM sont décrites ici : https://en.wikipedia.org/wiki/ARM_architecture#Floating-point_(VFP)

En l’occurrence, pour fonctionner avec notre CPU, il faut utiliser les instructions référencées sous le nom VFPv3-D16.

Pour les utiliser, il faut modifier le fichier config.mk généré pour modifier la ligne CXXFLAGS en remplaçant :

-mfpu=vfp

par :

-mfpu=vfpv3-d16

Il ne reste plus qu’à lancer la compilation :

make

Attendre un peu … installer le fichier .apk obtenu sur la tablette et Enjoy !!!

Secret of the Monkey Island on Acer Iconia A500

Ah … Secret of the Monkey Island … tellement de bons souvenirs 😀.