Táto téma ma zaujíma už nejaký čas. Cross-compiling je vlastne nepresný termín. Alebo nejednoznačný. Nech je to akokoľvek. V skratke, cross-compiling znamená aspoň dve rôzne veci v hlavách rôznych ľudí.
Prvá skupina si pod cross-compilingom predstavuje proces, po ktorom vznikne spustiteľný súbor zo zdrojového kódu pre rôzne operačné systémy, niekedy označovaný ako cross-platform compilation. Napríklad pre Windows, MacOS, Linux a prípadne ďalšie. Výsledný spustiteľný súbor dokáže bežať na jednej konkrétnej CPU architektúre – väčšinou na tej istej, na ktorej kompilácia prebehla. Príkladom je pkg od Vercel (predtým Zeit), ktorý sa používa na vytvorenie spustiteľného súboru z NodeJs zdrojového kódu.
Druhá skupina si pod cross-compilingom predstavuje tvorbu spustiteľného
súboru, ktorý je možné spustiť na rôznych CPU architektúrach. Väčšinou
sa kompiluje na architektúre x86_64, pričom výsledný súbor má bežať na
architektúre ARM (32 alebo 64 bit). Príkladom sú kompilátory z kategórie
aarch64-linux-gnu-gcc pre jazyky rodiny C alebo projekty ako
cross pre Rust. Existujú
samozrejme aj ďalšie – viem, že golang to zvláda elegantne tiež.
Prečo je to dôležité? #
O tejto téme píšem preto, lebo som sa do nej pomerne hlboko ponoril pred nejakým časom. Pri mojom poslednom objavení tauri som sa snažil pochopiť, či dokáže robiť cross-compilation pre inú architektúru popri cross-platform kompilácii, ktorú už podporuje. Existuje #941 a PR#491 a určite aj ďalšie, väčšina uzavretá so správou „toto sa v dohľadnej dobe nestane”. Smutné.
S ohľadom na všetky komplikácie to vyzerá, že bude lepšie kúpiť nejaký ARM laptop na distribúciu aplikácií postavených na Javascripte v embedded systémoch.
Toto je 91. príspevok #100daystooffload.