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.
Isi dokumen ini dilisensikan dengan lisensi Creative Commons -
Attribution / Share Alike.
|