Introduction
Le jeu Principia a été initialement conçu pour fonctionner sur les téléphones de 2012, il devrait donc pouvoir fonctionner sur du matériel très ancien, à condition que celui-ci supporte au moins OpenGL 2.0. L'objectif est de rendre Principia compatible avec Windows XP en tant que projet open source.
Contexte Technique
Principia utilise SDL pour la prise en charge multi-plateforme et a très peu de dépendances. SDL prend toujours en charge Windows XP, et Principia fonctionnait déjà sur cette version de Windows. Le principal problème réside dans la chaîne d'outils et certaines dépendances qui ont évolué vers de nouvelles versions de Windows.
La version Windows de Principia ne prend officiellement en charge que la compilation avec une chaîne d'outils mingw-w64 pour Windows. Cependant, la chaîne d'outils LLVM basée sur mingw-w64 actuellement utilisée n'est pas adaptée pour cibler Windows XP en raison de la liaison avec UCRT et d'autres problèmes de compatibilité.
Analyse et Implications
Pour résoudre ce problème, il a été décidé de construire sa propre chaîne d'outils. La construction d'une chaîne d'outils personnalisée permet de cibler spécifiquement Windows XP et de garantir la compatibilité. Cela implique de compiler GCC, binutils, mingw-w64, etc.
Un problème a été rencontré lors de la construction de la bibliothèque GMP due à des modifications dans les normes C et à la compatibilité avec GCC 15+. Un paramètre pour utiliser le standard C99 a résolu ce problème.
Une fois la chaîne d'outils construite, il a été vérifié que les bibliothèques standard de C++ ne contiennent pas de dépendances qui casseraient la compatibilité avec Windows XP. Une dépendance dans libstdc++ a été trouvée et résolue à l'aide d'un patch existant.
Perspective
Avec cette nouvelle chaîne d'outils, il est maintenant possible de compiler des binaires qui devraient fonctionner sur Windows XP. Cela ouvre la voie à la création d'une version de Principia compatible avec cette ancienne version de Windows. Il faudra surveiller les mises à jour futures de la chaîne d'outils et des dépendances pour maintenir cette compatibilité.