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.