I. Introduction▲
I-A. Remarque d'introduction▲
Cet article est la suite du guide de la compilation de GCC 4 sous Windows.
En effet, ne seront pas reprécisées ici toutes les options utilisées pour la configuration qui y ont déjà été présentées.
I-B. Qu'est-ce qu'un compilateur ?▲
Selon Wikipédia, un compilateur est un programme informatique qui traduit un langage, le langage source, en un autre, appelé le langage cible, en préservant la signification du texte source.
Je suppose qu'une version en français serait appréciée. En gros, un compilateur prend un fichier source dans un langage (disons, le C) et le convertit dans un autre langage (généralement, un langage assembleur, ou un langage machine) et le code produit fait la même chose que le code d'origine.
I-C. Qu'est-ce qu'un compilateur croisé ?▲
Selon Wikipédia toujours, un compilateur croisé est un programme capable de traduire un code source en code objet ayant un environnement d'exécution (architecture matérielle, système d'exploitation) différent de celui où la compilation est effectuée.
Dit autrement, le compilateur se lance sous un OS (Windows, dans le cas qui nous intéresse) et produit des exécutables qui se lancent sous un autre OS (Linux, ici).
I-D. À propos du 64 bits▲
Depuis quelque temps, un groupe s'est chargé de l'adaptation de MinGW pour un environnement 64 bits. À l'heure actuelle, seul l'AMD64 (aussi connu sous le nom de x86_64) est supporté (tous les processeurs 64 bits, à l'exception des Intel Itanium et Itanium 2).
Cependant, il n'est pas du tout supporté, ni par MinGW, ni par GCC, mais de nombreux programmes l'utilisent déjà sans problème majeur.
Pour ceux qui sont intéressés par ces possibilités, ou ceux qui en ont besoin, sachez que la première partie vous a appris à compiler GCC pour Win32, et que ce compilateur est obligatoire pour pouvoir compiler sereinement GCC pour Win64. Il serait possible de s'en passer, cependant, mais les warnings vont pleuvoir.
Un nouveau projet est né pour porter MinGW sous Windows 64 bits. Il s'agit de MinGW64. Ce projet est mis à jour beaucoup plus fréquemment que MinGW et propose même des binaires déjà prêts pour compiler depuis Win32, Win64, Cygwin et Lin64.
I-E. Préparation de l'environnement▲
Vous aurez besoin du compilateur GCC, de préférence, la même version que celle que vous allez compiler.
En effet, la partie compilation croisée des sources est plus dure à maintenir, et donc, moins facile à compiler. Facilitons donc la tâche et choisissons un compilateur qui accepte de compiler avec des sources qui acceptent d'être compilées.
Changez le fstab pour que /work/build soit un nouveau répertoire vide (par exemple, renommez l'ancien en /work/build-native, et créez un nouveau /work/build) et que /cross pointe vers un dossier vide.
Vérifiez que toutes les sources sont toujours accessibles via /work/src, et que le nouveau GCC est dans le path (/gcc), ainsi que MSYS (/mingw/msys ou /gcc/msys).
Vous pouvez vérifier que GCC est dans le path en tapant ces commandes :
gcc --version
g++ --version
Elles doivent retourner un message semblable à ceci :
gcc.exe (GCC) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ou :
g++.exe (GCC) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Faites bien attention à la version de GCC affichée : 4.3.2, vous êtes dans le bon ; 3.4.5, vérifiez que vous avez bien installé GCC dans sa version 4, pas la version stable disponible sur le site de MinGW !
I-F. La cible▲
I-F-1. Qu'est-ce que la cible ?▲
La notion de cible n'est jamais utilisée seule. On lui adjoint aussi l'hôte (host) et le build.
Le build est la plateforme sur laquelle vous compilez (utilisez, de préférence, la valeur par défaut, sauf si le programme se trompe).
L'hôte est la plateforme sur laquelle l'exécutable que vous produisez à l'instant s'exécutera.
La cible est la plateforme sur laquelle s'exécuteront les exécutables produits par le programme que vous configurez.
I-F-2. Trouver la cible▲
Dans le répertoire des sources des binutils, de GCC, de GMP ou de MPFR et utilisez la commande ci-dessous pour votre plateforme :
config.guess
Le code retourné est votre target, c'est-à-dire votre cible.
Pour canonicaliser un nom (rendre standard), utilisez une commande semblable :
config.sub i586-linux
Où i586 est votre architecture et linux votre OS.
I-G. Pourquoi y a-t-il si peu à compiler ?▲
En fait, quelques paquets sont tout à fait inutiles sous Linux : la Win32API et le runtime MinGW.
La première est la version MinGW de l'API Win32, qui n'existe pas sous Linux.
Le deuxième est la bibliothèque de base pour Windows uniquement, et une version Linux (minimaliste) est compilée en même temps que GCC, vu que cela rentre dans ses cordes (Windows n'étant pas prévu pour le support au début). Mais, vu que cette version est très minimaliste, nous devrons compiler une version exhaustive.
Ensuite, GMP et MPFR ne seront pas recompilés, vu que le compilateur en dispose déjà.