Tutoriel 1 - Compilation de gcc 4.7.0 pour MinGW

Par DragonJoker

Introduction

Actuellement, MinGW utilise gcc 4.6.2, alors que gcc 4.7.0 est sorti.
Pour tester cette version sous Windows, il faut donc en télécharger une pré-compilée (par exemple sur equation.com) ou la compiler soi-même.
Je vais détailler la seconde solution.

Pour écrire ce tutoriel je me base sur celui de Scott Meyers (disponible ici), qui lui même s'est basé sur celui-ci

Plusieurs étapes vont être nécessaires pour compiler gcc :
  1. Installer MingW et MSYS
  2. Créer un environnement pour compiler gcc
  3. Compiler et installer gcc

Installer MINGW et MSYS

Il s'agit de la phase la plus simple du tutoriel.
Il suffit de télécharger la dernière version de mingw-get-inst
Une fois l'installeur lancé il faut bien préciser que nous voulons installer MSYS Basic System.
Le processus d'installation prend un peu de temps.

Créer un environnement pour compiler GCC

Afin de compiler gcc, il faut ajouter certaines bibliothèques et exécutables non présents dans la distribution de MinGW, ou obsolètes pour gcc 4.7.
En supposant que MinGW est installé sur c:\, vous devriez avoir l'arborescence suivante:
c:\
|---folder_1
|---folder_2
|---MinGW
||---bin
||---doc
||---include
||---info
||---lib
||---libexec
||---mingw32
||---msys
|||---1.0
||||---bin
||||---etc
||||---postinstall
||||--sbin
||||---share
||---share
||---var
|---folder_n
/span Nous allons commencer par créer le dossier et l'environnement de compilation de gcc.
Dans l'environnement MSYS, créez un dossier de travail où vous placerez les sources et fichiers de compilation temporaires:
# cd /
# mkdir gcc-work
# cd gcc-work
# mkdir {build,source}
Les lignes commençant avec un # sont les commandes à saisir dans MSYS.

Le premier exécutable dont vous allez avoir besoin par la suite est m4
Il est téléchargeable directement sur le SourceForge de MinGW
Une fois téléchargé, il faut le décompresser dans le dossier bin de votre installation de MinGW (C:\MinGW\bin, par exemple)

Ensuite, il va falloir compiler 3 bibliothèques : GMP, MPFR et MPC
Une fois téléchargées, déplacez les archives dans le dossier source (dans le dossier de travail - /gcc-work/source) et décompressez-les.
Pour chacune de ces bibliothèques, il va falloir configurer, compiler et installer.
D'abord on crée les dossiers qui vont contenir les fichiers de compilation :

# cd /gcc-work/build
# mkdir {gmp,mpfr,mpc}
Puis on configure/compile/installe GMP en premier (MPFR ayant besoin de GMP et MPC ayant besoin de MPFR) :
# cd gmp
# ../../source/gmp-5.0.2/configure --prefix=/mingw --build=mingw32 --host=mingw32 --target=mingw32 --program-prefix="" --with-lib-path=/mingw/mingw32/lib:/mingw/lib:/usr/local/lib:/lib:/usr/lib --with-gcc --with-gnu-as --with-gnu-ld --disable-nls --disable-shared
# make CFLAGS="-O2" LDFLAGS=-s
# make install
Ensuite on s'occupe de MPFR :
# cd ../mpfr
# ../../source/mpfr-3.1.0/configure --prefix=/mingw --build=mingw32 --host=mingw32 --target=mingw32 --program-prefix="" --with-lib-path=/mingw/mingw32/lib:/mingw/lib:/usr/local/lib:/lib:/usr/lib --with-gcc --with-gnu-as --with-gnu-ld --disable-nls --disable-shared
# make CFLAGS="-O2" LDFLAGS=-s
# make install
Et enfin MPC :
#cd ../mpc
# ../../source/mpc-0.8.2/configure --prefix=/mingw --build=mingw32 --host=mingw32 --target=mingw32 --program-prefix="" --with-lib-path=/mingw/mingw32/lib:/mingw/lib:/usr/local/lib:/lib:/usr/lib --with-gcc --with-gnu-as --with-gnu-ld --disable-nls --disable-shared
# make CFLAGS="-O2" LDFLAGS=-s
# make install
Chaque compilation peut prendre quelques dizaines de minutes (selon votre machine).

Compiler et installer GCC

Le moment tant attendu, la compilation de gcc, en fait rien de bien compliqué.
Tout d'abord il faut télécharger les sources de gcc
Une fois téléchargées, déplacez l'archive dans le dossier source et décompressez-la.
Retournez dans le dossier build et créez un dossier de compilation:
# cd ../build
# mkdir gcc
# cd gcc
Configurez, compilez et installez:
# ../../source/gcc-4.7.0/configure --prefix=/mingw --build=mingw32 --host=mingw32 --target=mingw32 --enable-languages=c,c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --disable-bootstrap
# make
# make install
Le processus est loooong, Ca prend 1h ou 2...

Conclusion

Voili voilou, gcc est compilé et installé sur votre environnement MinGW.
Vous pouvez vérifier cela en tapant la ligne suivante dans la console (MSYS ou cmd.exe, d'ailleurs)

# gcc -v
qui devrait retourner ceci (ou ressemblant):
Utilisation des specs internes.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.0/lto-wrapper.exe
Target: mingw32
Configuré avec: ../../source/gcc-4.7.0/configure --prefix=/mingw --build=mingw32 --host=mingw32 --target=mingw32 --enable-languages=c,c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --disable-bootstrap
Modèle de thread: win32
gcc version 4.7.0 (GCC)


Avec ce document, vous avez maintenant un appui vous permettant de compiler les versions modernes de gcc, ce à partir de la version 4.7.0.
J'espère que ce tutoriel vous aura aidé.


Bonne lecture,
dragonjoker.