Kemarin upgrade jeroan Beaglebone Black(BBB). Mini komputer sebesar kartu kredit ini dibanding Raspberry Pi memang kalah populer. Tapi yang populer belum tentu jadi pilihan hati hehehe. Bagi saya, BBB unggul karena satu hal : PRU (Programmable Realtime units) yang diusung oleh processor Sitara AM3588. Tapi soal PRU ini untuk cerita lain kali saja.
Kali ini soal toolchain &
cross compiler yang gampang-gampang ruwet karena terlalu pemilih :).
Di bawah ini, satu program Hello World ! default Eclipse IDE. Karena Anda mengerjakan di PC dengan processor arsitektur Intel/AMD64 , maka program ini hanya bisa jalan di PC pada umumnya (Jika kompiler yang digunakan standar alias kompiler dengan arsitektur Intel/AMD64).
Jika hasil kompilasi binary Anda kopikan ke BBB, program tidak bisa dieksekusi karena BBB menggunakan processor berbasis ARM. (Hei ! Handphone terbaru Anda juga menggunakan arsitektur ARM juga lho ! ). Lain cerita jika program ini dikompilasi di BBB langsung, maka program ini langsung jalan mulus.
Terus, mengapa tidak mengerjakan program langsung di BBB ? Oke-oke saja sih membuat program langsung di BBB, tapi jika program yang dibuat besar dan ruwet, waktu kompilasi akan berlangsung lama. Resources hardware BBB serba terbatas jika dibanding PC modern saat ini. BBB hanya punya RAM sebesar 1/2 GB saja dengan processor single core.
Jadi.. jika ingin membuat program di PC Anda yang gagah perkasa, melakukan kompilasi di situ juga, dan mengirim hasilnya ke BBB untuk di eksekusi, Anda mesti kencan dengan namanya Cross Compiler. Kompiler ini akan melakukan kompilasi untuk target processor ARM punya BBB . Cross, karena Anda mendapat coklat dari pacar resmi trus dikasihkan ke pacar gelap hehehe.
Untuk melakukan Cross compilation dibutuhkan 4 hal : Binutils, ARM GCC, GDB, dan Newlib . Rangkaian ini disebut dengan Toolchain.
Jadi Cross compilation merupakan aksi untuk melakukan kompilasi untuk target berbeda processor, dan untuk melakukan aksi itu dibutuhkan Toolchain.
Masalah jadi rumit karena untuk menyusun Toolchain tidak semudah membalik telapak tangan. Dibutuhkan dedikasi, semangat, pengorbanan, dan tetesan keringat,..bercanda bro 🙂
Setelah mencoba bongkar pasang dari berbagai Toolchain yang ada dipasaran, termasuk meracik sendiri yang gagal total hehehe, saya pilihkan opsi termudah dan uptodate dan yang terpenting bisa langsung jalan. Pilihan ini jatuh pada Toolchain yang diracik oleh Linaro.
Saya menemukan bahwa Toolchain mesti setara dengan GCC pada BBB. Karena versi akhir GCC pada BBB (saat ini di tulis) GCC versi 6.3 maka pilih Toolchain dengan GCC versi yang sama. Tapi jika ingin melihat versi yang lain, klik link ini.
Tampilan awal opsi download pada site Linaro. Pada opsi di bawah, pilih : arm-linux-gnueabihf
Versi terakhir Toolchain saat ini adalah 7.3. Hasil kompilasi dari Toolchain Ini tidak jalan di BBB dengan GCC 6.3. Kecuali Anda upgrade GCC pada BBB jadi versi 7.3. Jadi mesti obok-obok untuk mencari versi sebelumnya. Kalau ingin yang versi 6.3 , klik link ini untuk download. Anda dapat menyesuaikan versi sesuai perkembangan jaman. Selain punya linaro, ada punya DS5/DS6 yang mesti bayar lisensi.
Contoh di atas adalah untuk Host Linux. Anda dapat memilih Toolchain untuk versi Ms Windows juga pada Linaro. Khusus Ms Windows, saya menemukan punya SysProg yang banyak dipakai juga (Belum saya coba).
Gambar di bawah hasil cross compilation di PC saya.
Gambar di bawah menunjukkan hasil eksekusi di BBB (Saya menggunakan Remote Application pada Eclipse IDE, dimana hasil kompilasi langsung di upload ke BBB lewat SSH dan dieksekusi).
Yang menarik, hasil perbandingan kompilasi langsung file exa.c di BBB dengan kompilasi lewat Toolchain. Ukuran file exa = 42,5 KB untuk kompilasi lewat Toolchain. Jika langsung di BBB exb=8,3 KB. Jadi bagaimanapun juga, melakukan kompilasi secara native jika memungkinkan lebih efisien untuk ukuran file.
Kesimpulan :
Toolchain diperlukan saat melakukan cross compilation. Hal ini dilakukan jika aktifitas development langsung pada BBB kurang memadai. Untuk program-program sederhana, selama waktu kompilasi tidak lama (hingga bisa ditinggal ngopi), lebih baik kompilasi dilakukan secara native tanpa Toolchain.
Urusan Toolchain gampang-gampang susah. Untuk mengurangi keruwetan, digunakan racikan pabrik yang memang spesialisasinya disana. Kali ini digunakan punya Linaro. Kalau waktu berkenan, tidak dikejar laporan pajak, atau diajak kencan pacar baru, Toolchain bisa disusun sendiri dengan 4 komponen : Binutils , ARM GCC, GDB, dan Newlib.
Peace !