• [^] # Re: Quelle est la difficulté de la compilation croisée ?

    Posté par . En réponse au journal Chaine(s) de compilation ARM. Évalué à 9.

    dans ce cas, il ne s'agit pas de simplement passer le bon paramètre au compilateur ?

    Dans la théorie, cela pourrait être le cas. On aurait alors (en gros) :

    • un frontal qui interprète le langage (eg. le C) et émet une représentation intermédiaire (IR, intermediate representation) du programme (pour gcc, c ́est du GIMPLE (in-memory, pas de on-disk), pour llvm, c ́est du bitcode (on-disk, pas de nom pour in-memory)
    • un ou plusieurs optimiseurs qui modifient la structure de l ́IR (et donc émettent aussi de l ́IR)
    • un backend qui interprète l'IR et émet du code assembleur
    • l ́éditeur de liens (linker) qui émet du code binaire

    En fonction des flags passés au compilateur (ou en fonction de son nom), le compilateur peut alors choisir quel backend et éditeur de liens utiliser.

    C ́est globalement la structure utilisée par LLVM, mais pas pour gcc. Pour gcc, le frontal, les optimiseurs et le backend sont dans le même binaire (en gros). Si tu veux rajouter un frontal ou un backend, il faut recompiler tout gcc (tsss…).

    De plus, pour LLVM, les optimiseurs peuvent être des programmes ou librairies à part. Pour gcc, ce ne peut être que des librairies, et c ́est plus dur à utiliser, vu que GIMPLE est peu documenté (à ma connaissance). Pour LLVM, bitcode est très bien documenté, ce qui rend l ́écriture d ́optimiseurs plus facile.

    Mais en gros, dans le monde 'gcc', vu que le backend est intégré aux frontaux, ajouter une cible ou un langage implique de recompiler tout gcc…

    Hop,
    Moi.