Bagaimana cara saya menginstal distcc?

10

Saya telah membaca Bagaimana membangun toolchain GCC 4.7 untuk kompilasi silang? dan telah berhasil membangun program pengujian sederhana yang berfungsi pada RPi saya.

Untuk melakukan ini, saya harus menjalankan arm-unknown-linux-gnueabi-gcc hello.c -o hellodesktop x86 saya dan scpexecutable ke RPi saya. Ini lambat dan merepotkan. Saya lebih suka mengontrol kompilasi dari RPi saya.

Saya telah membaca tentang distcc, yang dapat digunakan untuk mendistribusikan kompilasi dari satu komputer ke komputer lain.

Bagaimana saya menginstal ini? Saya memiliki desktop Debian / Ubuntu dan Arch Linux dan kedua OS yang diinstal pada kartu SD.

Alex Chamberlain
sumber
Saya sudah menunggu seseorang yang bukan saya untuk mengirim pertanyaan ini. Saya benar-benar tidak ingin melakukannya. Kerja bagus.
Jivings
export DISTCC_VERBOSE=1Terima kasih untuk ini ! Ini adalah apa yang saya cari untuk debbug toolchain distcc saya

Jawaban:

12

Instruksi ini menganggap Anda memiliki cross-compiler yang berfungsi pada slave. Baca Cara membuat GCC 4.7 toolchain untuk kompilasi silang? jika belum. Juga berguna untuk makemenginstal pada master.

Instalasi

Pertama, kita harus menginstal distcc. Kami akan menggunakan paket prebuilt yang disediakan oleh sistem manajemen paket sistem operasi, tetapi Anda bebas untuk menginstal dari sumber jika Anda mau!

Debian

sudo apt-get install distcc

Lengkungan

sudo pacman -S distcc

Konfigurasi

Budak - Debian / Ubuntu

TODO: Apakah ini sama dengan Arch? Jika tidak, bagaimana cara mengkonfigurasi Arch?

Kita perlu menyesuaikan pengaturan di /etc/default/distcc. Di editor favorit Anda, buka sebagai root; Saya berlari sudo vim /etc/default/distcc.

Anda perlu berubah STARTDISTCC, ALLOWEDNETSdan LISTENER. Dengan asumsi Anda memiliki master dan slave Anda berada di subnet yang sama dan subnet itu 192.168.0.0/24, mereka harus diatur ke

STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"

Selanjutnya, Anda harus menambahkan path ke kompiler Anda. Saya melakukan ini dengan menambahkan baris berikut

PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin

Catatan Daemon pada slave akan berjalan sebagai distccdpengguna, jadi pastikan izin yang sesuai dikonfigurasi pada executable Anda; Saya memberi semua orang izin untuk mengeksekusi.

Jalankan daemon - biasanya akan dimulai saat boot - dengan menjalankan

sudo service distcc start

Master - Arch

TODO: Apakah ini sama untuk Debian? Jika tidak, bagaimana kami mengonfigurasi Debian?

Buka ~/.distcc/hostsdi editor teks favorit Anda dan tambahkan alamat IP dari Budak. hostsFile saya terdiri dari satu baris, yang bertuliskan 192.168.0.22.

Catatan Mungkin ide yang baik untuk menetapkan alamat IP statis ke budak Anda, jika tidak, Anda harus mengubah file ini setiap kali alamat IP berubah.

Menggunakan

Semua berjalan dengan baik, Anda harus dapat menggunakan distcc dengan cukup sederhana. Misalnya, untuk mengkompilasi hello.cke hello.o, run

distcc arm-unknown-linux-gnueabi-gcc    -c -o hello.o hello.c

Contoh: Hello World!

Saya membuat contoh sederhana di direktori home saya, yang terdiri dari 2 file.

# file: Makefile
hello.o: hello.c
hello: hello.o

# file: hello.c
#include <stdio.h>

int main() {
  printf("Hello World!\n");
  return 0;
}

Menjalankan make helloakan dikompilasi secara lokal; Anda harus melakukan ini sebagai tes cepat terlebih dahulu. Ayo, aku akan menunggu.

Menjalankan make hello CC="distcc arm-unknown-linux-gnueabi-gcc"akan menjalankan kompilasi yang didistribusikan.

Catatan Preprocessing dan penautan masih terjadi pada RPi.

Debugging

Butuh beberapa saat untuk menjalankannya dengan benar, dan alat debugging terbaik yang saya temukan adalah variabel lingkungan yang sederhana. Jika kamu

export DISTCC_VERBOSE=1

yang distcckeluaran klien akan banyak informasi yang berguna.

Ini adalah posting yang panjang, jadi umpan balik apa pun akan diterima dengan penuh rasa syukur. Saya harap saya ingat semua langkah!

Alex Chamberlain
sumber
Jawaban yang sangat bagus. Saya akan menandai ini untuk pengembangan RPi saya.
Jivings
@AlexChamberlain Distcc sekarang mendukung "mode pompa" yang memungkinkannya untuk mendistribusikan preprocessing juga.
teraquendya
@teraquendya Mereka memang, saya belum sempat memposting rincian tentang ini. Saya ingin memastikan semuanya sudah benar tanpa mode pompa terlebih dahulu.
Alex Chamberlain