• [^] # Re: Cross-compilation

    Posté par . En réponse à la dépêche TuxMake et le noyau Linux. Évalué à 10. Dernière modification le 10 mars 2022 à 11:21.

    On distingue le Host de la Target :
    [...]
    Cross-compiler, c'est utiliser le Host pour générer du code pour la Target.

    Attention, ce n’est pas le vocabulaire « standard », du moins avec les outils GNU (mais ça semble malheureusement être celui utilisé par Tuxmake).

    Avec les toolchains GNU, normalement on distingue la machine de compilation (build system) de la machine hôte (host system) de la machine cible (target system), avec les significations suivantes :

    • La machine de compilation (build), c’est comme son nom l’indique celle sur laquelle la compilation a lieu.

    • La machine hôte (host), c’est celle sur laquelle le programme compilé sera exécuté.

    • La machine cible (target), c’est celle pour laquelle le programme compilée générera du code. Ça n’a de sens que lorsque le programme compilé est lui-même un compilateur ou un outil assimilé, et c’est notamment ce qui sert à produire un compilateur croisé.

    Par exemple, pour générer des binaires Windows depuis une machine GNU/Linux, la première étape est de construire un compilateur croisé qui s’exécutera sous GNU/Linux mais produira du code pour Windows. Lors de la compilation de ce compilateur, on aura :

    • machine de compilation : x86_64-linux (le compilateur croisé est compilé sous GNU/Linux...) ;
    • machine hôte : x86_64-linux (il s’exécutera — sera utilisé — sous GNU/Linux...) ;
    • machine cible : x86_64-windows (il produira du code pour Windows).

    Une fois le compilateur croisé obtenu, pour cross-compiler un programme pour Windows, on aura :

    • machine de compilation : x86_64-linux (là où s’exécute notre compilateur croisé) ;
    • machine hôte : x86_64-windows (pour laquelle notre compilateur croisé produit du code, et là où s’exécutera le programme résultant) ;
    • machine cible : par défaut même chose que la machine hôte, mais en réalité sans importance, sauf si le programme que l’on compile à présent est un autre compilateur ou outil assimilé générant du code binaire.