Bagaimana cara membuat GCC 4.7 toolchain untuk kompilasi silang?

82

Saya sudah mengajukan pertanyaan ini pada Stack Overflow, tetapi saya ingin tahu apakah ada yang berhasil membangun toolchain GCC 4.7 untuk kompilasi silang ARM (untuk host Linux x86 / x86-64). Ada banyak instruksi untuk membangun GCC dari sumber dan banyak cross-compiler tersedia untuk versi GCC pra-4.7, hanya saja bukan yang terbaru.

Kompilasi pada Rasp Pi sendiri berfungsi dengan baik, tetapi agak terlalu lambat untuk tujuan praktis.

Saya ingin mendapatkan kompilasi dan saya ingin menggunakan alat terbaru dan terbaik.

tlhIngan
sumber
Ini sepertinya sejalan dengan apa yang perlu saya lakukan juga. Kami sedang mengembangkan untuk ARM5 yang menjalankan Arch Linux. Pengembangan ada di Ubuntu Linux 10,04 LTS (hari ini, mungkin kita akan meningkatkannya besok, saya belum tahu). Saat ini kami menjalankan GCC 4.4, tetapi hal-hal yang perlu saya lakukan akan sangat membantu jika tidak memerlukan GCC 4.7 (minimum) jika tidak GCC 4.8 (jika kami dapat mengelolanya), untuk fitur bahasa C ++ 11. Sepertinya semua rantai alat yang tersedia untuk ARM (5 atau apa pun) sudah ketinggalan zaman. Apakah mungkin untuk membangun rantai alat kompiler silang dari sumber dan mendukung GCC yang kita inginkan?
mwpowellhtx
Saya punya sedikit masalah di langkah kedua. sebenarnya, saya sudah melakukan ./configure dan membuat perintah. Semuanya bekerja dengan baik. tetapi ketika saya telah memberi tip "install", saya mendapat pesan kesalahan yang mengatakan: install: operan file yang hilang
Lihat juga: raspberrypi.stackexchange.com/q/14587/5538 Saya menutupnya sebagai dupe, tapi saya pikir itu layak untuk dihubungkan di sini karena jawaban yang diterima di sana masuk ke detail yang cukup besar tidak termasuk di sini.
goldilocks

Jawaban:

60

Saya menemukan petunjuk ini Cara membuat kompiler silang untuk Raspberry Pi Anda . Ini adalah cara yang bagus untuk menggunakan crosstool-ngalat yang menyederhanakan konfigurasi cross-compiler build A LOT (memiliki antarmuka berbasis kutukan yang bagus) dan mendukung GCC 4.7.

Saya telah mengikuti langkah-langkah ini dan berakhir dengan build yang sukses dengan 4,7 cross-compiler.

Prasyarat: Paket-paket berikut diperlukan: bison , flex , gperf , gawk , libtool , automake , g ++ , memastikan ini diinstal sebelum melanjutkan.

  1. Unduhan pertama crosstool-ngdari sini (saya menggunakan versi 1.15.2).
  2. Buka paket distribusi dan lakukan ./configure/ make/install
  3. Buat direktori baru di suatu tempat di sistem file untuk membangun dan cdmasuk ke dalamnya.
  4. Lari ct-ng menuconfig. Anda akan diberikan serangkaian menu yang bagus untuk mengonfigurasi bangunan Anda.
  5. Pergilah ke Paths dan opsi misc. Aktifkan fitur Coba yang ditandai sebagai EKSPERIMENTAL.
  6. Pilih direktori Awalan yang sesuai . Ini adalah direktori tempat kompiler dan pustaka Anda akan diinstal (semuanya baik-baik saja, pastikan direktori tersebut kosong).

    • CATATAN: Penting juga bahwa Anda memiliki akses tulis ke folder yang dipilih
  7. Buka menu Opsi target .

    • Arsitektur target: lengan
    • Endianness: little endian
    • Bitness: 32-bit
  8. Anda mungkin juga ingin mengatur parameter floating point ke softfp (lihat ini untuk info lebih lanjut), tetapi hardfp lebih sesuai untuk Raspbian.

  9. Buka menu Sistem operasi dan ubah Target OS ke linux .
  10. Buka menu C compiler dan pilih gcc versi 4.7.0 (artikel ini merekomendasikan Linaro, tapi saya berhasil membuatnya bekerja dengan vanilla gcc). Pilih juga bahasa tambahan yang Anda ingin kompilasi (C ++, Fortran, ...)
  11. Buka menu C-library dan pilih satu. Default-nya adalah eglibc tetapi yang itu tidak bagus untuk saya, jadi saya menggunakan glibc (versi terbaru).

    • CATATAN: selama langkah build 13. eglibc dapat gagal membangun jika subversi tidak diinstal, karena sumber tidak dapat diambil dari repositori
    • CATATAN: eglibc tidak lagi menjadi bagian dari versi 1.21.0 karena kurangnya pengembangan. Lihat Begitu lama untuk eglibc . Gunakan glibc sebagai default. crosstool-ng
  12. Keluar dari alat konfigurasi sambil menyimpan perubahan Anda.
  13. Jalankan ct-ng builddi direktori yang sama. Tunggu beberapa saat (sekitar 45 menit dalam kasus saya) dan kompiler silang Anda harus siap.

Tampaknya bekerja dengan baik!

pengguna13
sumber
Wow, 45 menit adalah waktu yang lama. Seberapa cepat sistem Anda? Saya menunggu sekarang
Jivings,
Yah, mungkin itu sedikit kurang, tetapi harus mengkompilasi semua prasyarat pertama dan setelah bintools dan gcc juga libc dan libstdc ++, jadi 45 menit terdengar masuk akal bagi saya.
Bisakah kita menambahkan detail tentang cara menginstal ini dengan benar dan memperbarui jalur, setelah diuji tentu saja?
Alex Chamberlain
2
Juga, saya pikir kita harus menggunakan hardfp, karena RPi mendukungnya.
Alex Chamberlain
Mungkin, tetapi IIRC, Arch's GCC dikonfigurasi dengan softfp. Saya tidak punya waktu untuk menguji ini sekarang, tetapi saya sudah membuat komunitas jawaban wiki, jadi silakan memperbaikinya.
19

Saya ingin mendapatkan kompilasi dan saya ingin menggunakan alat terbaru dan terbaik.

Bahkan, alat-alat terbaru dan terbaik tidak perlu dibangun sendiri. Pada Repositori Raspberry Pi Tool GitHub Anda akan menemukan X86_64dan x686toolchains untuk perangkat lunak lintas-kompilasi.

Saya sarankan menggunakan x86-linux64-cross-arm-linux-hardfptoolchain, karena itu akan dikompilasi untuk Hard Floating Point, yang akan menghasilkan sistem yang jauh lebih cepat.

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

Catatan: Jika Anda menggunakan kernel yang ada maka Anda harus menggunakan toolchain yang cocok dengan kernel. Aplikasi HardFP tidak akan berfungsi pada kernel SoftFP.


Untuk menggunakan toolchain cukup periksa repositori:

git clone https://github.com/raspberrypi/tools.git --depth 1

The --depthparameter akan berarti bahwa Anda tidak harus menunggu sejarah repositori untuk diunduh juga (karena kita tidak akan menggunakannya).

Kemudian tambahkan binari ke variabel PATH Anda:

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

Atau untuk bertahan di PATH:

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

Untuk mengkompilasi dengan rantai alat Anda sekarang dapat menambahkan CROSS_COMPILEparameter. Misalnya, saat menjalankan make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

Atau untuk mempermudah ini, Anda dapat menyimpan variabel ke bashrclagi:

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

dan sekarang gunakan variabel saat kompilasi:

make CROSS_COMPILE=${TARGET}
Jivings
sumber
1
Ini sepertinya gcc-4.5.1.
@ Tibor Apakah itu buruk?
Jivings
@Jivings Itu benar-benar tidak menjawab pertanyaan!
Alex Chamberlain
1
Saya tidak setuju dengan downvotes. @AlexChamberlain Ini menyarankan metode alternatif yang berharga untuk tindakan memakan waktu membangun rantai alat Anda sendiri.
Jivings
2
@Jivings: Ini sangat membantu. Sementara itu gcc4.7.1 (yang terbaik yang pernah saya miliki) dan floating point langsung berfungsi. Saya tidak bisa membuat floating point bekerja menggunakan deskripsi asli Chris yang diposting Tibor. Terima kasih banyak.
4

Perhatikan bahwa ketika membangun toolchain menggunakan ct-ng pada centos 6.3 pada sistem 64 bit saya terpaksa membatalkan pilihan untuk secara statis menghubungkan libstdc ++ karena tautan statis tidak didukung pada platform (tampaknya).

Selain itu, walaupun akan lebih baik menggunakan prchainilt toolchain dari repositori git, rantai itu tampaknya tidak bekerja pada Centos 6.3 - mungkin karena ia dibangun untuk sistem yang lebih modern atau semacamnya. Saya tidak benar-benar mencoba menjalankan ini.

Shane McCarron
sumber
3

Panduan ini mungkin bermanfaat.

Itu membantu saya mendapatkan milik saya. Saya menambahkan beberapa komentar tentang penyetelan juga.

Dean Matsen
sumber
3

Jika Anda ingin mendapat manfaat dari host cepat untuk mengkompilasi hal-hal untuk RPI Anda, saya sarankan untuk bekerja di lingkungan lintas melalui chroot dan QEMU. Ini dengan cara menggantikan kompiler silang tanpa kerumitan.

Cukup siapkan lingkungan lintas Debian menggunakan deboostrap / multistrap

(lihat bab QEMU / pendekatan debootstrap) dan Anda selesai.

sparkie
sumber
3

Jika Anda akan melakukan kompilasi silang dari OS X: inilah artikel yang bagus (dan satu-satunya yang berfungsi di web yang saya temukan).

Hal terbaiknya adalah penulis menyediakan toolchain lengkap yang sudah dikompilasi , jadi Anda hanya perlu mengunduh, unzip, dan me-mount gambar dmg. Dan itu saja, Anda siap melakukan kompilasi silang.

Anton Matosov
sumber
2

Jika Anda menginstal Ubuntu 64 bit edisi dan alat-alat dari Raspberry Pi SVN dan Anda mendapatkan kesalahan:

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

lari saja:

sudo apt-get install ia32-libs
Burung pemangsa
sumber
1

Carlson-Minot Inc. menyediakan toolchain prebuilt untuk target bare-metal dan GNU / Linux. Toolchain ini didasarkan pada Mentor Graphics Sourcery Lite toolchain dengan perbaikan dan adopsi untuk pengembangan OS X. Lihat

Anton Matosov
sumber