KOMPILASI SILANG PAKET UNTUK DITANAM PADA LINUX FAMILIAR DI QEMU
ABDI WAHAB 41505010087
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER UNIVERSITAS MERCU BUANA JAKARTA 2009
KOMPILASI SILANG PAKET UNTUK DITANAM PADA LINUX FAMILIAR DI QEMU Laporan Tugas Akhir Diajukan Untuk melengkapi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer
ABDI WAHAB 41505010087
PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER UNIVERSITAS MERCU BUANA JAKARTA 2009
LEMBAR PERNYATAN
Yang bertanda tangan dibawah ini: NIM
: 41505010087
Nama
: Abdi Wahab
Judul Tugas Akhir
: Kompilasi Silang Paket Untuk Ditanam Pada Linux Familiar di Qemu
Menyatakan bahwa skripsi tersebut diatas adalah hasil karya saya sendiri dan bukan plagiat. Apabila ternyata ditemukan didalam laporan saya terdapat unsur plagiat, maka saya siap untuk mendapatkan sanksi akademik yang terkait dengan hal tersebut.
Jakarta, Februari 2009
Abdi Wahab
iii
LEMBAR PERSETUJUAN
NIM
: 41505010087
Nama
: Abdi Wahab
Judul
: Kompilasi Silang Paket Untuk Ditanam Pada Linux Familiar di Qemu
SKRIPSI INI TELAH DIPERIKSA DAN DISETUJUI JAKARTA, Februari 2009
Abdusy Syarif, ST., MT Pembimbing
Devi Fitrianah, S.Kom., MTI
Abdusy Syarif, ST., MT
Koord. Tugas Akhir Teknik Informatika
KaProdi Teknik Informatika
iv
KATA PENGANTAR
Puji syukur Alhamdulillah kehadirat Allah SWT yang telah melimpahkan segala rahmat dan karuniaNya, sehingga penulis dapat menyelesaikan laporan tugas akhir yang merupakan salah satu persyaratan untuk menyelesaikan program studi strata satu (S1) pada Prodi Teknik Informatika Universitas Mercu Buana. Penulis menyadari bahwa laporan tugas akhir ini masih jauh dari sempurna. Karena itu, kritik dan saran akan senantiasa penulis terima dengan senang hati. Dengan segala keterbatasan, penulis menyadari pula bahwalaporan tugas akhir ini takkan terwujud tanpa bantuan, bimbingan, dan dorongan dari berbagai pihak. Untuk itu, dengan segala kerendahan hati, penulis menyampaikan ucapan terima kasih kepada: 1. Bapak Abdusy Syarif, ST., MT selaku pembimbing tugas akhir dan Kaprodi Teknik Informatika Universitas Mercu Buana 2. Ibu Devi Fitrianah S.Kom., MTI selaku koordinator tugas akhir pada Prodi Teknik Informatika Universitas Mercu Buana. 3. Bapak dan Ibu Dosen yang mengajar di Universitas Mercu Buana yang tidak dapat penulis sebutkan satu per satu. 4. Bapak dan Ibu tercinta yang telah mendukung penulis dalam segala hal. 5. Saudara dan sahabat-sahabatku yang telah memberikan dukungan moral untuk terus menyelesaikan tugas akhir ini.
v
Semoga Allah SWT membalas kebaikan dan selalu mencurahkan hidayah serta taufikNya, Amin. Jakarta, Februari 2009
Penulis
vi
ABSTRAK
Pada sistem operasi kecil, seperti Linux Familiar yang diinstal di Pocket PC memiliki keterbatasan media penyimpanan. Ini menyebabkan pengurangan paket yang ada di dalamnya. Salah satu paket yang dikurangi adalah gcc, yang merupakan kompilator dasar di linux. Hal ini menyebabkan penambahan paket baru menjadi susah, karena kebanyakan paket yang baru disediakan dalam bentuk tar.gz (tarball), dan harus dikompilasi dengan gcc. Salah satu cara untuk penambahan paket baru berekstensi tar.gz ke Familiar linux adalah dengan cara kompilasi silang. Kompilasi silang yang dilakukan pada penelitian ini hanya sebatas untuk merubah paket tar.gz tersebut menjadi .so dan .o serta file biner jika ada. Juga mencoba untuk mengkompilai silang source code dalam bahasa C/C++. Kompilasi silang dilakukan dengan kompilator silang, seperti monmotha, armlinux-gcc, dan gcc cross compiler. Dari ketiga kompilator silang tersebut, hanya gcc cross compiler yang berhasil melakukan kompilasi silang, baik kompilasi di komputer host ataupun saat eksekusi di komputer target. Sedangkan untuk monmotha dan arm-linux-gcc hanya mampu mengkompilasi di komputer host saja, sedangkan eksekusi di komputer target gagal. Hal ini disebabkan karena arsitektur mesin yang dipakai Linux Familiar yang diinstal di emulator berbeda dengan arsitektur mesin tujuan kompilator tersebut. Kompilator silang ini diharapkan mampu memutakhirkan Familiar Linux. Dan dari hasil penelitian, akan lebih baik jika dapat dikembangkan kompilator silang dengan banyak arsitektur mesin. Kata kunci : Familiar Linux, kompilasi silang, paket tarball. xiii+62 halaman, 19 gambar, 2 lampiran Daftar acuan: 13 (1999-2009)
vii
ABSTRACT
In lite operating system, such as Familiar Linux installed on Pocket PC has limited storage media. This cause packages reduction in it. One of the reduction package is gcc, which is a base compiler in linux. This cause a problem in adding a new package which is provided in tar.gz (tarball), and it must be compiled with gcc. One way for adding a new tar.gz package into Familiar Linux is cross compile. The cross compile in this research is limited to change a tar.gz package into .so and .o, and also a binary file (executable). In this project we also try to cross compiling C/C++ source code. Cross compile is done by cross compiler, such as monmotha, arm-linux-gcc, and gcc cross compiler. From all of cross compiler, only gcc cross compiler can do the cross compile successfully, whether the compilation in host computer or the execution in target computer. Meanwhile for monmotha and arm-linux-gccjust only make a compilation in host computer, but failed when running the execution in target computer. This condition is happened because the machine architecture of Familiar Linux, which is installed in emulator, different with compiler target machine architecture. The cross compile is expected to update Familiar Linux. And from the result research, it's will be better if can be developed a cross compiler with a lot of machine architecture target. Key words: Familiar Linux, cross compile, tarball package xiii+62 pages, 19 figures, 2 attachments Bibliography: 13 (1999-2009)
viii
DAFTAR ISI
JUDUL JUDUL DENGAN SPESIFIKASI LEMBAR PERNYATAAN LEMBAR PERSETUJUAN KATA PENGANTAR ABSTRAK ABSTRACT DAFTAR ISI DAFTAR GAMBAR
ii iii iv v vii viii ix xii
DAFTAR ISTILAH BAB I PENDAHULUAN 1.1 Latar Belakang 1.2 Permasalahan 1.3 Tujuan dan Manfaat 1.4 Batasan Masalah 1.5 Metode Penelitian 1.6 Sistematika Penulisan BAB II LANDASAN TEORI 2.1 Kompilator (Compiler) 2.1.1 Sejarah Kompilator 2.1.2 Fungsi Kompilator 2.2 Kompilator Silang 2.2.1 Beberapa Contoh Kompilator Silang 2.3 Qemu 2.3.1 Poky-qemu 2.4 Linux Familiar 2.4.1 Kelebihan dan Kekurangan Linux Familiar 2.5 Tarball 2.6 Sistem Pembangunan GNU (GNU Build System) 2.6.1 Autoconf 2.6.2 Automake 2.6.3 Libtool
xiii 1 1 2 2 3 3 4 6 6 6 7 8 10 11 13 14 17 18 19 20 21 21
ix
2.6.4 Configure 2.6.5 Makefile 2.7 GNU Compiler Collection (GCC) 2.7.1 Sejarah GCC 2.7.2 Kegunaan GCC BAB III ANALISA DAN PERANCANGAN KOMPILASI SILANG 3.1 Analisa Masalah dan Alternatif Pemecahan Masalah 3.1.1 Analisa Masalah 3.1.2 Pemecahan Masalah 3.1.3 Kompilator Silang yang Digunakan 3.1.3.1 Kelebihan dan Kekurangan Kompilator Silang yang Digunakan 3.1.4 Analisa Untuk Kernel Header 3.1.5 Analisa Makefile 3.2 Penginstalasian Cross Compiler di Platform Host 3.3 Rancangan Linux Familiar di Qemu 3.3.1 Instalasi Qemu 3.3.2 Instalasi Skrip poky-qemu 3.4 Menjalankan Image Linux Familiar BAB IV IMPLEMENTASI DAN ANALISA KOMPILASI SILANG 4.1 Spesifikasi Perangkat Lunak dan Perangkat Keras 4.1.1 Spesifikasi Perangkat Keras 4.1.2 Spesfikasi Perangkat Lunak 4.2 Tampilan Komputer Host dan Komputer Target 4.2.1 Tampilan Komputer Host 4.2.2 Tampilan Komputer Target 4.3 Uji Kompilasi Silang 4.3.1 Lingkup Pengujian 4.3.2 Kompilasi Silang Untuk .c atau .cpp 4.3.3 Kompilasi Silang Untuk Paket Linux (.tar.gz) 4.3.4 Skenario Pengujian 4.3.5 Hasil Pengujian 4.4 Analisa Hasil BAB V PENUTUP 5.1 Kesimpulan 5.2 Saran
x
21 22 25 26 26 28 28 28 29 31 31 32 33 34 37 38 39 40 43 43 43 43 44 45 45 46 46 47 50 55 57 58 60 60 60
DAFTAR PUSTAKA LAMPIRAN
62
xi
DAFTAR GAMBAR
Gambar 2.1 Struktur Kompilasi Gambar 2.2 Opie Sreenshot Gambar 2.3 GPE Screenshot Gambar 2.4 Pinky Screenshot Gambar 2.5 Flow Diagram Makefile dan Configure Gambar 3.1 Kompilasi Silang (Cross Compile) Gambar 3.2 Kernel Tree Gambar 3.3 Test Qemu Gambar 3.4 Boot-Pinky melalaui Qemu
8 15 16 17 24 30 33 39 42
Gambar 4.1 Komputer host dengan kompilator silang yang telah terinstall Gambar 4.2 Komputer target dilihat dari terminal Gambar 4.3 Kompilasi Silang dari C Gambar 4.4 Penyalinan File Biner dari Komputer Host ke Komputer Target Gambar 4.5 Menjalankan Hasil Kompilasi Silang di Komputer Target Gambar 4.6 Menjalankan tictactoe di Komputer Target Gambar 4.7 sudoku yang Dijalankan di Komputer Target Gambar 4.8 Libpng yang Terinstal di Komputer Target Gambar 4.9 Hasil Eksekusi File Biner dari monmotha di Komputer Target Gambar 4.10 Hasil Eksekusi File Biner Dari Paket .tar.gz dengan monmotha
45 46 48 49 50 52 53 55 56 57
xii
DAFTAR ISTILAH
Configure: metode untuk merubah source code sebelum pengkompilasian.
Emulator: Perangkat lunak untuk menjalankan program dari sebuah sistem untuk dijalankan di sistem yang lain.
GCC (GNU Compiler Collection): Kompilator yang dikembangkan oleh GNU yang mendukung berbagai bahasa pemrograman.
Host: komputer yang melakukan kompilasi silang, biasanya PC biasa.
Kernel Header: kumpulan file header (biasanya berekstensi .h) untuk sebuah kernel pada linux.
Kompilator: program komputer untuk merubah source code yang ditulis menjadi faile yang dapat dieksekusi.
Make: utilitas untuk membangun program yang dapt dieksekusi secara otomatis.
Mesin Arm: Mesin prosesor 32-bit biasanya untuk sistem tertanam RISC (Reduced Instruction Set Computing)
Monmotha: Kompilator silang khusus untuk mesin arm.
Paket: kumpulan source code yang di gabung menjadi satu dengan metode tertentu.
Pocket PC: PC yang berukuran kecil seperti ukuran dompet, dan memiliki mobilitas yang tinggi hampir menyerupai telepon genggam.
Sistem Tertanam: sistem komputer untuk tujuan khusus, didesain untuk menampilkan satu atau beberapa fungsi tertentu.
Target: komputer yang menjalankan hasil kompilasi silang, biasanya komputer berarsitektur kecil.
Qemu: emulator processor
xiii
1
BAB I PENDAHULUAN
1.1 Latar Belakang
Pocket PC adalah suatu perangkat keras / device yang dapat digunakan pada kondisi mobilitas yang tinggi. Dengan Pocket PC, seseorang dapat menggantikan peran PC sesungguhnya walaupun masih terdapat keterbatasannya. Salah satu keterbatasannya adalah media penyimpanan yang kecil, sehingga data-data yang dapat diproses tidak banyak. Media penyimpanan yang kecil ini menyebabkan Pocket PC harus menggunakan sistem operasi yang kecil (lite) juga. Untuk saat ini tersedia dua jenis sistem operasi kecil, yaitu yang close source serta berbayar dan open source serta gratis. Contoh dari sistem operasi kecil untuk close source adalah sistem operasi yang dibuat oleh Microsost Corp. yang diberi nama Windows Mobile. Sedangkan untuk sistem operasi kecil yang berbasis open source adalah Familiar Linux. Terbatasnya media penyimpanan pada Pocket PC membuat Familiar linux mengurangi package-package yang biasanya terdapat dalam linux biasa. Salah satu package yang dihilangkan dari Linux Familiar adalah GCC (GNU Compiler Collection). Padahal GCC adalah alat kompilator (compiler), dan biasa digunakan untuk mengkompilasi package linux berekstensi tarball (tar.gz). Hal ini
2
menyebabkan package berekstensi tarball tidak dapat dikompilasi di dalam Linux Familiar. Untuk penambahan package yang ingin digunakan di Linux Familiar, terdapat package khusus yang telah disediakan oleh Linux Familiar. Akan tetapi package yang disediakan masih terbatas, karena pengembang linux kebanyakan membuat package dengan ekstensi .tar.gz (tarball). Sehingga diperlukan metode khusus untuk merubah package tarball yang ingin ditambahkan kedalam Linux Familiar menjadi package yang didukung oleh Linux Familiar.
1.2 Permasalahan
Permasalahan yang memicu cross compile ini adalah terbatasnya package yang disediakan oleh Linux Familiar dan juga tidak terdapatnya gcc untuk mengkompilasi package tarball yang ingin ditambahkan. Sehingga menyulitkan bagi pengguna untuk memutakhirkan Linux Familiarnya jika terdapat sesuatu yang baru.
1.3 Tujuan dan Manfaat
Tujuan dari penulisan ini adalah untuk membantu dalam menghasilkan package baru, yaitu sudoku, tictactoe, dan libpng yang dapat digunakan di Linux Familiar. Sehingga memudahkan pengguna dalam memutakhirkan Linux
3
Familiarnya. Dan menyediakan suatu komputer yang telah dilengkapi dengan cross compiler.
1.4 Batasan Masalah
Batasan masalah yang digunakan pada penulisan tugas akhir ini adalah perubahan atau pembuatan package tarball agar dapat dijalankan pada Familiar Linux dengan metode cross compile menggunakan toolchain yaitu monmotha, arm-linux-gcc, dan gcc cross compiler. Mencoba merubah source code yang ditulis dengan bahasa C/C++ menjadi file biner yang dapat dijalankan di komputer target dan beberapa paket yang berekstensi tar.gz, yaitu tictactoe, sudoku, dan libpng untuk dirubah menjadi executable file, .so dan .o.
1.5 Metode Penelitian
Metode yang digunakan dalam penelitian ini adalah sebagai berikut : 1. Analisa Kebutuhan Menganalisa kebutuhan apa saja yang diperlukan untuk melakukan penelitian. Mulai dari literatur, dan bahan-bahan lain yang mendukung penelitian ini. 2. Instalasi dan Konfigurasi
4
Mempersiapkan perangkat keras dan perangkat lunak yang diperlukan untuk membangun dan mendukung penelitian. Penginstalasian toolchain atau cross compiler yang akan digunakan pada penelitian. 3. Pengujian dan Pengumpulan Data Tahap ini untuk menguji hasil dari penelitian, apakah sudah dapat berjalan dengan baik atau belum. Dan juga menampilkan skenario pengujian untuk dapat dijadikan untuk pengumpulan data. 4. Analisa Analisa akhir dari hasil penelitan. Baik kekurangan maupun kesalahan yang terjadi.
1.6 Sistematika Penulisan
Penulisan tugas akhir ini disajikan oleh penulis dalam lima bab pokok bahasan, yang secara singkat akan diuraikan sebagai berikut : BAB I PENDAHULUAN Pada bab ini berisi tentang hal-hal umum mengenai maksud dan tujuan penulisan tugas akhir yang terdiri dari latar belakang diadakannya penelitian, permasalahan yang terjadi, tujuan dan manfaat dari penelitian, batasan masalah, metode penelitian yang digunakan, dan sistematika dalam penulisan tugas akhir ini. BAB II LANDASAN TEORI
5
Pada bab ini berisi tentang konsep dasar teori yang digunakan dalam penyusunan tugas akhir ini. Mulai dari kompilasi package di linux, GCC, cross compile, Familiar Linux, dan juga poky-qemu. BAB III ANALISA DAN PERANCANGAN KOMPILASI SILANG Pada bab ini berisi tentang analisa masalah, rancangan sistem, dan rancangan testbed untuk melakukan kompilasi silang (cross compile). Dan juga perancangan untuk menggantikan Linux Familiar yang biasanya berjalan di Pocket PC diganti dengan Linux Familiar yang berjalan di emulator. BAB IV IMPLEMETASI DAN ANALISA KOMPILASI SILANG Pada bab ini berisi tentang pengimplementasian dari hasil package cross compile. Hasil dari package yang akan dijalankan pada Linux Familiar. Linux Familiar yang dijalankan dengan emulator. BAB V PENUTUP Bab ini berisi kesimpulan dan saran hasil dari penelitian cross compile package yang dapat digunakan untuk mengembangkan lagi metode ini.
6
BAB II LANDASAN TEORI
2.1 Kompilator (Compiler)
Kompilator adalah sebuah program komputer (atau susunan program) yang merubah source code yang ditulis dalam bahasa komputer (bahasa awal) menjadi bahasa komputer lain (bahasa target, sering berupa bentuk biner dikenal sebagai kode objek) (http://en.wikipedia.org/wiki/Compiler). Tujuan dari kompilasi ini adalah untuk mendapatkan program yang dapat dieksekusi. Nama “kompilator (compiler)” awalnya digunakan untuk program yang mentranslasi source code dari bahasa pemrograman tingkat tinggi menjadi bahasa pemrograman tingkat rendah (contohnya bahasa assembly dan bahasa mesin). Ada juga istilah “decompiler”, yaitu kebalikan dari compiler. Sebuah program yang merubah dari bahasa pemrograman tingkat rendah menjadi bahasa pemrograman tingkat tinggi, itulah decompiler.
2.1.1 Sejarah Kompilator
Pada awal berdirinya komputer, kompilator (compiler) dibuat sesuai CPU mesinnya. Sehingga menyebabkan harga (cost) yang tinggi dalam membuat kompilator (compiler) dibandingkan dengan membuat perangkat lunak (software).
7
Setelah ditemukannya mesin-tak tergantung pada bahasa pemrograman pada akhir tahun 1950-an, barulah dikembangkan beberapa percobaan kompilator (compiler). Akhirnya pada tahun 1952, ditulislah kompilator pertama oleh Grace Hopper. Kompilatornya digunakan untuk bahasa pemrograman A-0. Di tahun 1957, diperkenalkan compiler komplit pertama, yang dikembangkan oleh tim FORTRAN
yang
dipimpin
oleh
Grace
Hopper
di
IBM
(http://en.wikipedia.org/wiki/Compiler). Kompilator pertama ditulis dalam bahasa assembly. Kompilator self-hosting pertama yang mampu mengkompilasi kompilator source code miliknya sendiri dalam bahasa tingkat tinggi. Kompilator ini diciptakan untuk Lisp oleh Tim Hart dan Mark Levin di MIT tahun 1962. Semenjak tahun 1970-an kompilator sudah menjadi umum untuk mengimplementasikan sebuah kompilator di dalam bahasa yang dikompilasi oeh kompilator.
2.1.2 Fungsi Kompilator
Fungsi dari kompilator (compiler) adalah sebagai berikut :
Melalukan translasi dari bahasa pemrograman tingkat tinggi (sumber program) ke bentuk yang sama dengan bahasa program mesin.
Memberikan pesan sebagai diagnostik bila terdapat kesalahan pada sumber program di bahasa tingkat tinggi yang dibuat oleh programmer.
Beberapa contoh compiler yang sering dijumpai dalam kehidupan sehari-hari
8
adalah compiler C / C++, compiler Pascal, compiler Java, dan lain-lain. Hampir setiap bahasa pemrograman menpunyai compiler. Gambar dibawah ini menjelaskan tentang struktur kompilasi pada sebuah compiler (http://www.webopedia.com/TERM/C/compiler.html).
Gambar 2.1 Struktur kompilasi Gambar diatas menjelaskan tentang struktur kompilasi pada sebuah compiler. Berawal dari sebuah Source File yang dirubah menjadi Object File. Object File ini yang nantinya terhubung dengan library-library yang ada dan sedang berjalan pada sistem operasi, disebut dengan Runtime Library, melalui sebuah Linker untuk dapat menjalankan program yang hendak dieksekusi atau disebut Executable Program.
2.2 Kompilasi Silang (Cross Compile)
9
Kompilasi silang adalah kemampuan compiler menciptakan kode yang dapat dieksekusi untuk platform lain selain untuk platform dimana compiler dijalankan. Cross compile tools biasanya digunakan untuk melakukan kompilasi pada sistem tertanam (embedded system) atau platform beragam (multiple platforms). Biasanya juga cross compile banyak terdapat pada sistem operasi Linux. Pada cross compile terdapat istilah host, yaitu untuk komputer yang menjalankan compiler. Sedangkan target adalah komputer yang menjalankan program yang telah dikompilasi oleh komputer host. Terdapat beberapa faktor mengapa cross compile digunakan pada kebanyakan sistem
tertanam
(embedded
system)
(http://landlay.net/writing/docs/cross-
compiling.html) diantaranya adalah:
Kecepatan – Platform target biasanya lebih lambat dibandingkan platform host, dengan urutan magnitude atau lebih. Kebanyakan perangkat keras tertempel khusus dibuat dengan cost yang rendah dan juga konsumsi power yang rendah pula, bukan untuk performa yang tinggi.
Kemampuan – Mengkompilasi sangat intensif dalam sumber daya. Platform target biasanya tidak mempunyai bergiga-giga memori pada ruang disk sebagaimana yang dimiliki oleh PC biasa, bahkan mungkin tidak memiliki sumber daya untuk membangun paket kecil seperti “hello world”, apalagi paket besar dan rumit.
Ketersediaan – Membawa Linux pada perangkat keras platform tidak akan bisa berjalan sebelum dilakukan cross compile. Bahkan untuk platform yang sudah lama stabil seperti Arm dan MIPS, untuk memutakhirkan
10
Linux dengan fitur-fitur baru sangatlah susah. Salah satu cara adalah kembali lagi ke cross compile.
Fleksibelitas – Distribusi Linux yang lengkap terdiri dari ratusan paket, tapi lingkungan cross compile bisa tergantung host yang ada dari banyak hal. Cross compile fokus pada pembuatan paket target untuk dikirim, tidak membuang waktu untuk membangun kebutuhan awal untuk dijalankan di sistem target.
Kenyamanan
–
Cross
compile
memberikan
kenyamanan
dalam
menginstalasi paket. Tidak perlu untuk memasukkan CD ataupun merestart paltform yang digunakan.
2.2.1 Beberapa Contoh Kompilator Silang
Ada banyak tool untuk melakukan cross compile, diantaranya adalah monmotha, arm-linux-gcc, gcc cross compiler dan lain-lain. Prinsip kerja dari masing-masing dari tool-tool diatas adalah sama, yaitu membentuk objek yang bisa digunakan di platform target. Penulis akan menjelaskan beberapa diantaranya.
Monmotha. Monmotha merupakan kompilator silang untuk mesin arm yang kebanyakan dipakai oleh Pocket PC. Monmotha dapat diunduh dari http://www.handhelds.org/download/project/toolchain/monmotha/.
Arm-linux-gcc. Tool ini juga tidak jauh berbeda dengan monmotha, hanya saja arm-linux gcc memilki versi dari setiap keluarannya seperti arm-linux-
11
gcc-3.4.1.tar.gz, ini untuk yang versi 3.4.1. Untuk arm-linux-gcc dapat diunduh dari http://www.handhelds.org/download/project/toolchain.
gcc cross-compiler. Untuk gcc sendiri juga menyediakan tool untuk melalkukan kompilasi silang. Bahkan untuk beberap mesin disediakan oleh gcc. Tapi gcc harus terkait dengan beberapa library untuk dapat melakukan kompilasi silang, diantarany adalah binutils, libc6, libgcc1, dan beberapa paket terkait. Untuk mengunduh gcc bisa melalui http://gcc.gnu.org.
2.3 QEMU
Qemu adalah sebuah emulator lebih tepatnya emulator processor. Qemu menggunakan sebuah dinamik translasi sehingga membuat qemu dapat berjalan dengan cepat. Qemu
mempunyai
dua
mode
operasi
(http://bellard.org/qemu/qemu-
doc.html) yaitu:
Emulasi seluruh system. Pada mode ini, qemu mengemulasi seluruh sistem (sebagai contoh PC), termasuk satu atau beberapa processor dan berbagai perangkat. Ini dapat digunakan untuk menampilkan sistem operasi yang berbeda tanpa harus me-reboot PC atau men-debug kode sistem.
Emulasi mode user. Pada mode ini, qemu dapat menjalankan proses-proses kompilasi untuk suatu CPU pada CPU yang lain. Ini bisa digunakan untuk menjalankan Wine Windows Api Emulator (http://winehq.org) atau untuk
12
memudahkan cross-compilation dan cross-debugging. Dibawah ini adalah target perangkat keras yang didukung oleh qemu, diantaranya adalah :
PC (x86 atau x86_64 processor)
ISA PC (PC model lama tanpa bus PCI)
PREP (PowerPC Processor)
G3 BW PowerMac (PowerPC processor)
Mac99 PowerMac (PowerPC processor, dalam progres)
Sun4m/Sun4c/Sun4d (32-bit Sparc processor)
Sun4u (64-bit Sparc processor, dalam progres)
Malta board (32-bit dan 64-bit MIPS processor)
ARM Integrator/CP (ARM)
ARM Versatile baseboard (ARM)
ARM RealView Emulation baseboard (ARM)
PDA Spitz, Akita, Borzoi, Terrier (PXA270 processor)
Luminary Micro LM3S811EVB (ARM Cortex-M3)
Luminary Micro LM3S6965EVB (ARM Cortex-M3)
Freescale MCF5208EVB (ColdFire V2)
Arnewsh MCF5206 evaluation board (ColdFire V2)
Palm Tungsten|E PDA (OMAP310 processor)
Qemu dapat berjalan tanpa driver kernel host dan memberikan performa yang baik. Selain itu qemu juga dapat terintegrasi dengan skrip lain untuk menjalankan image dari luar yang tidak dibuat oleh qemu. Contoh terintegrasinya
13
antara qemu dengan skrip yang lain adalah poky-qemu. Untuk qemu sendiri dapat diunduh di alamat http://debian.o-hand.com/, atau biasanya tiap distro dari Linux sudah menyediakan paket qemu tersendiri pada repositorynya masing-masing. Qemu tidak hanya berjalan di Linux, tapi juga dapat berjalan di Windows sebagaimana yang dilaporkan oleh Paul Sokolovsky (http://www.handhelds.org/pipermail/familiar/312/31225.html) tentang qemu dan Familiar Linux di Windows. Untuk qemu versi Windows dapat di unduh dari http://www.h7.dion.ne.jp/~qemu-win. Selain itu, qemu juga dapat berjalan di Mac OS. Qemu di Mac OS bernama Q. Untuk melihat dan mengunduh qemu untuk Mac OS, dapat dari alamat http://www.kju-app.org. Kemudian ada juga qemu yang disediakan untuk OpenSolaris, untuk melihat dan mengunduh dapat melalui situs http://www.opensolaris.org/os/project/qemu/. Untuk versi qemu yang terbaru adalah qemu 9.1 (qemu-0.9.1tar.gz).
2.3.1 Poky-qemu
Poky-qemu adalah salah satu program yang disediakan oleh poky-script. Poky-script sendiri adalah paket yang berisikan kumpulan-kumpulan skrip yang berguna dalam membantu menjalankan image yang disediakan oleh Poky. Poky sendiri adalah sebuah tool yang dikembangkan untuk membantu dalam pengembangan sistem tertanam (embedded system), agar lebih mudah untuk di aplikasikan dan dikembangkan.
14
Selain menyediakan platform, Poky juga menyediakan image-image yang dapat digunakan pada banyak mesin, seperti mesin arm, X86, PPC, dan lain-lain. Dan juga menyediakan skrip-skrip untuk membantu mengembangkan sistem tertanam. Salah satunya adalah poky-script, yang didalamnya terdapat poky-qemu yang penulis gunakan. Skrip poky-qemu ini digunakan untuk menjalankan image Familiar linux dengan image berekstensi ext2 yang disediakan oleh Poky. Dan juga dengan kernel image yang harus disertakan untuk dijalankan bersamaan dengan image Familiar Linux.
Untuk
skrip
poky-qemu
dapat
diunduh
dari
http://svn.o-
hand.com/view/poky/trunk/script/poky-qemu. Bagi pengguna debian based dapat menggunakan repositry di alamat http://debian.o-hand.com/.
2.4 Linux Familiar
Linux Familiar adalah sebuah distro linux yang dikembangkan untuk membuat sistem operasi yang berjalan di Personal Digital Asistant (PDA) sebagai pengganti
Windows
Mobile
(http://en.wikipedia.org/wiki/Familiar_Linux).
Pengembangan Linux Familiar saat ini fokus kepada produksi yang lebih stabil, terutama pada power management, dan distribusi Linux yang penuh fitur untuk HP iPAQ series dan Personal Digital Asistant (PDA) yang lainnya. Aplikasi / paket yang didukung oleh Familiar Linux ini adalah berbasis ipkg. Ipkg ini adalah management paket untuk distribusi Linux kecil (lite). Bukan hanya
15
linux Familiar yang menggunakan ipkg tapi distro Armstrong juga menggunakan ipkg ini. Ipkg ini sama halnya dengan redhat package manager (rpm) ataupun deb. Linux Familiar terdapat beberapa lingkungan pengguna (user environment), atau bisa juga disebut windows management, diantaranya Opie, GPE, Pinky. Tampilan antara Opie dan GPE tidak jauh berbeda, sedangkan yang sedikit berbeda adalah Pinky. Untuk tampilan Opie screenshot-nya dapat dilihat pada gambar
di
bawah
(http://www.handhelds.org/moin/moin.cgi/FamiliarDistribution).
Gambar 2.2 Opie Screenshoot Sedangkan untuk GPE dapat dilihat pada gambar berikut ini
ini
16
Gambar 2.3 GPE Screenshot Sedangkan untuk Pinky Tampilannya seperti berikut
17
Gambar 2.4 Pinky Screenshot
2.4.1 Kelebihan dan Kekurangan Linux Familiar
Kelebihan dari Linux Familiar adalah sebagai berikut :
Memiliki kapasitas memori yang kecil ketika terinstal, sehingga tidak memakan banyak sumber daya memori pada perangkat keras yang digunakan (PDA).
Dapat terinstal pada flash memori (eksternal memori pada PDA), sehingga dapat membuat PDA memiliki dua sistem operasi. Hal ini dimungkinkan karena Linux Familiar menyediakan bootloader untuk mengintegrasikan
18
antara Linux Familiar dengan sistem operasi lain yang terdapat dalam satu PDA. Sedangkan untuk kekurangan dari Linux Familiar adalah sebagai berikut :
Pada Familiar Linux versi 0.8.2 masih memiliki power management yang kurang baik. Sehingga dapat menyebabkan perangkat keras yang terinstal Familiar Linux dapat mengalami kerusakan. Salah satu cara untuk mengatasi lemahnya power management dari Familiar Linux ini adalah dengan cara selalu menghidupkan Familiar Linux tersebut atau bila ingin dimatikan, lepaskan baterai dari PDA.
Belum banyaknya paket yang disediakan oleh Linux Familiar yang berbasis ipkg. Sehingga sedikit menyulitkan pengguna dalam hal memutakhirkan teknologi pada PDAnya. Hal ini disebabkan karena Linux Familiar di kembangkan tidak oleh sebuah perusahaan, tapi dikembangkan melalui banyak pengembang melalui komunitas yang ada di internet.
Untuk mendapatkan Linux Familiar, dapat diunduh dari http://handhelds.org.
2.5 Tarball
Tarball sebenarnya adalah salah satu utilitas pengarsipan. Sama halnya dengan zip, rar, dan utilitas pengarsipan yang lain. Tar diambil dari “tape archive”. Tape archive adalah format file (dalam bentuk tipe pengarsipan bitstream) dan nama program digunakan untuk menangani beberapa file. Format ini di standarisasi
oleh
POSIX-1.1988
dan
terakhir
POSIX-1.2001
19
(http://en.wikipedia.wiki/Tar(file_format)). Awalnya dikembangkan sebagai sebuah format mentah, digunakan untuk backup tape dan peralatan akses berurut yang lain untuk tujuan backup. Tapi umumnya sekarang digunakan untuk menyatukan koleksi-koleksi arsip (file) menjadi arsip (file) lebih besar lainnya, untuk distribusi atau pengarsipan, sementara menyediakan informasi sistem arsip seperti permisi dari pengguna dan group, tanggal dan struktur direktori. Sebuah arsip tar (contoh : namafile.tar), bila kemudian dikompresi dengan salah satu utilitas kompresi seperti gzip, bzip2, lzma, atau compress, menghasilkan sebuah arsip tar terkompresi dengan ektensi nama arsip (file) mengindikasikan tipe dari kompresi (contoh : namafile.tar.gz). Sebuah arsip tar adalah rentetan dari satu atau lebih arsip. Setiap arsip didahului oleh sebuah block header. Data arsip ditulis tanpa berubah kecuali besar data arsip melebihi dari 512 byte dan ruang extra sudah nol (habis). Akhir arsip ditandai oleh sedikitnya dua buah blok berisi nol. Sebuah block header arsip berisi metadata tentang arsip. Untuk memastikan kemudahan membawa didalam arsitektur yang berbeda dengan permintaan byte berbeda. Informasi didalam block header dienkode dalam ASCII. Dengan demikian jika semua file didalam arsip adalah file teks, maka arsip pada dasarnya adalah sebuah file ASCII.
2.6 Sistem Pembangunan GNU (GNU Build System)
20
Sistem Pembangunan GNU (GNU build system) yang sering juga disebut sebagai autotools adalah sebuah sederetan tool pemrograman, yang diproduksi oleh proyek GNU. Selain itu sistem pembangunan GNU (GNU build system) juga mendukung dalam pembuatan alat untuk melakukan kompilasi silang (Taylor 24). Sistem pembangunan GNU, meliputi program utilitas GNU yaitu Autoconf, Automake, dan Libtool (http://en.wikipedia.org/wiki/GNU_build_system).
2.6.1 Autoconf
Autoconf
memproses
file
(configure.in
atau
configure.ac)
untuk
menghasilkan sebuah skrip konfigurasi. Ketika menjalankan skrip konfigurasi, file yang lain, biasanya diakhiri dengan “.in” seperti Makefile.in, diproses untuk menghasilkan hasil akhir, pada masalah ini akan menghasilkan Makefile. Autoconf digunakakan untuk berusaha bekerja pada kebiasaan yang ditemukan pada kebanyakan sistem operasi menyerupai Unix. Hasil akhir dari utilitas Autoconf adalah skrip configure. Autoconf muncul dengan beberapa program pembantu yang dibuat untuk memudahkan pembuatan configure.ac, seperti Autoheader tool, yang digunakakn untuk membantu mengantur file header C, autoscan, yang bisa menghasilkan sebuah file inisial masukkan untuk Autoconf dan ifnames, yang bisa mendaftar
21
identifikasi pre-processor C yang digunakan di dalam program.
2.6.2 Automake
Automake membantu untuk menciptakan Makefile yang portable, yang selanjutnya diproses oleh utilitas make. Automake menghasilkan masukkan sebagai Makefile.am, dan merubahnya menjadi Makefile.in, yang digunakan oleh skrip configure untuk membangkitkan file keluaran Makefile.
2.6.3 Libtool
Libtool membantu mengatur pembuatan library static dan dinamic pada sistem operasi menyerupai Unix. Libtool menyelesaikan ini dengan pengabstrakan prose penciptaan library, menyembunyikan perbedaan-perbedaan diantara berbagai sistem.
2.6.4 Configure
Skrip configure adalah metode otomatis untuk pengubahan source code sebelum pengkompilasian untuk menghasilkan kode yang dicetak ke sistem di mana file biner yang dapat dieksekusi dikompilasi dan dijalankan. Skrip configure umumnya dijalankan langsung sebelum kompilasi pada mesin dimana perangkat
22
lunak akan digunakan. Skrip configure dibangkitkan oleh Autotool. Skrip-skrip ini meminta sistem di mana configure skrip dijalankan untuk aturan lingkungannya, arsitektur platform, dan keberadaan dan lokasi paket-paket terkait yang dibutuhkan dan yang sedang berjalan. Skrip-skrip Autotool tersebut kemudian menggunakan informasi yang terkumpul untuk memproses dan mengisi template, biasanya berakhiran .in. Setelah sukses selesai, umunya untuk skrip configure memberikan laporan ke pengembang yang memintanya. Karena ketidak tergantungannya terhadap platform dan pengalaman pengembang dengan tatap muka skrip configure, banyak potongan terkenal perangkat lunak gratis dan perangkat lunak berpemilik menggunakan sistem ini selama pendeteksian dan tahap pembangkitan Makefile. Setelah skrip configure telah dihasilkan maka untuk membangun perangkat lunak yang menggunakan Autotool dapat dengan mudah dilakukan sebagai berikut : ./configure && make && make install
2.6.5 Makefile
Dalam pengembangan perangkat lunak, make adalah utilitas untuk membangun program yang dapat dieksekusi secara otomatis. Arsip (file) yang disebut makefile menspesifikasikan bagaimana cara menurunkan program target dari tiap-tiap ketergantungan program target.
23
Sekarang ini ada banyak utilitas pembuatan penjejakan ketergantungan, tapi hanya make yang menyebar dengan luas, terutama karena penyertaan make pada Unix. Make pertama kali diciptakan oleh Stuart Feldman tahun 1977 di Laboratorium Bell. Pada tahun 2003, Dr. Feldman mendapatkan Penghargaan Sistem Software ACM untuk penemuan tool yang penting ini. Make telah melalui sejumlah penulisan ulang, dan sejumlah varian yang sama yang menggunakan format arsip (file), dan dasar prinsip algoritma yang sama, dan juga memberikan sejumlah perangkat tambahan non-standard sendiri, seiring berjalannya waktu. Beberapa diantaranya adalah :
BSD make, yang diturunkan dari pekerjaan Adam de Boor pada versi make yang mampu membangun target dalalm paralel, dan bertahan dalam berbagai tingkatan modifikasi di FreeBSD, NetBSD, dan OpenBSD.
GNU make, bagian dari distribusi linux, dan sering digunakan bersama dengan sistem pembangunan GNU (GNU build sistem).
Microsoft nmake, umumnya tersedia di Windows. Nmake cukup mendasar karena hanya menawarkan sekumpulan fitur dari dua versi yang disebutkan diatas. Nmake milik Microsoft tidak sama dengan nmake milik laboratorium AT & T dan Bell untuk Unix.
Make dalam bentuk dasarnya butuh programmer secara manual menelusuri seluruh ketergantungan diantara arsip (file) dalam proyek. Proses ini adalah kesalahan yang rawan, jika sebuah ketergantungan lupa atau ditambah tidak dapat dilakukan dengan baik. Akibatnya akan menimbulkan sedikit bug pada perangkat keras. Bug ini akan bisa dipecahkan dengan membuat arsip make yang
24
memasukkan beberapa ketergantungan, tapi solusi yang umum adalah dengan menggunakan salah satu generator untuk make, contohnya toolchain Automake yang disediakan oleh proyek GNU. Makefile terdiri dari baris text yang mendefinisikan sebuah arsip (atau sekumpulan arsip) atau sebuah nama aturan sebagaimana tergantung pada susunan file. Arsip keluaran dtandai sebagaimana tergantung pada sumber arsipnya. Gambar dibawah ini adalah flow diagram untuk makefile dan configure.
25
Gambar 2.5 Flow Diagram makefile dan configure Gambar di atas menjelasakan terdapat tiga buah tool untuk sistem pembangunan GNU, yaitu configure, automake, dan autoconf. Dari gambar terlihat bahwa makefile muncul setelah configure dilakukan. Sistem ini sering dilakukan ketika akan melakukan instalasi paket pada Linux atau Unix, tapi yang berekstensi tarball. Secara garis besarnya dalam instalasi paket di linux adalah dengan perintah berikut :
configure
make
make install
Bila tidak terdapat pesan kesalahan (error) maka paket sudah dapat digunakan. Sama halnya dengan yang ditunjukkan dalam gambar.
2.7 GNU Compiler Collection (GCC)
GNU Compiler Collection (GCC) adalah potongan perangkat lunak open source yang paling penting di dunia. Secara virtual seluruh perangkat lunak terbuka berdasarkan pada gcc pada beberapa level atau yang lainnya (Griffith 4). Jika dilhat dari http://en.wikipedia.org/wiki/GNU_Compiler_Collection yang menyatakan bahwa gcc adalah sebuah sistem kompilator yang dihasilkan oleh GNU proyek yang mendukung berbagai bahasa pemrograman. Gcc merupakan komponen kunci pada GNU toolchain. Sebagaimana telah menjadi kompilator
26
resmi pada sistem GNU, gcc telah diambil juga sebagai kompilator standar oleh sistem operasi komputer menyerupai unix moderen yang lain, meliputi GNU/Linux, keluarga BSD, dan Mac OS X.
2.7.1 Sejarah GCC
Richad Stallman memulai gcc pada tahun 1985. Dia memperluas kompilator yang sudah ada untuk mngkompilasi C. Awalnya kompilator tersebut digunakan untuk mengkompilasi Pastel, perluasan dari bahasa Pascal. Kemudian kompilator tersebut ditulis ulang dalam bahasa C oleh Len Tower dan Stallman, dan diterbitkan pada tahun 1987 sebagai kompilator untuk proyek GNU, untuk memiliki kompilator yang tersedia dalam perangkat lunak yang gratis. Awalnya diberi nama GNU C Compiler, karena hanya mengkompilasi bahasa pemrograman C, yaitu GCC 1.0 yang terbit pada tahun 1987. Kemudian diperluas untuk mengkompilasi C++ pada bulan Desember pada tahun tersebut. Kemudian kedepannya dikembangkan untuk Fortran, Pascal, Objective C, Java, Ada, dan sebagainya.
2.7.2 Kegunaan GCC
Gcc sering dipilih sebagai kompilator untuk pengembangan perangkat lunak yang dibutuhkan untuk dieksekusi pada banyak perangkat keras. Perbedaan
27
kompilator dasar pada banyak platform membuat kesulitan dalam pengembangan kode yang ingin dikompilasi dengan benar pada kompilator dan skrip build yang berjalan pada seluruh platform tersebut. Dengan menggunakan gcc, parse yang sama digunakan untuk seluruh platform, jadi jika sebuah kode dapat dikompilasi pada salah satu platform, kemungkinan dapat dikompilasi pada seluruh platform.
28
BAB III ANALISA DAN PERANCANGAN KOMPILASI SILANG (CROSS COMPILE)
3.1 Analisa Masalah dan Alternatif Pemecahan masalah
Pada bab III ini, penulis akan menganalisa masalah untuk pemakaian cross compile paket instalasi linux dan akan mencari pemecahan masalah dari cross compile.
3.1.1 Analisa Masalah
Pada sebuah perangkat keras yang kecil, seperti Pocket PC diperlukan sistem operasi yang kecil juga untuk dapat bekerja di dalam Pocket PC tersebut. Diantara banyak sistem operasi yang kecil, salah satunya adalah Familiar Linux. Familiar Linux merupakan salah satu dari distribusi linux kecil. Linux kecil ini, menyebabkan beberapa permasalahan yang ada. Diantaranya adalah paket dasar dalam sistem pembangunan GNU yang tidak terinstal di dalam Familiar Linux, yaitu make. Begitu pula dengan compiler yang diperlukan dalam mengkompilasi source code di dalam paket yang ingin diinstal. Hal ini menyebabkan pemutakhiran Linux Familiar yang terinstall dalam Pocket PC menjadi sedikit menyulitkan, karena hampir seluruh paket baru yang ada di
29
keluarkan dengan bungkus pengarsipan dalam bentuk tarball (namapaket.tar.gz). Sementara, Linux Familiar tidak mendukung penginstalasian dengan ekstensi paket tarball, yang didukung adalah paket berekstensi ipkg. Ipkg sendiri yang dikeluarkan oleh Linux Familiar, kurang menyediakan paket-paket baru untuk memutakhirkan Linux Familiar. Ini disebabkan karena Linux Familiar dikembangkan berdasarkan komunitas yang ada di dalam internet saja bukan oleh perusahaan. Teknologi yang terus berkembang dengan pesat dan tidak dapat dihentikan oleh apapun, membuat penulis berpikir untuk mencari metode untuk memutakhirkan Linux Familiar, atau menambah paket yang diperlukan di dalam Linux Familiar. Untuk menunggu paket yang ingin digunakan disediakan oleh Linux Familiar akan sedikit lama, walaupun dapat ditanyakan tentang paket yang dicari ke mailing list dari Linux Familiar, tapi juga akan lama untuk mendapatkannya.
3.1.2 Pemecahan Masalah
Paket-paket terbaru dari Linux kebanyakan disediakan dalam bentuk tarball. Bentuk tarball ini berisi source code yang harus dikompilasi terlebih dahulu sebelum digunakan. Hasil dari kompilasi biasanya berupa objek. Objek-objek itulah yang digunakan oleh sistem operasi untuk dieksekusi. Objek-objek tersebut dapat diperbanyak dan dapat dijalankan di Linux lain
30
bila lingkungan linuxnya sama (library, versi compiler dan arsitektur kernelnya sama). Jika berbeda maka objek tersebut tidak akan bisa dieksekusi. Berdasarkan hal diatas, maka dapatlah dibuat objek dengan kriteria yang diinginkan agar dapat dieksekusi di platform target. Contohnya mengeksekusi paket yang dikompilasi di sebuah PC dan objeknya dipindahkan ke dalam Linux Familiar yang berjalan pada Pocket PC atau emulator. Inilah yang biasanya disebut dengan kompilasi silang (cross compile). Gambar 3.1 berikut ini akan menggambarkan sedikit tentang kompilasi silang.
Gambar 3.1 Kompilasi silang (Cross Compile) Kompilasi silang ini memungkinkan pembuatan objek pada platform host, dengan hasil objek yang dapat dieksekusi di platform target. Untuk melakukan kompilasi silang ini diperlukan sebuah toolchain atau kompilator silang (cross compiler) untuk dapat menghasilkan objek yang diinginkan sesuai platform target. Toolchain atau cross compiler diinstal di platform host, sedangkan di platform target tidak perlu dinstal sesuatu, karena platform target hanya tinggal mengeksekusi objek yang dihasilkan dari platform host.
31
3.1.3 Kompilator Silang yang Digunakan
Kompilasi sangat memerlukan kompilator. Untuk kompilasi silang sendiri, juga diperlukan sebuah kompilator silang. Pada Linux Familiar ini, yang berjalan pada mesin arm, maka diperlukan pula kompilator silang yang ditujukan ke mesin arm. Sehingga penulis memilih tiga buah kompilator silang yang dapat melakukan kompilasi ke mesin arm, yaitu:
monmotha
arm-linux-gcc
gcc cross compiler
3.1.3.1 Kelebihan dan Kekurangan dari Kompilator Silang yang Digunakan
Masing-masing dari kompilator silang yang disebutkan pada sub bab 3.1.3 memiliki kekurangan dan kelebihan. Untuk kelebihan dari masing-masing kompilator silang yang digunakan adalah sebagai berikut:
Monmotha, dalam paketnya sudah terdapat kernel header yang dapat digunakan untuk melakukan kompilasi silang. Sehingga tidak perlukan lagi untuk mengunduh kernel header yang ditujukan untuk mesin arm.
Arm-linux-gcc, sudah terdapat kernel header juga, dan memiliki size data
32
yang lebih kecil dibandingkan monmotha, sehingga memudahkan dalam pengunduhan.
Gcc cross compiler, mudah dalam penginstalasiannya. Tidak perlu melakukan konfigurasi untuk path dari kompilator yang ingin digunakan.
Sedangkan untuk kekurangan dari masing-masing kompilator adalah sebagai berikut:
Monmotha dan arm-linux-gcc memiliki kekurangan yang sama, yaitu sulit untuk penginstallasiannya. Karena harus membuat link dari kernel header, dan mengatur environment variable di mana kompilator ini di letakkan.
Gcc cross compiler tidak memiliki kernel header sehingga perlu untuk mencari kernel header yang dibutuhkan.
3.1.4 Analisa Untuk Kernel Header
Untuk melakukan kompilasi silang (cross compile) pada sebuah platform linux diperlukan kernel header dari linux yang terinstal pada platform target. Kernel header ini diperlukan untuk kompilasi silang karena beberapa paket yang digunakan untuk kompilasi silang memerlukan beberapa library yang terdapat di dalam kernel header platform target tersebut. Untuk kernel header pada penelitian ini dipakai kernel header untuk linux yang berarsitektur mesin arm. Sehingga diperlukan arm kernel header untuk versi 2.6 yang terhubung dengan cross compiler yang akan digunakan.
33
Berikut ini gambar tree dari kernel header di linux
Gambar 3.2 Kernel Tree Dari gambar kernel tree diatas, dapat dilihat bahwa di sistem operasi linux sangat rentan dengan keterkaitan (dependencies). Ini dapat dilihat dari arsitektur kernel yang memiliki keterkaitan, seperti direktori include yang di dalamnya terdapat direktori asm-arm, sedangkan direktori arch di dalamnya terdapat direktori arm.
3.1.5 Analisa Makefile
Pada beberapa paket .tar.gz, makefile sangat diperlukan. Terutama jika terdapat banyak source code yang ingin dikompilasi dalam satu waktu. Pada kompilasi silang, makefile juga perlu, karena di makefile ini source code
34
dikompilasi. Untuk dapat melakukan kompilasi silang menggunakan makefile, perlu diarahkan kompilator yang ada menggunakan kompilator silang. Sehingga hasil kompilasi dapat digunakan untuk komputer target. Beberapa skrip makefile yang biasanya harus diarahkan ke kompilator silang adalah skrip CC, LD, dan CPP. Contoh dari perubahan makefile sebagai berikut:
CC = gcc
dirubah menjadi
CC = arm-linux-gnueabi-gcc
3.2 Penginstalasian Cross Compiler di Platform Host
Toolchain atau cross compiler yang penulis gunakan dalam rancangan penelitian ini adalah monmotha cross compiler, arm-linux-gcc-3.4.1, dan gcc cross compiler. Walaupun sebenarnya ada banyak tool cross compiler yang tersedia, tapi penulis memilih cross compiler tersebut, karena cross compiler tersebut khusus untuk mesin arm, dan Familiar Linux itu disediakan untuk mesin arm juga. Sehingga memudahkan dalam penginstalasiannya. Adapun cara untuk penginstalasian untuk monmotha atau arm-linux-gcc adalah sebagai berikut : 1. Download cross compiler $ wget – c http://www.handhelds.org/downloads/projects/toolchain/ monmotha/arm-chain.tar.gz
35
2. Unpack cross compiler $ tar xvfz /path/to/arm-chain.tar.gz 3. Retrieve Kernel Source Code yang sesuai dengan kernel yang digunakan pada Familiar Linux saat ini. Biasanya didalam monmotha sudah terdapat kernel header untuk linux arm. Jadi tinggal salin kernel header tersebut ketempat yang diinginkan. Atau bisa juga dengan cara lain, yaitu menggunakan anonymous : $ export CVSROOT=:pserver:
[email protected]:/cvs $ cvs login password = anoncvs $ cvs export -r K2-4-19-rmk6-pxa1-hh36 linux/kernel 4. Buat link file dari direktori “asm” dan “linux” pada arm-cross-compiler diarahkan ke ARM kernel source $ sudo ln -s /path/to/arm-kernel-source/include/linux /skiff/local/armlinux/include/linux $sudo ln -s /path/to/arm-kernel-source/include/asm /skiff/local/armlinux/include/asm 5. Pastikan bahwa arm-compiler berada pada PATH dan direktori /usr/src/linux mengacu ke arm kernel source. $ export PATH=$PATH:/skiff/local/arm-linux/bin $ sudo ln -s /path/to/arm-kernel-source /usr/src/linux Sampai dengan Tahap ini tool cross compiler monmotha ataupun arm-linux-
36
gcc sudah siap digunakan untuk mengkompilasi paket untuk menghasilkan objek agar dapat berjalan di mesin arm. Untuk instalasi gcc cross compiler bisa dilakukan dengan cara yang lebih mudah, karena bisa menggunakan repository dari debian. Berikut langkahlangkah penginstalasiannya : 1. menambahkan daftar repository ke source.list yang terdapat di dalam direktori
/etc/apt.
Daftar
yang
ditambahkan
adalah
“deb
http://www.emdebian.org/debian/ unstable main”, caranya sepeti berikut: $ sudo vim /etc/apt/sources.list Kemudian tambahkan daftar “deb http://www.emdebian.org/debian/ unstable main” pada baris paling bawah sources.list. 2. Perbarui repository dengan perintah $ sudo apt-get update 3. Setelah repository telah diperbarui, instal gcc cross compiler untuk mesin arm dengan perintah: $ sudo apt-get install gcc-4.2-arm-linux-gnueabi $ sudo apt-get install g++-4.2-arm-linux-gnueabi 4. Salin direktori linux dan asm yang terdapat di dalam arm kernel header ke dalam direktori include yang terdapat di gcc cross compiler terinstall (bisanya terinstall di direktori /usr/arm-linux-gnueabi). Adapun perintah yang harus dilakukan sebagai berikut:
37
$ sudo cp -r /path/to/kernel/source/include/linux /usr/arm-linux-gnueabi/include/linux $ sudo cp -r /path/to/kernel/source/include/asm /usr/arm-linux-gnueabi/include/asm 5. Untuk export path tidak diperlukan lagi karena sudah secara otomatis file biner dari gcc cross compiler diletakkan ke direktori /usr/bin. Hanya tinggal membuat link untuk kernel source ke direktori /usr/linux dengan perintah: $ sudo ln -s /path/to/arm-kernel-source /usr/src/linux Sampai dengan Tahap ini gcc cross compiler dapat digunakan untuk mengkompilasi silang ke dalam mesin arm.
3.3 Rancangan Linux Familiar di QEMU
Linux Familiar dapat dijalankan pada qemu. Sebagaimana pada bab II, bahwa qemu adalah emulator processor. Salah satu mesin processor yang dapat di emulasikan oleh qemu adalah mesin arm. Mesin arm ini banyak digunakan pada Pocket PC atau mobile device yang lainnya. Untuk menjalankan Familiar Linux pada qemu diperlukan skrip tambahan yang disediakan oleh poky linux.
38
3.3.1 Instalasi QEMU
Instalasi qemu adalah sesuatu yang mudah untuk setiap distribusi Linux, karena hampir setiap distribusi menyediakan paket qemu beserta dengan paket terkait juga. Sehingga hanya tinggal mencari paket qemu dan instal sesuai dengan cara masing-masing distribusi. Distro linux yang penulis gunakan pada penelitian ini adalah Ubuntu 8.04. Sehingga untuk melakukan instalasi dari repository yang terhubung dengan koneksi inernet adalah sebagai berikut : $ sudo apt-get install qemu Dengan skrip diatas maka qemu beserta paket dependencies yang diperlukan langsung terinstal. Versi qemu yang digunakan pada Ubuntu 8.04 adalah qemu-0.9.1. Ini adalah versi
qemu
terbaru
bila
dilihat
dari
situs
pengembang
qemu
yaitu
http://bellard.org/qemu/. Untuk mencoba apakah qemu sudah terinstal di PC dengan baik, caranya dengan mengetikkan perintah qemu pada terminal di Linux. Gambar dibawah ini adalah gambar bila qemu terinstal dengan baik.
39
Gambar 3.3 Test QEMU
3.3.2 Instlasi Skrip poky-qemu
Untuk mendapatkan skrip poky-qemu, cara yang harus dilakukan adalah dengan menambahkan repository dari Ubuntu dengan repository list yang sesuai dengan Ubuntu yang terinstal (Lihat Purdie et al 3). List yang disediakan baru dari debian based saja. Daftar list diantaranya adalah sebagai berikut
deb http://debian.o-hand.com etch/
deb http://debian.o-hand.com unstable/
deb http://debian.o-hand.com edgy/
40
deb http://debian.o-hand.com feisty/
deb http://debian.o-hand.com gutsy/
deb http://debian.o-hand.com hardy/
Untuk menggunakan list ini. Caranya adalah sebagai berikut : 1. dari terminal edit source.list yang terdapat di direktori /etc/apt dengan perintah : $ sudo vim /etc/apt/source.list Setelah itu tambahkan salah satu list diatas sesuai dengan Ubuntu yang terinstal. Karena penulis menggunakan Ubuntu 8.04 maka yang dipakai adalah list terakhir, yaitu “deb http://debian.o-hand.com hardy/”. 2. Setelah itu update repository dengan cara $ sudo apt-get update Jika telah diperbarui dengan baik, maka instal poky-qemu dengan perintah berikut ini $ sudo apt-get install poky-script Dengan skrip ini maka poky-script akan terinstal semua, begitu juga dependencies yang diperlukan. Dan langsung dikonfigurasikan dengan qemu untuk dapat menjalankan image yang disediakan oleh poky linux.
3.4 Menjalankan Image Linux Familiar
Untuk menjalankan Familiar Linux pada qemu, yang kita perlukan adalah
41
mngunduh terlebih dahulu image yang diperlukan. Untuk mengunduh image yang diperlukan bisa dengan perintah $
wget
-c
http://pokylinux.org/releases/pinky-3.1/poky-image-sdk-
qemuarm-pinky-3.1.rootfs.ext2.bz2 Setelah itu jangan lupa untuk mengunduh juga kernel image untuk image linuxnya. Cara yang penulis lakukan adalah deperti berikut $ wget -c http://pokylinux.org/releases/pinky-3.1/zImage-2.6.23-pinky-3.1qemuarm.bin Hasil yang diunduh dari skrip diatas adalah sebuah kernel image dengan versi 2.6.23. Nomor versi kernel terdiri atas tiga bagian, yaitu major number, minor number, dan revision number (Katriena 26). Nomor genap pada minor number menyatakan kernel stabil, sedangkan nomor ganjil menyatakan kernel yang dikembangkan (Bovet and Cesati 11). Setelah image telah diunduh semua, langkah-langkah untuk menjalankan image tersebut adalah sebagai berikut: 1. Usahakan image linux dan image kernel berada dalam satu direktori 2. kemudian masuk kedalam direktori tersebut, dan ekstrak image linux yang baru saja diunduh dengan $ bunzip2 poky-image-sdk-qemuarm-pinky-3.1.rootfs.ext2.bz2 3. Setelah diekstrak jalankan skrip berikut untuk dapat menjalankan image yang telah diekstrak $ poky-qemu zImage-2.6.23-pinky-3.1-qemuarm.bin poky-imagesdk-qemuarm-pinky-3.1.rootfs.ext2.bz2
42
Jika berhasil maka akan muncul window baru dengan tampilan awal booting seperti gambar dibawah ini.
Gambar 3.4 Boot-Pinky melalui QEMU
43
BAB IV IMPLEMENTASI DAN ANALISA KOMPILASI SILANG
4.1 Spesifikasi Perangkat Keras dan Perangkat Lunak
Perangkat keras dan perangkat lunak yang penulis gunakan dalam membangun kompilasi silang (cross compile) pada tugas akhir ini adalah sebagai berikut:
4.1.1 Spesifikasi Perangkat Keras
Perangkat keras yang digunakan sebagai komputer host (yang memiliki kompilator silang) adalah sebagai berikut : a) Processor AMD Sempron-X2 1.80 Ghz b) RAM 1 GB c) VGA Shareware 64 MB d) Monitor CRT 15 inch
4.1.2 Spesifikasi Perangkat Lunak
Untuk spesifikasi perangkat lunak yang penulis gunakan adalah sebagai
44
berikut: Untuk Komputer Host: a) Linux Ubuntu 8.04 Hardy Heron b) gcc-4.2 versi 4.2.4 c) g++-4.2 versi 4.2.4 d) gcc-4.2-arm-linux-gnueabi versi 4.2.4-6 e) binutils-arm-linux-gnueabi versi 2.18.1 f) g++-4.2-arm-linux-gnueabi versi 4.2.4-6 g) monmotha h) arm-linux-gcc-3.4.1 i) qemu versi 0.9.1 j) ssh Untuk komputer target perangkat lunak yang digunakan adalah sebagai berikut: a) qemu versi 0.9.1 (karena Linux Familiar dijalankan pada emulator) b) Linux Poky Pinky 3.1.1 c) ssh
4.2 Tampilan Komputer Host dan Komputer Target
Dibawah ini adalah tampilan-tampilan dari komputer host dan juga komputer target.
45
4.2.1 Tampilan Komputer Host
Gambar dibawah ini adalah tampilan dari komputer host yang sudah dilengkapi dengan kompilator silang (cross compiler) dilihat dari terminal.
Gambar 4.1 Komputer host dengan kompilator silang yang telah terinstal
4.2.2 Tampilan Komputer Target
Gambar di bawah ini adalah komputer target yang berjalan pada qemu. Dan ini adalah tampilan di lihat dari terminal.
46
Gambar 4.2 Komputer Target dilihat dari terminal
4.3 Uji Kompilasi Silang
Pada sub bab ini akan dibahas untuk pengujian kompilator silang yang telah terinstall dalam komputer host.
4.3.1 Lingkup Pengujian
Pengujian yang dilakukan terdiri dari:
hasil cross compile
47
Untuk menguji hasil dari cross compile yaitu berupa file berekstensi c/c++ dan juga .tar.gz setelah dikompilasi dengan cross compiler yang ada di platform host, apakah dapat berjalan dengan baik atau tidak pada platform target.
4.3.2 Kompilasi Silang Untuk .c atau .cpp
Untuk melakukan kompilasi silang dari sebuah file berekstensi c maupun cpp tidak begitu sulit, hampir sama dengan cara mengkompilasi menggunakan kompilator biasa. Adapun langkah-langkah yang harus dilakukan adalah sebagai berikut:
Untuk file berekstensi c (misalkan nama file yang akan dikompilasi adalah hello.c) dengan perintah : $ arm-linux-gnueabi-gcc -o hello hello.c
Untuk file berkstensi cpp dengan perintah: $ arm-linux-gnueabi-g++ -o hello hello.cpp
Pengujian yang dilakukan penulis untuk kompilasi silang file berekstensi c atau cpp, penulis menggunakan file yang ditulis dalam bahasa c dengan nama hello.c. Hello.c akan menghasilkan keluaran berupa tulisan “hello world” bila berhasil dikompilasi. Gambar di bawah adalah kompilasi silang yang dilakukan di komputer host untuk hello.c.
48
Gambar 4.3 Kompilasi Silang dari C Kemudian hasil dari kompilasi silang tersebut yang merupakan file biner, penulis namakan dengan hello_cross, dipindahkan ke komputer target. Memindahkan file biner tersebut dengan menggunakan perintah scp seperti berikut ini: $ scp hello_cross
[email protected]:/home/root Perintah ini akan menyalin hello_cross dari komputer host ke komputer target dan diletakkan di dalam direktori root yang terdapat didalam direktori home. Gambar berikut adalah hasil dari penyalinan dari komputer host ke komputer target.
49
Gambar 4.4 Penyalinan file Biner Dari Komputer Host ke Komputer Target Setelah dilakukan penyalinan maka dicoba dijalankan pada komputer host. Untuk menjalankan file biner hello_cross dari terminal adalah sebagai berikut: $ ./hello_cross Gambar 4.5 dibawah ini adalah hasil dari menjalankan file biner hello_cross dari komputer target.
50
Gambar 4.5 Menjalankan Hasil Kompilasi Silang di Komputer Target
4.3.3 Kompilasi Silang Untuk Paket Linux (tar.gz)
Untuk paket berekstensi tar.gz, perlu sedikit usaha lebih untuk dapat mengkompilasi silang paket tersebut. Diantara beberapa paket yang akan dilakukan adalah tictactoe-1.2.1.tar-gz, sudoku-0.0.1.tar.gz, dan libpng-1.2.16.tar.gz Untuk langkah-langkah mengkompilasi tictactoe-1.2.1.tar-gz, sebagai berikut:
Unpack tictactoe-1.2.1.tar.gz dengan perintah $ tar xvfz tictactoe-1.2.1.tar.gz
Kemudian masuk ke dalam direktori tictactoe-1.2.1 dengan perintah
51
$ cd tictactoe-1.2.1
Setelah itu membuka file Makefile yang ada dengan editor teks $ vim Makefile
Makefile harus diedit sedikit. Untuk dapat berjalan di mesin tujuan maka pada baris pertama dan kedua terdapat tulisan CC = gcc LD = gcc CC dan LD di atas diarahkan ke kompilator silang yang telah terinstall. Sehingga menjadi CC= arm-linux-gnueabi-gcc LD = arm-linux-gnueabi-gcc
Setelah itu lakukan perintah: $ make
Sampai tahap ini maka akan mucul file baru di dalam direktori tictactoe-1.2.1 dengan berekstensi .o dan juga file biner dengan nama tictactoe. Untuk mencoba di komputer target hanya perlu untuk menyalin file tictactoe saja.
Hasil dari tictactoe dapat dilihat pada Gambar 4.6 dibawah ini.
52
Gambar 4.6 Menjalankan tictactoe di komputer target. Game tictactoe ini pada dasarnya berdimensi 3 x 3. tapi bisa di rubah besar dimensi dengan tambahan angka ganjil pada akhir perintah untuk menjalankan file eksekusi. Untuk mengkompilasi silang sudoku-0.0.1.tar.gz langkah-langkahnya sebagai berikut:
unpack sudoku-0.0.1.tar.gz dengan perintah: $ tar xvfz sudoku-0.0.1.tar.gz
Masuk kedalam direktori sudoku yang baru di ekstrak dengan perintah: $ cd sudoku-0.0.1
Selanjutnya melakukan konfigurasi untuk sudoku dengan perintah:
53
$ ./configure CC=arm-linux-gnueabi-gcc –host=arm-linux-gnueabi
Kemudian mengkompilasi sumber kode dengan: $ make
Sampai dengan tahap ini sudah tercipta file baru dalam direktori sudoku-0.0.1 berupa file berekstensi .o dan juga file yang dapat dieksekusi (executable).
Untuk instalasi di komputer target hanya perlu menyalin file executable yang bernama sudoku.
Gambar 4.7 Sudoku yang dijalankan di komputer target Gambar 4.7 di atas adalah screenshot dari game sudoku yang dijalankan di komputer target dengan sukses. Hasilnya berupa 2 buah potongan game sudoku yang berdimensi 9 x 9 dan terbagi lagi menjadi dimesi 3 x 3.
54
Untuk kompilasi silang libpng-1.2.16.tar.gz langkahnya sebagai berikut:
Unpack libpng-1.2.16.tar.gz dengan perintah: $ tar xvfz libpng-1.2.16.tar.gz
Masuk kedalam direktori libpng yang baru di ekstrak dengan perintah: $ cd libpng-1.2.16
Selanjutnya melakukan konfigurasi untuk sudoku dengan perintah: $ ./configure –host=arm-linux-gnueabi
Kemudian mengkompilasi sumber kode dengan: $ make
Tahap terakhir adalah instalasi dengan perintah: $ make install prefix=
Selanjutnya menyalin file-file yang terdapat di direktori tujuan tersebut ke dalam komputer target sesuai dengan nama direktori. Sebagai contoh, jika di dalam direktori tujuan tercipta direktori dengan nama lib, maka file-file di dalam direktori tersebut harus dipindahkan ke dalam direktori lib yang ada di komputer target.
Hasil dari libpng yang telah diinstal di komputer target ditunjukkan Gambar 4.6 berikut.
55
Gambar 4.8 Libpng yang terinstal di komputer target.
4.3.4 Skenario Pengujian
Skenario pengujian akan dipaparkan sebagai berikut:
Kompilasi silang untuk file C/C++ dengan gcc cross compiler Untuk kompilasi silang untuk file C/C++ dengan menggunakan gcc cross compiler dapat dilakukan pada komputer host. Dan juga dapat dieksekusi pada komputer target. Hasil akhir yang ditampilkan sama dengan Gambar 4.5.
Kompilasi silang untuk paket tar.gz dengan gcc cross compiler
56
Paket tar.gz (tictactoe, sudoku, dan libpng) yang dikompilasi silang dengan menggunakan gcc cross compiler berhasil dilakukan pada komputer host. Dan berhasil juga untuk dieksekusi pada komputer target. Hasil yang ditampilkan sama seperti Gambar 4.6 dan Gambar 4.7, dan Gambar 4.8.
Kompilasi silang untuk file C/C++ dengan monmotha cross compiler dan arm-linux-gcc Monmootha dan arm-linux-gcc berhasil melakukan kompilasi silang untuk file C/C++ pada komputer host. Akan tetapi file biner yang dihasilkan tidak dapat dieksekusi di komputer target. Hasil dari eksekusi file biner yang dihasilkan ditampilkan pada Gambar 4.9.
Gambar 4.9 Hasil eksekusi file biner dari monmotha di komputer target
Kompilasi silang untuk paket tar.gz dengan monmotha cross compiler dan
57
arm-linux-gcc Untuk paket tar.gz (tictactoe, sudoku, dan libpng), monmotha dan armlinux-gcc hanya mampu melakukan sebatas merubah paket untuk menjadi file biner saja. Tetapi file biner tidak dapat dieksekusi di komputer target. Hasilnya dapat dilihat di Gambar 4.8 berikut.
Gambar 4.10 Hasil eksekusi file biner dari paket tar.gz yang dieksekusi dengan monmotha
4.3.5 Hasil Pengujian
Hasil pengujian dapat dijabarkan sebagai berikut:
Untuk hasil pengujian menggunakan gcc cross compiler dapat dilihat pada
58
Gambar 4.5 sampai dengan Gambar 4.8.
Sedangkan untuk hasil kompilasi menggunakan monmotha dan arm-linuxgcc dapat dilihat pada Gambar 4.9 dan Gambar 4.10.
4.4 Analisa Hasil
Berdasarkan hasil pengujian diatas, maka dapat diperolah beberapa hasil dari kegiatan tersebut, diantaranya: 1. Cross compiler yang berhasil untuk melakukan kompilasi silang (untuk paket tar.gz, file berekstensi .c dan .cpp) secara sempurna adalah gcc cross compiler 2. Untuk monmotha dan arm-linux-gcc, hanya bisa untuk merubah file source menjadi file biner saja pada komputer host, tapi file biner tersebut tidak dapat dijalankan di komputer target. Hal ini dikarenakan monmotha dan arm-linux-gcc tidak mendukung port baru yang disebut dengan EABI (embedded application binary interface). 3. Jika kompilasi silang berhasil maka file biner akan dapat dijalankan di komputer target dengan baik. 4. Kompatibilitas gcc juga mempengaruhi. Dalam hal ini gcc yang digunakan versi 4.2 yang merupakan default atau bawaan dari ubuntu 8.04. Sehingga gcc cross compiler yang bisa terinstal adalah gcc cross compiler versi 4.2 juga.
59
5. Kernel header yang dipakai adalah 2.6.19 Karena poky pinky 3.1 (Linux Familiar) yang terinstal di emulator qemu menggunakan kernel 2.6.23. Walaupun berbeda nomor revisi minornya (yaitu 19 dan 23) tapi masih dapat digunakan karena revisi majornya masih sama (yaitu 6).
60
BAB V PENUTUP
5.1 Kesimpulan
Kesimpulan yang dapat penulis tarik dari penelitian tentang cross compile ini adalah sebagai berikut: 1. Perbedaan monmotha cross compiler, arm-linux-gcc-3.4.1 dan gcc cross compiler ada yang berhasil dan ada pula yang tidak. Hal ini disebabkan karena perbedaan arsitektur mesin yang dipakai oleh komputer target. Sehingga mengharuskan cross compiler harus sesuai dengan arsitektur mesin target. 2. Versi gcc cross compiler harus sama dengan versi gcc yang terinstall pada komputer host. 3. Untuk mengkompilasi silang sebuah file dengan ekstensi .c atau .cpp hampir sama dengan cara mengkompilasi biasa dengan gcc. Hanya saja kompilatornya menggunakan kompilator untuk kompilator silang. 4. Untuk mengkompilasi silang sebuah paket tar.gz, perlu untuk membaca file README dan juga file Instal terlebih dahulu, karena setiap paket berbeda dalam file configure dan Makefilenya.
5.2 Saran
61
Penelitian kompilasi silang (cross compile) ini masih banyak terdapat kekurangan dan memerlukan saran diantaranya: 1. cross compiler yang memiliki perbedaan diantara target mesin yang dituju. Sehingga membuat user harus mencari terlebih dahulu cross compiler yang cocok untuk mesin yang dituju. 2. Akan lebih baik jika dapat diciptakan cross compiler untuk banyak mesin, sehingga tidak perlu susah untuk instalasi banyak cross compiler pada komputer host jika ingin melakukan kompilasi silang untuk banyak target mesin. 3. Untuk penambahan paket baru berekstensi .tar.gz, dapat menggunakan cara yang hampir sama dengan penelitian ini. Dan alangkah lebih baik jika membaca file README dan Install terlebih dahulu.
DAFTAR PUSTAKA
Bovet, D.P., & Cesati, Marco. Understanding the Linux Kernel CA: O`Reilly, 2000. Bellard, Fabrice. Qemu Emulator User Documentation. [online] diakses tanggal 9 Januari 2009 terdapat di URL http://bellard.org/qemu/qemu-doc.html. Griffith, Arthur. GCC:The Complete Reference Osborne: McGraw-Hill, 2002. Katriena, Flory. Linux Untuk Pemula Jakarta: PT Elex Media Komputindo, 1999. Purdie, Richard et al. Poky Handbook. [online] diakses tanggal 8 Januari 2009 terdapat di URL http://www.pokylinux.org/doc/poky-handbook.html. Sokolovsky, Paul. Report on running Familiar Under Qemu-arm. [online] diakses tanggal 20 Januari 2009 terdapat di URL http://www.handhelds.org/pipermail/familiar/312/31225.html. - - - - - - -. Compiler. [online] diakses tanggal 3 Januari 2009 terdapat di URL http://en.wikipedia.org/wiki/Compiler. - - - - - - - . Compiler. [online] diakses tanggal 3 Januari 2009 terdapat di URL http://www.webopedia.com/TERM/C/compiler.html. - - - - - - - - . Introduction to cross-compiling for Linux. [online] diakses tanggal 5 Januari 2009 terdapat di URL http://landlay.net/writing/docs/crosscompiling.html. - - - - - - - . Tar (file format). [online] diakses tanggal 4 Januari 2009 terdapat di URL http://en.wikipedia.org/wiki/Tarball. - - - - - - - . GNU Compiler Collection. [online] diakses tanggal 6 Januari 2009 terdapat di URL http://en.wikipedia.org/wiki/GNU_Compiler_Collection. - - - - - - - . Familiar Distribution. [online] diakses tanggal 4 Januari 2009 terdapat di URL http://www.handhelds.org/moin/moin.cgi/FamiliarDistribution. - - - - - - - . Familiar Linux. [online] diakses tanggal 4 Januari 2009 terdapat di URL http://en.wikipedia.org/wiki/Familiar_Linux.
62
i
LAMPIRAN
1. Makefile dari Tictactoe
CC = arm-linux-gnueabi-gcc LD = arm-linux-gnueabi-gcc INSTALL = install TAR = tar TARFLAGS = zcf CPPFLAGS = -Wall -ansi -pedantic ifdef SIZE CPPFLAGS := $(CPPFLAGS) -D_SIZE_=$(SIZE) endif PROGNAME = tictactoe VERSION = 1.2.1 OBJFILES = line_o_s.o messages.o moves.o scores.o t3types.o t3visual.o tictactoe.o DISTFILES = *.c *.h Makefile README Copying Changelog INSTALLDIR = /home/nang/Documents/CobaCross/tic-tac-toe DISTNAME = $(PROGNAME)-$(VERSION) .c.o: $(CC) -c $(CPPFLAGS) $< $(PROGNAME): $(OBJFILES) $(LD) -o $@ $^ install: $(PROGNAME) $(INSTALL) $(PROGNAME) $(INSTALLDIR) uninstall: rm -f $(INSTALLDIR)/$(PROGNAME) clean: rm -f $(OBJFILES) rm -f core
ii
distclean: clean rm -f $(PROGNAME) tar: $(DISTNAME).tar.gz $(DISTNAME).tar.gz: $(DISTFILES) [ -d $(DISTNAME) ] && rm -rf $(DISTNAME); \ mkdir $(DISTNAME); \ cp $(DISTFILES) $(DISTNAME)/; \ $(TAR) $(TARFLAGS) $@ $(DISTNAME)/; \ rm -rf $(DISTNAME) line_o_s.o: line_o_s.c t3types.h messages.h line_o_s.h messages.o: messages.c messages.h moves.o: moves.c messages.h t3types.h t3visual.h line_o_s.h scores.h scores.o: scores.c messages.h scores.h t3types.h line_o_s.h moves.h t3types.o: t3types.c t3types.h t3visual.o: t3visual.c t3types.h messages.h tictactoe.o: tictactoe.c messages.h t3types.h t3visual.h moves.h PHONY: clean distclean install uninstall tar
2. Makefile dari sudoku
# Makefile.in generated by automake 1.9.6 from Makefile.am. # Makefile. Generated from Makefile.in by configure. # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
iii
# PARTICULAR PURPOSE.
srcdir = . top_srcdir = . pkgdatadir = $(datadir)/sudoku pkglibdir = $(libdir)/sudoku pkgincludedir = $(includedir)/sudoku top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = /usr/bin/install -c install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = sudoku$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $ (CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_sudoku_OBJECTS = main.$(OBJEXT) candidati.$(OBJEXT) \
iv
scacchiera.$(OBJEXT) cella.$(OBJEXT) sudoku_OBJECTS = $(am_sudoku_OBJECTS) sudoku_LDADD = $(LDADD) DEFAULT_INCLUDES = -I. -I$(srcdir) -I. depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $ (AM_LDFLAGS) $(LDFLAGS) \ -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $ (AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $ (LDFLAGS) -o $@ SOURCES = $(sudoku_SOURCES) DIST_SOURCES = $(sudoku_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $ (EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = ${SHELL} /home/nang/Documents/CobaCross/sudoku/sudoku-0.0.1/missing --run aclocal-1.9 AMDEP_FALSE = # AMDEP_TRUE = AMTAR = ${SHELL} /home/nang/Documents/CobaCross/sudoku/sudoku-0.0.1/ missing --run tar AUTOCONF = ${SHELL} /home/nang/Documents/CobaCross/sudoku/sudoku-0.0.1/missing --run autoconf AUTOHEADER = ${SHELL} /home/nang/Documents/CobaCross/sudoku/sudoku-0.0.1/missing --run autoheader
v
AUTOMAKE = ${SHELL} /home/nang/Documents/CobaCross/sudoku/sudoku-0.0.1/missing --run automake-1.9 AWK = gawk CC = arm-linux-gnueabi-gcc CCDEPMODE = depmode=gcc3 CFLAGS = -g -O2 CPP = arm-linux-gnueabi-gcc -E CPPFLAGS = CXX = arm-linux-gnueabi-g++ CXXDEPMODE = depmode=gcc3 CXXFLAGS = -g -O2 CYGPATH_W = echo DEFS = -DHAVE_CONFIG_H DEPDIR = .deps ECHO_C = ECHO_N = -n ECHO_T = EGREP = grep -E EXEEXT = INSTALL_DATA = ${INSTALL} -m 644 INSTALL_PROGRAM = ${INSTALL} INSTALL_SCRIPT = ${INSTALL} INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s LDFLAGS = LIBOBJS = LIBS = LTLIBOBJS = MAKEINFO = ${SHELL} /home/nang/Documents/CobaCross/sudoku/sudoku-0.0.1/missing --run makeinfo OBJEXT = o PACKAGE = sudoku PACKAGE_BUGREPORT = [email protected] PACKAGE_NAME = Sudoku PACKAGE_STRING = Sudoku 0.0.1 PACKAGE_TARNAME = sudoku PACKAGE_VERSION = 0.0.1 PATH_SEPARATOR = : SET_MAKE = SHELL = /bin/bash STRIP = arm-linux-gnueabi-strip VERSION = 0.0.1 ac_ct_CC = ac_ct_CXX = ac_ct_STRIP =
vi
am__fastdepCC_FALSE = # am__fastdepCC_TRUE = am__fastdepCXX_FALSE = # am__fastdepCXX_TRUE = am__include = include am__leading_dot = . am__quote = am__tar = ${AMTAR} chof - "$$tardir" am__untar = ${AMTAR} xf bindir = ${exec_prefix}/bin build_alias = datadir = ${prefix}/share exec_prefix = ${prefix} host_alias = arm-linux-gnueabi includedir = ${prefix}/include infodir = ${prefix}/info install_sh = /home/nang/Documents/CobaCross/sudoku/sudoku-0.0.1/install-sh libdir = ${exec_prefix}/lib libexecdir = ${exec_prefix}/libexec localstatedir = ${prefix}/var mandir = ${prefix}/man mkdir_p = mkdir -p -oldincludedir = /usr/include prefix = /home/nang/Documents/CobaCross/sudoku program_transform_name = s,x,x, sbindir = ${exec_prefix}/sbin sharedstatedir = ${prefix}/com sysconfdir = ${prefix}/etc target_alias = sudoku_SOURCES = main.cpp candidati.cpp scacchiera.cpp cella.cpp cella.h costanti.h candidati.h scacchiera.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \
vii
exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $ (am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $ (am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $ (CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS)
viii
@$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$ (EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) sudoku$(EXEEXT): $(sudoku_OBJECTS) $(sudoku_DEPENDENCIES) @rm -f sudoku$(EXEEXT) $(CXXLINK) $(sudoku_LDFLAGS) $(sudoku_OBJECTS) $ (sudoku_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c include ./$(DEPDIR)/candidati.Po include ./$(DEPDIR)/cella.Po include ./$(DEPDIR)/main.Po include ./$(DEPDIR)/scacchiera.Po .cpp.o: if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$
ix
(DEPDIR)/$*.Tpo"; exit 1; fi # source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXXCOMPILE) -c -o $@ $< .cpp.obj: if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$ (DEPDIR)/$*.Tpo"; exit 1; fi # source='$<' object='$@' libtool=no \ # DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ # $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $ (ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \
x
here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $ (CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$ (top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \
xi
test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$ (distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$ (distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \
xii
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]: [\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$ $dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
xiii
distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$ (INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic:
xiv
distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $ (CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic
xv
mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: