Gentoo Logo

Disclaimer : Dit document is niet juist en is niet meer onderhouden.


De distcc Cross-compilatie Gids

1.  Cross-compilatie met distcc

Inleiding

distcc 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 distcc-instelling nodig. Maar wat als je wil compileren voor een andere architectuur met verschillende computers? Deze gids zal je tonen hoe je distcc instelt om voor verschillende architecturen te compileren.

Installeer de nodige hulpmiddelen

Je moet beginnen met crossdev te installeren op alle machines die in het compilatieproces zullen betrokken worden. crossdev is een programma dat het je gemakkelijk maakt gereedschap voor meerder architecturen te bouwen. Het is oorspronkelijk geschreven door Joshua Kinard en volledig van niets herschreven door Mike Frysinger. Het gebruik is heel eenvoudig: crossdev -t sparc 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 crossdev --help uit. Je moet natuurlijk het nodige gereedschap installeren op alle computers die gaan helpen met de compilatie.

Vervolgens moet je distcc 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 Gentoo distcc documentatie voor meer informatie over het instellen en gebruiken van distcc.

Architectuurspecifieke opmerkingen

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.

distcc instellen om correct te cross-compileren

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

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 emerge uitvoert. Ik gebruik mijn Sparc als voorbeeld. Overal waar je hieronder sparc-unknown-linux-gnu ziet staan, moet je je eigen CHOST invullen (bvb. x86_64-pc-linux-gnu voor een AMD64). Wanneer je distcc voor het eerst installeert zal de map /usr/lib/distcc/bin er als volgt uitzien:

Nota: De volgende instructies moeten enkel uitgevoerd worden op het systeem dat emerge oproept. Voer ze niet uit op de hulpcomputers.

Codevoorbeeld 1.1: Beschikbare compilers

# cd /usr/lib/distcc/bin
# ls -l
total 0
lrwxrwxrwx  1 root root 15 Dec 23 20:13 c++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 cc -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 g++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 gcc -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Dec 23 20:13 sparc-unknown-linux-gnu-gcc -> /usr/bin/distcc

Dit is wat je wil doen:

Codevoorbeeld 1.2: distcc wijzigen

# rm c++ g++ gcc cc

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 sparc-unknown-linux-gnu-wrapper. Denk eraan om de CHOST (in dit geval sparc-unknown-linux-gnu) aan te passen aan de CHOST van het systeem dat emerge uitvoert.

Codevoorbeeld 1.3: Het nieuwe inpakscript

#!/bin/bash
exec /usr/lib/distcc/bin/sparc-unknown-linux-gnu-g${0:$[-2]} "$@"

Nu maken we het script uitvoerbaar en leggen we de nodige symbolische linken:

Codevoorbeeld 1.4: De symbolische linken leggen

# chmod a+x sparc-unknown-linux-gnu-wrapper
# ln -s sparc-unknown-linux-gnu-wrapper cc
# ln -s sparc-unknown-linux-gnu-wrapper gcc
# ln -s sparc-unknown-linux-gnu-wrapper g++
# ln -s sparc-unknown-linux-gnu-wrapper c++

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

Codevoorbeeld 1.5: Een goede set compilers

# ls -l
total 4
lrwxrwxrwx  1 root root 25 Jan 18 14:20 c++ -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 cc -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 g++ -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 25 Jan 18 14:20 gcc -> sparc-unknown-linux-gnu-wrapper
lrwxrwxrwx  1 root root 15 Nov 21 10:42 sparc-unknown-linux-gnu-c++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Nov 21 10:42 sparc-unknown-linux-gnu-g++ -> /usr/bin/distcc
lrwxrwxrwx  1 root root 15 Jul 27 10:52 sparc-unknown-linux-gnu-gcc -> /usr/bin/distcc
-rwxr-xr-x  1 root root 70 Jan 18 14:20 sparc-unknown-linux-gnu-wrapper

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

Hoe dit werkt

Wanneer distcc wordt opgeroepen, controleert het om te zien hoe hij genoemd werd (bvb. i686-pc-linux-gnu-gcc, sparc-unknown-linux-gnu-g++, 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 gcc ziet, zal het naar gcc zoeken, wat waarschijnlijk uitkomt bij de compiler van de hulpcomputer, met alle gevolgen vandien indien het niet dezelfde architectuur is als het systeem dat emerge uitvoert. Wanneer de volledige naam van de compiler wordt verstuurd (bvb. sparc-unknown-linux-gnu-gcc), is er geen verwarring mogelijk.



Print

Upgedate op 17 februari 2006

De originele versie van dit document wordt niet meer onderhouden

Korte inhoud: Deze gids toont je hoe je distcc moet opzetten voor cross-compilatie voor verschillende processorarchitecturen.

Andrew Gaffney
Auteur

Joshua Saddler
Redacteur

Frank Goubert
Vertaler

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.