Gentoo Logo

Panduan Cross-compiling DistCC

1.  Cross-compiling dengan distcc

Pendahuluan

distcc merupakan sebuah utilitas yang dapat membantu anda untuk membagi kompilasi software pada beberapa komputer di sebuah jaringan. Selama komputer-komputer pada jaringan ini menggunakan toolchain yang dibangun dengan arsitektur prosesor yang sama, tidak ada setup khusus distcc yang diperlukan. Tetapi bagaimana jika anda ingin mengkompilasi sebuah software untuk arsitektur lain? Dokumen ini akan memandu anda cara mengkonfigurasi distcc untuk kompilasi bagi arsitektur yang berbeda.

Emerge utilitas yang diperlukan

Pertama, anda perlu menginstal crossdev pada seluruh komputer yang akan ikut serta dalam proses kompilasi. crossdev merupakan sebuah utilitas yang mempermudah pembangunan toolchain lintas-arsitektur. Utilitas ini pada awalnya ditulis oleh Joshua Kinard lalu ditulis ulang dari awal oleh Mike Frysinger. Penggunaannya sangat mudah: crossdev -t sparc akan membangun sebuah cross-toolchain lengkap yang menargetkan arsitektur Sparc. Ini berisi binutils, gcc, glibc, dan linux-headers. Jika anda memerlukan bantuan, jalankan crossdev --help. Pastinya, anda perlu meng-emerge cross-toolchain yang sesuai pada seluruh komputer yang ikut serta.

Kemudian, anda perlu meng-emerge distcc pada seluruh komputer yang akan ikut serta. Ini termasuk komputer yang akan menjalankan emerge dan komputer yang memiliki cross-compiler. Silahkan membaca Dokumentasi Distcc Gentoo untuk info tentang setup dan penggunaan distcc.

Catatan Khusus Arsitektur

Jika anda melakukan cross-compiling di antara subarsitektur dari Intel x86, (mis. i586 and i686), anda tetap perlu membangun sebuah cross-toolchain lengkap untuk CHOST yang anda inginkan, jika tidak kompilasi akan gagal. Hal ini karena i586 dan i686 merupakan CHOST yang berbeda, walaupun keduanya dianggap "x86." Harap selalu mengingat ini ketika anda membangun cross-toolchain anda. Sebagai contoh, jika komputer target adalah i586, berarti anda harus membangun cross-toolchain pada komputer i686 pembantu anda.

Mengkonfigurasi distcc untuk cross-compile dengan benar

Pada setup default distcc, cross-compiling tidak akan bekerja dengan benar. Persoalannya adalah, banyak proses build yang hanya memanggil gcc bukannya nama lengkap compiler (mis. sparc-unknown-linux-gnu-gcc). Ketika kompilasi ini didistribusikan pada komputer pembantu, yang dipanggil adalah compiler asli, bukannya cross-compiler anda.

Untungnya, ada solusi untuk masalah kecil ini. Yang anda butuhkan adalah sebuah skrip wrapper dan beberapa symlink pada komputer yang akan menjalankan emerge. Penulis akan menggunakan komputer Sparc sebagai contoh. Kapanpun anda melihat sparc-unknown-linux-gnu di bawah ini, anda perlu menggantinya dengan CHOST anda (mis. x86_64-pc-linux-gnu untuk AMD64). Ketika anda pertama kali menginstal distcc, direktori /usr/lib/distcc/bin akan terlihat seperti ini:

Catatan: Langkah-langkah berikut ini hanya perlu dilakukan pada komputer yang menjalankan emerge. Jangan lakukan pada komputer pembantu.

Daftar Kode 1.1: Compiler yang tersedia

# 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

Berikut ini yang perlu anda lakukan:

Daftar Kode 1.2: Memodifikasi distcc

# rm c++ g++ gcc cc

Kemudian, kita akan menciptakan skrip baru pada komputer ini. Jalankan editor favorit anda lalu ciptakan sebuah file yang berisi teks berikut ini, lalu simpan dengan nama sparc-unknown-linux-gnu-wrapper. Jangan lupa untuk mengganti CHOST (pada contoh ini, sparc-unknown-linux-gnu) dengan CHOST dari komputer yang akan menjalankan emerge.

Daftar Kode 1.3: Skrip wrapper baru

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

Kemudian, kita akan menjadikan skrip ini executable dan menciptakan symlink yang sesuai:

Daftar Kode 1.4: Menciptakan symlink

# 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++

Ketika anda selesai, /usr/lib/distcc/bin akan terlihat seperti ini:

Daftar Kode 1.5: Set compiler yang benar

# 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

Selamat! Sekarang (mudah-mudahan) anda telah memiliki setup cross-distcc yang benar.

Bagaimana semua ini bekerja

Ketika distcc dipanggil, ia akan memeriksa namanya yang dipanggil (mis. i686-pc-linux-gnu-gcc, sparc-unknown-linux-gnu-g++, dll.) Ketika distcc mendistribusikan kompilasi ke sebuah komputer pembantu, nama yang dipanggil tadi akan diperiksa. Daemon distcc pada komputer pembantu kemudian akan mencari binari dengan nama yang sama. Jika yang dilihat adalah gcc, maka yang dicari adalah gcc, yang biasanya merupakan compiler asli pada komputer pembantu, jika arsitekturnya tidak sama dengan komputer yang menjalankan emerge. Ketika yang dilihat adalah nama lengkap dari compiler, (mis. sparc-unknown-linux-gnu-gcc), maka, tidak akan ada kebingungan.



Print

Diperbarui 17 Pebruari 2006

Rangkuman: Panduan ini berisi cara men-setup distcc untuk cross-compiling dengan beberapa arsitektur prosesor yang berbeda.

Andrew Gaffney
Author

Joshua Saddler
Editor

Dzikri Aziz
Translator

Donate to support our development efforts.

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