Jump to content

LFS: Tentang Cross-compilation

From Haidhi Wiki
Revision as of 08:56, 15 April 2025 by SanzSkuy (talk | contribs) (Created page with "Dalam proses build Linux From Scratch (LFS), salah satu tahap penting adalah cross-compilation. Meski dilakukan di sistem yang sama, tujuannya bukan lintas arsitektur, tapi untuk menjamin kebersihan lingkungan build. Cross-compiling adalah proses compile code program pada satu sistem (host) untuk dieksekusi pada sistem yang berbeda (target). Contohnya jika kita meng-compile aplikasi Android (ARM) dari PC (x86_64). Nah tapi kan PC kita buat build dan ngejalanin LFS itu...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Dalam proses build Linux From Scratch (LFS), salah satu tahap penting adalah cross-compilation. Meski dilakukan di sistem yang sama, tujuannya bukan lintas arsitektur, tapi untuk menjamin kebersihan lingkungan build.

Cross-compiling adalah proses compile code program pada satu sistem (host) untuk dieksekusi pada sistem yang berbeda (target). Contohnya jika kita meng-compile aplikasi Android (ARM) dari PC (x86_64).

Nah tapi kan PC kita buat build dan ngejalanin LFS itu sama, kenapa harus cross-compile? hal ini untuk menjamin bahwa semua tools yang dibuat bebas dari pengaru sistem host. Dengan teknik ini build tools tidak akan menggunakan library atau tool host secara tidak sengaja dan semua disusun dari awal, pakai toolchain yang kita buat sendiri. Sehingga hasilnya jadi lebih konsisten dan portable

Cross-compile di LFS

di LFS kita melakukan semacam fake cross-compilation yang tujuannya adalah memastikan build tool tidak bergantung pada sistem host (misal Ubuntu, Fedora, Arch, dll) dan menghindari link ke library host yang membuat sistem target tidak pure. Hal ini dapat dilakukan dengan:

  • Mengganti triplet host (LFS_TGT). Contohnya

x86_64-pc-linux-gnu diganti menjadi x86_64-lfs-linux-gnu

  • Gunakan --with-sysroot untuk set root directory ke sistem LFS (bukan ke root host asli)

Tiga Tahap Compile

Caption text
Stage Build Host Target Keterangan
1 cc1 pc lfs membangun cross-compiler menggunakan compiler dari sistem host (cc-pc)
2 cc-lfs lfs (masih di-run dari pc) lfs Bangun compiler native untuk LFS, tapi tetap dijalankan di luar chroot.
3 cc-lfs lfs lfs Rebuild compiler dalam chroot LFS, dites, dan benar-benar jalan mandiri.
  • Stage 1: Masih di luar chroot, pakai compiler sistem.
  • Stage 2: Masih di luar chroot, tapi kita sudah build toolchain lengkap untuk target LFS.
  • Stage 3: Masuk ke chroot, semua build dan tes dilakukan dari dalam sistem LFS sendiri. Ini fase stabilisasi.

Chicken & Egg Paradox

Compiler C (gcc) perlu:

  • glibc untuk standar library
  • Tapi glibc butuh libgcc
  • libstdc++ juga butuh glibc

Lalu masalahnya adalah kita butuh glibc untuk libgcc, tapi juga butuh libgcc untuk bisa compile glibc

Solusinya:

  1. Bangun versi terbatas libgcc dulu (tanpa fitur seperti threads, EH)
  2. Pakai cc1 untuk compile glibc
  3. Bangun libstdc++ pakai cc1, link ke libgcc yang sudah rebuild.

Kesimpulan

Dengan pendekatan ini, kita memastikan bahwa semua tools yang digunakan dalam sistem LFS benar-benar self-contained dan tidak tergantung pada pustaka sistem host, menjamin portabilitas dan kestabilan ke depannya.