# Ontwerp en bouw een besturingssysteem/Werkomgeving en hulpmiddelen/Toolchain/Cygwin

Om onder Windows de juiste programma's en hulpmiddelen voor het maken van een besturingssysteem werkend te krijgen, wordt Cygwin het meest aangeraden. Cygwin is een bibliotheek van kleine Linux programma's, speciaal klaargemaakt voor gebruik onder Windows. Maar bepaalde programma's, zoals de gcc compiler, maken Windows-compatibele uitvoerbare bestanden (PE-bestanden) en voor ons besturingssysteem zijn die nou net niet zo handig. Dus op deze pagina nemen we de stappen die nodig zijn om Cygwin te installeren en een werkende cross-platform toolchain te krijgen.
* Let op! Het maken van een cross-platform toolchain neemt, als alles goed gaat, een aantal uren in beslag. Gelukkig hoeft het maar één keer.

## Cygwin installeren

* Ga naar cygwin.com en download de laatste versie van Cygwin.
* Voer de setup uit en volg de stappen. Kies als 'download site' http://cygwin.xl-mirror.nl/ of een andere site in Nederland.
* Selecteer behalve de reeds geselecteerde packages ook nog de laatste versies van de volgende packages:
** gcc-core (in All > Devel)
** gcc-g++ (in All > Devel)
** make (in All > Devel)
** flex (in All > Devel)
** bison (in All > Devel)
** libgmp-devel (in All > Libs)
** libmpfr-devel (in All > Libs)
** libmpc-devel (in All > Libs)
* De volgende package is niet nodig voor het cross-compilen, maar wel voor deze tutorial:
** genisoimage (in All > Utils)
* Voer de laatste stappen van de setup uit.
* Kopieer het setupbestand zelf (setup.exe) naar de hoofdmap van Cygwin (bijv. C:\cygwin)

## Bronbestanden downloaden

Om een cross-platform toolchain te maken moeten de oorspronkelijke programma's opnieuw gecompileerd worden. Hiervoor is de oorspronkelijke broncode nodig. Bestanden met een .tar.gz en .tar.bz2 extensie zijn gecomprimeerde archieven zoals .zip, en worden veel gebruikt op Linux en Unix systemen.
* Download het gcc-core-x.x.x archief met de laatste versie van GCC van ftp.gnu.org
* Download het binutils-x.xx archief met de laatste versie van Binutils van ftp.gnu.org
* Pak beide archieven uit in de /usr/src map van de Cygwin installatie (bijvoorbeeld in C:\cygwin\usr\src).
* Let op! De versienummering die GNU aanhoudt is als volgt: elke punt in een versienummer scheidt een heel getal. Dus binutils-2.20 is nieuwer dan binutils-2.9. De bestanden op de websites staan dus niet van oud naar nieuw gesorteerd; de onderste is niet persé de nieuwste.

## Voorbereiding

Er moeten nog wat voorbereiding gedaan worden, zoals het aanmaken van de mappen build-binutils en build-gcc in de /usr/src map. Voer de volgende commando's uit, elke regel gevolgd door een Enter waarna de computer even bezig gaat. Er verschijnt niet altijd een bevestiging.

## Binutils compileren

Nu moet eerst binutils worden gecompileerd. Voer de volgende commando's uit. Het make all commando kan meer dan een half uur duren. Merk op dat voor x.xx het juiste versienummer moet worden ingevuld.
* Let op! Controleer elk commando nog even op typfouten voordat je op Enter drukt.
* Tip! Als je ../binutils- hebt getypt, druk dan op Tab. De shell vult het automatisch aan tot ../binutils-x.xx/ waarbij x.xx het juiste versienummer is.

## GCC compileren

Nu kan gcc worden gecompileerd. Voer de volgende commando's uit. Het make all-gcc commando kan meer dan een uur duren.

## Cygwin configureren

Om ervoor te zorgen dat de nieuwe gecompileerde programma's uit de cross-platform toolchain direct kunnen worden aangeroepen, moet je de volgende regel toevoegen aan het begin van het .bashrc bestand in je Cygwin home directory (/home/Gebruikersnaam/.bashrc):
.bashrc
Nu is alles klaar. Om een programma uit de cross-platform toolchain te gebruiken in plaats van de oorspronkelijke versie, zet je er i586-elf- voor, bijvoorbeeld i586-elf-ld in plaats van ld.