Entretien avec les développeurs de SaberMod & Hyper Toolchains

Pour compiler un projet Android comme un noyau ou une ROM, les développeurs doivent utiliser une chaîne d’outils. Selon elinux.org, une chaîne d’outils est un ensemble d’outils de développement de logiciels distincts liés (ou chaînés) entre eux par des étapes spécifiques telles que GCC, binutils et glibc (une partie de la chaîne d’outils GNU). Les chaînes d'outils peuvent contenir un débogueur ou un compilateur pour un langage de programmation spécifique, tel que C ++ ou autre. Très souvent, la chaîne d’outils utilisée pour le développement intégré est une chaîne croisée, ou plus communément appelée compilateur croisé. Tous les programmes (tels que GCC) s'exécutent sur un système hôte d'une architecture spécifique (telle que x86), mais produisent un code binaire (exécutables) pour s'exécuter sur une architecture différente (par exemple, ARM).

La chaîne d'outils la plus couramment utilisée est GCC, initialement publiée il y a presque 20 ans. Un code GCC légèrement modifié est utilisé par Google au cours du processus de création d’AOSP. Bien que le GCC de Google soit considéré comme la chaîne d’outils la plus stable, il a des concurrents assez décents comme Linaro et SaberMod. Ces projets sont connus pour améliorer de manière significative les performances globales du système sur de nombreux périphériques. Jetons un coup d'oeil pour voir le fond de ces projets.

L’organisation Linaro a été créée au milieu de l’année 2010 et ses développeurs ont presque immédiatement commencé à travailler sur de nombreux projets, y compris des chaînes d’outils pour ARM basées sur GCC. Les versions d'Android compilées avec Linaro ont commencé à apparaître quelques mois plus tard. Depuis la création du groupe Linaro, les utilisateurs l'ont loué pour ses améliorations de performances décentes et sa réactivité globale. Linaro utilise ses propres solutions et est constamment mis à jour. Vous pouvez télécharger la dernière version de la chaîne d’outils directement à partir de la page Web.

Quelques années plus tard, en 2013, un développeur nommé Paul Beeler a créé le projet SaberMod. Initialement, le projet était utilisé sur la ROM SaberMod pour le modèle WiFi du Nexus 7 (2013). Cela s'est poursuivi sur le Nexus 4 et le Nexus 5 grâce aux dons des utilisateurs. Les chaînes d'outils sont basées sur GNU GCC 4.8, 4.9 et 5.0 avec les correctifs AOSP transférés en avant dans GNU GCC. SaberMod fournit également des fonctionnalités d'optimisation supplémentaires, contrairement à la chaîne d'outils de Google, qui offre des options pour quelques modifications dans la ROM elle-même afin d'ajouter davantage de performances, telles que les optimisations de transformation de boucles en graphite. SaberMod suit les autres utilitaires de GNU dans les composants source de la chaîne d'outils qui sont généralement plus à jour que les chaînes d'outils AOSP ou Linaro, et suit presque toujours les branches de développement de GNU GCC pour les derniers correctifs et corrections de bugs. L’écosystème de chaînes d’outils de SaberMod est très différent de l’AOSP. Il utilise des scripts complexes pour fournir des chaînes d’outils rapides et actualisées. D'autres sources de chaînes d'outils, telles que le référentiel de construction de chaînes d'outils basé sur AOSP, ont été fortement modifiées pour fonctionner en faveur de la manière dont les chaînes d'outils SaberMod sont produites. J'ai approché des développeurs d'outils pour poser quelques questions.

Si vous pouviez décrire SaberMod en un mot, de quoi s'agirait-il et pourquoi?

Joe (frap129) : Optimisation. Je dis cela parce que c'est l'objectif principal de notre (l'équipe SaberMod), pas nécessairement la vitesse. Bien que l’optimisation puisse fournir beaucoup de performances et d’accélération de la vitesse, elle peut également permettre de réduire le code ou d’ajuster des réglages spécifiques qui permettent une meilleure utilisation du matériel d’un périphérique.

Un ensemble d'outils n'est pas particulièrement facile à développer. Pourriez-vous me dire quels langages et outils sont nécessaires pour compiler un projet comme SaberMod?

Joe : Beaucoup de programmes sont nécessaires avant même de construire une chaîne d'outils, comme avec Android. Des choses comme bison, libpython-dev, les programmes que vous voyez seulement dans un guide sur la configuration d’une machine de compilation pour compiler une ROM puis l’oublier. De plus, comme pour Android, de nombreux dépôts et projets sont nécessaires, le code principal GCC, BinUtils, GDB, MPFR et MPC, est le strict minimum, mais pour des fonctionnalités et des performances supplémentaires, nous ajoutons d’autres projets et bibliothèques tels que GMP, CLooG, ISL, OSL, etc. et Python. Cela ressemble probablement à un non-sens, mais pensez à ces éléments comme le dossier externe dans la source de construction d'Android, les éléments à l'arrière-plan qui le font fonctionner.

Adin (YoshiShaPow) : En ce qui concerne les langues, le développement n'exige pas la maîtrise complète d'un langage de programmation (même si cela aide beaucoup). Une simple connaissance de la structure du code et de la syntaxe de base peut aider une personne à produire un excellent travail!

Pourriez-vous nous dire pourquoi vous avez choisi les chaînes d'outils? Et quelle a été la situation la plus difficile que vous ayez rencontrée jusqu'à présent?

Paul : Initialement, je m'intéressais à la chaîne d'outils Linaro, mais j'ai constaté que de nombreux bugs n'étaient pas présents dans les chaînes d'outils d'AOSP. Il a donc été décidé de créer une nouvelle chaîne d’outils basée strictement sur les sources de la chaîne d’instruments GNU GCC et AOSP, avec des correctifs Linaro ROM pour l’optimisation de Jellybean. Ainsi, SaberMod est né. Plus de modifications dans les chaînes d'outils et la source du système Android est venu dans les années suivantes. La chose la plus difficile a été de rendre la compilation des chaînes d’outils semblable à celle d’AOSP et de déterminer quelles versions des utilitaires GNU (binutils, gdb, etc.) étaient nécessaires pour la compilation correcte.

SaberMod n'est pas le seul projet sur lequel vous travaillez. Pouvez-vous nous parler de Hyper Toolchains?

Joe : Hyper Toolchains était à l’origine une page que j’avais créée sur GitHub pour aider à organiser mes propres chaînes d’outils. Elles ne sont donc pas simplement encombrées et jettées avec le reste de mon dépôt, mais après avoir commencé à jouer de plus en plus avec des chaînes d’outils, je Nous avons fini par créer des éléments assez différents de vos chaînes d’outils standard SaberMod, Linaro ou AOSP GCC. Le mélange des aspects de Linaro et de SaberMod a élargi la gamme de choses que les développeurs pourraient faire uniquement avec des chaînes d’outils. C'est alors que j'ai décidé de créer un fil conducteur afin que les développeurs puissent mieux contrôler la rapidité et la finesse de leurs projets, et pas seulement la rapidité et la réactivité de SaberMod ou la finesse de Linaro.

SaberMod et Hyper Toolchains sont développés par une équipe de développeurs. Pouvez-vous tous nous parler un peu de vous?

Paul : Mon intérêt pour Android a commencé avec le G1 il y a près de 4 ans. Je n'avais aucune expérience en codage. Je m'intéressais à l'open source mais je ne savais pas par où commencer pour créer une ROM, un noyau ou quoi que ce soit d'autre. J'ai commencé à expérimenter avec les scripts Android bash pour apps2sdext natif basé sur un travail de développeurs de firerat. Cela permettait plus de stockage pour les applications qui était très limité à l'époque (500 Mo pour le système et les applications). Ensuite, j'ai continué ceci pour le Evo shift 4g jusqu'au Nexus 7, lorsque le mod n'était plus nécessaire en raison de restrictions de stockage. J'ai également commencé à développer le noyau avec l'Evo Shift 4G en incluant d'autres programmateurs de disque, tels que BFS, que personne n'avait encore créés pour le périphérique à ce moment-là. J'ai poursuivi le développement du noyau sur le Nexus 7. Mais mon développement du noyau est toujours considéré comme faible, si ce n'est de modifier des éléments ici et là pour que les noyaux soient compilés avec des chaînes d'outils SaberMod et des optimisations. Je possède actuellement un Nexus 5.

Joe : Eh bien, j'ai commencé à travailler sur le développement il y a un peu plus de 2 ans sans aucune expérience en codage, Linux ou Android. En tant qu'adolescent qui venait de passer d'un vieil iPod jailbreaké à un Nexus 7 de première génération, j'ai décidé de jouer avec Android autant que je pouvais, finissant par compiler mes propres versions nocturnes avec des applications, des scripts et des mods ajoutés. Après un moment, je me suis arrêté lorsque mon Nexus 7 s'est brisé tragiquement (RIP en morceaux). Une fois que j'ai économisé suffisamment pour obtenir un GS3 usagé, j'ai téléchargé la dernière source, je me suis mis à travailler avec une source ROM et j'ai commencé à créer beaucoup de logiciels sur mon PC. J'ai récemment acheté un OnePlus One, ce qui facilite grandement le développement et me donne plus de motivation.

Adin : Mon premier projet Android a été créé au moment où j'ai eu une commotion cérébrale et que je n’étais plus à l’école en avril 2014. Lorsque j’ai enfin eu l’opportunité de passer à l’électronique, j’ai décidé d’essayer un projet androïde. noyau pour le Moto G. Je n'avais aucune connaissance du codage ni de Linux à l'époque. Certaines personnes disent que c'est un fou pour un jeune de 15 ans de pouvoir faire ces choses, mais je vois cela comme une motivation pour améliorer. Avec cela, Joe et moi avons créé une série de noyaux TGM-hybrides. Je peux aussi résoudre un cube Rubik 3 × 3 en 15 secondes en moyenne. Mon pilote quotidien actuel est le OnePlus One.

Merci pour votre temps et bonne chance dans vos projets!

SaberMod et Hyper Toolchains sont disponibles sur et dans GitLab. Assurez-vous d'y jeter un coup d'œil si vous envisagez de publier votre propre ROM personnalisée. Quelle est votre chaîne d'outils préférée et pourquoi? Partagez votre opinion dans les commentaires ci-dessous.