Intervista con gli sviluppatori di SabreMod e Hyper Toolchains

Per compilare qualsiasi progetto Android come un kernel o una ROM, gli sviluppatori devono utilizzare una toolchain. Come per elinux.org, una toolchain è un insieme di distinti strumenti di sviluppo software che sono collegati (o concatenati) tra loro da fasi specifiche come GCC, binutils e glibc (una parte della GNU Toolchain). Le toolchain possono contenere un debugger o un compilatore per un linguaggio di programmazione specifico come C ++ o altro. Abbastanza spesso, la toolchain utilizzata per lo sviluppo integrato è una cross toolchain, o più comunemente conosciuta come cross-compilatore. Tutti i programmi (come GCC) vengono eseguiti su un sistema host di un'architettura specifica (come x86) ma producono codice binario (eseguibili) per l'esecuzione su un'architettura diversa (ad esempio ARM).

La toolchain più comunemente usata è GCC, inizialmente pubblicato circa 20 anni fa. Un GCC leggermente modificato viene utilizzato da Google durante il processo di creazione di AOSP. Mentre il GCC di Google è considerato la toolchain più stabile in circolazione, ha alcuni concorrenti abbastanza decenti come Linaro e SabreMod. Questi progetti sono noti per aumentare significativamente le prestazioni complessive del sistema su molti dispositivi. Diamo una rapida occhiata per vedere lo sfondo di questi progetti.

L'organizzazione Linaro è stata fondata a metà del 2010 e quasi immediatamente i suoi sviluppatori hanno iniziato a lavorare su molti progetti, tra cui toolchain basati su GCC per ARM. Le build Android compilate con Linaro hanno iniziato a comparire pochi mesi dopo. Sin dalla fondazione del gruppo Linaro, gli utenti lo hanno elogiato per miglioramenti decenti delle prestazioni e rapidità complessiva. Linaro utilizza le proprie soluzioni e viene costantemente aggiornato. Puoi scaricare la versione più recente della toolchain direttamente dalla pagina web.

Qualche anno dopo, nel 2013, uno sviluppatore di nome Paul Beeler ha creato il progetto SabreMod. Inizialmente il progetto è stato utilizzato sulla ROM SaberMod per il modello WiFi Nexus 7 (2013). Ciò è continuato su Nexus 4 e Nexus 5 attraverso l'aiuto delle donazioni degli utenti. Le toolchain si basano su GNU GCC 4.8, 4.9 e 5.0 con patch AOSP trasmesse in avanti su GNU GCC. SaberMod offre anche funzionalità di ottimizzazione aggiuntive a differenza della toolchain di Google, che offre opzioni per alcune modifiche nella stessa ROM per aggiungere ulteriori miglioramenti delle prestazioni, come le ottimizzazioni della trasformazione del loop di grafite. SabreMod tiene traccia delle altre utility di GNU nei componenti sorgente della toolchain che sono generalmente più aggiornate rispetto alle toolchain AOSP o Linaro, e quasi sempre tiene traccia dei rami di sviluppo di GNU GCC per le ultime patch e correzioni di bug. L'ecosistema di toolchain di SabreMod è molto diverso da AOSP, utilizzando script complessi per fornire toolchain rapidi e aggiornati. Altre fonti di toolchain come il repository di build di toolchain basato su AOSP sono state pesantemente modificate per funzionare a favore del modo in cui vengono prodotte le toolchain SaberMod. Ho contattato alcuni sviluppatori di toolchain per porre alcune domande.

Se potessi descrivere SabreMod in una parola, quale sarebbe e perché?

Joe (frap129) : ottimizzazione. Lo dico perché è l'obiettivo principale del nostro team SaberMod, non necessariamente la velocità. Mentre l'ottimizzazione può fornire una grande quantità di prestazioni e aumenti di velocità, può anche fare cose come ridurre il codice o aggiungere modifiche specifiche che consentono un migliore utilizzo dell'hardware di un dispositivo.

Una toolchain non è particolarmente facile da sviluppare. Potresti dirmi quali lingue e strumenti sono necessari per compilare un progetto come SabreMod?

Joe : Prima di creare una toolchain sono necessari molti programmi, proprio come Android. Cose come bisonte, libpython-dev, i programmi che vedi solo in una guida su come configurare una macchina per compilare una ROM e poi dimenticartene. Anche come Android, sono necessari molti repository e progetti, il codice GCC principale, BinUtils, GDB, MPFR e MPC sono il minimo indispensabile, ma per funzionalità e prestazioni extra aggiungiamo altri progetti e librerie come GMP, CLooG, ISL, OSL, e Python. Probabilmente tutto ciò suona come una sciocchezza, ma pensa a queste come la cartella esterna in Android build source, le cose in background che lo fanno funzionare.

Adin (YoshiShaPow) : per quanto riguarda le lingue, lo sviluppo non richiede una completa padronanza di alcun linguaggio di codifica (anche se sicuramente aiuta molto). La sola conoscenza della struttura del codice e della sintassi di base può aiutare qualcuno a produrre un ottimo lavoro!

Potresti dirci perché hai scelto le toolchain? E qual è stata la situazione più difficile che hai incontrato finora?

Paul : Inizialmente ero interessato alla toolchain di Linaro, ma ho scoperto che c'erano alcuni bug che non erano presenti nelle toolchain di AOSP. Quindi è stata presa la decisione di creare una nuova toolchain basata rigorosamente su GNU GCC e sorgenti di toolchain AOSP, con patch ROM Linaro per ottimizzazioni per jellybean. Così è nato SabreMod. Altre modifiche nelle toolchain e nella sorgente del sistema Android sono arrivate negli anni seguenti. La cosa più difficile è stata quella di compilare le toolchain in modo simile a come fa AOSP e capire quali versioni delle utility GNU (binutils, gdb ecc.) Fossero necessarie per compilare correttamente le toolchain.

SabreMod non è l'unico progetto a cui stai lavorando. Puoi dirci qualcosa su Hyper Toolchains?

Joe : Hyper Toolchains era originariamente solo una pagina che ho creato su GitHub per aiutare a organizzare le mie toolchain, quindi non sono solo ingombra e gettate con il resto dei miei repository, ma dopo che ho iniziato a fare confusione con le toolchain sempre più, ha finito per creare cose leggermente diverse dalle vostre toolchain GCC standard SabreMod, Linaro o AOSP. La combinazione di aspetti di Linaro e SabreMod ha ampliato la gamma di cose che gli sviluppatori potevano fare esclusivamente con le toolchain. Fu allora che decisi di fare una discussione, in modo che gli sviluppatori potessero avere un maggiore controllo sulla velocità e la fluidità dei loro progetti, non solo la velocità e la reattività di SabreMod o la fluidità di Linaro.

SabreMod e Hyper Toolchains sono sviluppati da un team di sviluppatori. Potete dirci qualcosa di voi stessi?

Paul : Il mio interesse per Android è iniziato con il G1 circa 4 anni fa. Non ho avuto esperienza nella programmazione. Ero interessato all'open source ma non avevo idea di dove iniziare a creare una ROM o un kernel o altro. Ho iniziato a sperimentare lo script bash per Android per apps2sdext nativo basato su un lavoro degli sviluppatori di Firerat. Ciò ha consentito una maggiore quantità di spazio di archiviazione per le app che all'epoca era molto limitata (500 MB per il sistema e le app). Successivamente ho continuato questo per il cambio Evo 4g fino al Nexus 7 quando la mod non era più necessaria dalle restrizioni di archiviazione. Ho anche iniziato lo sviluppo del kernel con Evo Shift 4G includendo altri programmatori di dischi come BFS che nessun altro aveva fatto per il dispositivo in quel momento. Ho continuato lo sviluppo del kernel su Nexus 7. Ma il mio sviluppo del kernel è ancora considerato basso a parte la modifica delle cose qua e là per far compilare i kernel con le toolchain SaberMod e le ottimizzazioni. Attualmente possiedo un Nexus 5.

Joe : Beh, ho iniziato a lavorare su cose di sviluppo poco più di 2 anni fa senza esperienza in programmazione, Linux o Android. Da adolescente che era appena passato da un vecchio iPod con jailbreak a un nuovo Nexus 7 di prima generazione, ho deciso di scherzare con Android il più possibile, alla fine compilando le mie build notturne con app, script e mod aggiunti. Dopo un po 'mi sono fermato quando il mio Nexus 7 è andato in pezzi tragicamente (RIP in pezzi). Una volta che ho risparmiato abbastanza per ottenere un GS3 usato, ho scaricato l'ultima fonte, in realtà ho iniziato a lavorare con la fonte ROM e ho iniziato a costruire molto software anche sul mio PC. Di recente ho ottenuto OnePlus One, che ha reso lo sviluppo molto più semplice e mi ha dato più motivazione.

Adin : Il mio primo progetto Android è stato creato nel periodo in cui ho avuto una commozione cerebrale ed ero uscito da scuola nell'aprile 2014. Quando finalmente ho ottenuto l'OK per essere sull'elettronica, ho deciso di provare un progetto Android e ho finito per fare un'abitudine kernel per Moto G. All'epoca non avevo alcuna conoscenza di codifica e Linux. Alcune persone dicono che è folle per un bambino di 15 anni essere in grado di fare queste cose, ma lo vedo come motivazione per lottare per il meglio. Con ciò, Joe e io abbiamo creato una serie di kernel ibridi TGM. Posso anche risolvere un cubo di Rubik 3 × 3 in 15 secondi in media. Il mio attuale autista giornaliero è OnePlus One.

Grazie per il tuo tempo e buona fortuna con i tuoi progetti!

SabreMod e Hyper Toolchains sono disponibili su e GitLab. Assicurati di dare un'occhiata a loro se hai intenzione di rilasciare la tua ROM personalizzata. Qual è la tua toolchain preferita e perché? Condividi i tuoi pensieri nei commenti qui sotto.