<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/nl/cross-compiling-distcc.xml,v 1.3 2012/06/30 18:42:54 swift Exp $ -->
<!-- SYNC 1.4 -->
<guide disclaimer="obsolete" lang="nl">
<title>De distcc Cross-compilatie Gids</title>

<author title="Auteur">
  <mail link="agaffney@gentoo.org">Andrew Gaffney</mail>
</author>
<author title="Redacteur">
  <mail link="nightmorph@gentoo.org">Joshua Saddler</mail>
</author>
<author title="Vertaler">
  <mail link="frank.goubert@gmail.com">Frank Goubert</mail>
</author>

<abstract>
Deze gids toont je hoe je distcc moet opzetten voor cross-compilatie voor
verschillende processorarchitecturen.
</abstract>

<!-- The content of this document is licensed under the CC-BY-SA license -->
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
<license/>

<version>1.3</version>
<date>2006-02-17</date>

<chapter>
<title>Cross-compilatie met distcc</title>
<section>
<title>Inleiding</title>
<body>

<p>
<c>distcc</c> is een hulpmiddel dat je toelaat om het werk dat een
softwarecompilatie met zich meebrengt, te verdelen over meerdere computers in
een netwerk. Zolang al die computers dezelfde hulpmiddelen gebruiken en dat
gereedschap gebouwd is voor dezelfde architectuur gebruiken, is er geen speciale
<c>distcc</c>-instelling nodig.
Maar wat als je wil compileren voor een andere architectuur met verschillende
computers? Deze gids zal je tonen hoe je <c>distcc</c> instelt om voor
verschillende architecturen te compileren.
</p>

</body>
</section>
<section>
<title>Installeer de nodige hulpmiddelen</title>
<body>

<p>
Je moet beginnen met <c>crossdev</c> te installeren op alle machines die in het
compilatieproces zullen betrokken worden. <c>crossdev</c> is een programma dat
het je gemakkelijk maakt gereedschap voor meerder architecturen te bouwen. Het
is oorspronkelijk geschreven door <mail link="kumba@gentoo.org">Joshua
Kinard</mail> en volledig van niets herschreven door
<mail link="vapier@gentoo.org">Mike Frysinger</mail>. Het gebruik is heel
eenvoudig: <c>crossdev -t sparc</c> zal de volledige gereedschapskist bouwen die
nodig is voor de Sparc-architectuur. Dit bevat binutils, gcc, glibc en
linux-headers. Als je meer hulp wil, voer dan  <c>crossdev --help</c> uit. Je
moet natuurlijk het nodige gereedschap installeren op alle computers die gaan
helpen met de compilatie.
</p>

<p>
Vervolgens moet je <c>distcc</c> installeren op alle machines die betrokken
worden in het proces. Dit omvat ook het systeem dat het emerge commando zal
uitvoeren, samen met de systemen voor cross-compilatie. Zie de
<uri link="/doc/en/distcc.xml">Gentoo distcc documentatie</uri> voor meer
informatie over het instellen en gebruiken van <c>distcc</c>.
</p>

</body>
</section>
<section>
<title>Architectuurspecifieke opmerkingen</title>
<body>

<p>
Als je wil cross-compileren tussen verschillende subarchitecturen voor Intel x86
(bvb. i586 en i686), moet je ook het volledige cross-compilatiegereedschap
bouwen voor de gewenste CHOST, anders zal de compilatie mislukken. Dit komt
doordat i586 en i686 verschillende CHOSTs zijn, ondanks het feit dat ze beiden
onder de noemer "x86" vallen. Hou dit in het achterhoofd bij de bouw van je
gereedschap. Als bijvoorbeeld het doel een i586-computer is, dan moet je het
i586-gereedschap bouwen op alle i686-hulpcomputers.
</p>

</body>
</section>
<section>
<title>distcc instellen om correct te cross-compileren</title>
<body>

<p>
In de standaard distcc-opzet, zal cross-compilatie niet naar wens werken. Het
probleem is dat veel ebuilds gewoon <c>gcc</c> oproepen in plaats van de
volledige naam van de compiler (bvb. <c>sparc-unknown-linux-gnu-gcc</c>).
Wanneer deze compilatie verdeeld wordt naar een hulpcomputer, zal de gewone
compiler opgeroepen worden i.p.v. je nieuwe cross-compiler.
</p>

<p>
Gelukkig kan je om dit probleem heen werken. Het enige dat je nodig hebt is een
inpakscript en een paar symbolische linken op het systeem dat
<c>emerge</c> uitvoert. Ik gebruik mijn Sparc als voorbeeld. Overal waar je
hieronder <c>sparc-unknown-linux-gnu</c> ziet staan, moet je je eigen CHOST
invullen (bvb. <c>x86_64-pc-linux-gnu</c> voor een AMD64). Wanneer je distcc
voor het eerst installeert zal de map <path>/usr/lib/distcc/bin</path> er als
volgt uitzien:
</p>

<note>
De volgende instructies moeten enkel uitgevoerd worden op het systeem dat
emerge oproept. Voer ze niet uit op de hulpcomputers.
</note>

<pre caption="Beschikbare compilers">
# <i>cd /usr/lib/distcc/bin</i>
# <i>ls -l</i>
total 0
lrwxrwxrwx  1 root root 15 Dec 23 20:13 c++ -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 cc -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 g++ -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 gcc -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-c++ -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-g++ -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-gcc -&gt; /usr/bin/distcc
</pre>

<p>
Dit is wat je wil doen:
</p>

<pre caption="distcc wijzigen">
# <i>rm c++ g++ gcc cc</i>
</pre>

<p>
Vervolgens maken we een script op dit systeem. Start je favoriete tekstverwerker
en maak een bestand met onderstaande tekst in en sla het op als
<path>sparc-unknown-linux-gnu-wrapper</path>. Denk eraan om de CHOST (in dit
geval <c>sparc-unknown-linux-gnu</c>) aan te passen aan de CHOST van het systeem
dat emerge uitvoert.
</p>

<pre caption="Het nieuwe inpakscript">
#!/bin/bash
exec /usr/lib/distcc/bin/sparc-unknown-linux-gnu-g${0:$[-2]} "$@"
</pre>

<p>
Nu maken we het script uitvoerbaar en leggen we de nodige symbolische linken:
</p>

<pre caption="De symbolische linken leggen">
# <i>chmod a+x sparc-unknown-linux-gnu-wrapper</i>
# <i>ln -s sparc-unknown-linux-gnu-wrapper cc</i>
# <i>ln -s sparc-unknown-linux-gnu-wrapper gcc</i>
# <i>ln -s sparc-unknown-linux-gnu-wrapper g++</i>
# <i>ln -s sparc-unknown-linux-gnu-wrapper c++</i>
</pre>

<p>
Wanneer je klaar bent, zal <path>/usr/lib/distcc/bin</path> er als volgt
uitzien:
</p>

<pre caption="Een goede set compilers">
# <i>ls -l</i>
total 4
lrwxrwxrwx  1 root root 25 Jan 18 14:20 c++ -&gt; sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 cc -&gt; sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 g++ -&gt; sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 gcc -&gt; sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 15 Nov 21 10:42 sparc-unknown-linux-gnu-c++ -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Nov 21 10:42 sparc-unknown-linux-gnu-g++ -&gt; /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Jul 27 10:52 sparc-unknown-linux-gnu-gcc -&gt; /usr/bin/distcc
-rwxr-xr-x  1 root root 70 Jan 18 14:20 sparc-unknown-linux-gnu-wrapper
</pre>

<p>
Proficiat! Je beschikt nu (hopelijk) over een werkende cross-distcc opzet.
</p>

</body>
</section>
<section>
<title>Hoe dit werkt</title>
<body>

<p>
Wanneer <c>distcc</c> wordt opgeroepen, controleert het om te zien hoe hij
genoemd werd (bvb. <c>i686-pc-linux-gnu-gcc</c>,
<c>sparc-unknown-linux-gnu-g++</c>, enz.) Wanneer distcc dan de compilatie
verdeeld naar een hulpcomputer, geeft hij de gegeven naam mee. De distcc
op de hulpcomputer zoekt dan een programma met dezelfde naam. Als het gewoon
<c>gcc</c> ziet, zal het naar <c>gcc</c> zoeken, wat waarschijnlijk uitkomt
bij de compiler van de hulpcomputer, met alle gevolgen vandien indien het niet
dezelfde architectuur is als het systeem dat <c>emerge</c> uitvoert. Wanneer
de volledige naam van de compiler wordt verstuurd (bvb.
<c>sparc-unknown-linux-gnu-gcc</c>), is er geen verwarring mogelijk.
</p>

</body>
</section>
</chapter>
</guide>
