Jump to content

LFS: Compile Cross-toolchain

From Haidhi Wiki
Revision as of 07:05, 16 April 2025 by SanzSkuy (talk | contribs)

Sebelum mengcompile, pastikan:

  1. Sudah melakukan langkah-langkah sebelumnya
  2. Login sebagai user lfs
  3. Work directory di /mnt/lfs/sources/
  4. Ketika compile package:
    • Menggunakan tar untuk extract package
    • Pindah ke direktori hasil extract
    • Ikutin instruksi
    • Balik ke direktori source ketika compile sudah selesai
    • Delete hasil extract, kecuali kalo gak disuruh delete

Binutils-2.44

Binutils menyediakan linker dan assembler agar bisa digunakan oleh glibc dan gcc sebagai bagian inti dalam proses compile

mkdir -v build
cd       build

preprare

../configure --prefix=$LFS/tools \
             --with-sysroot=$LFS \
             --target=$LFS_TGT   \
             --disable-nls       \
             --enable-gprofng=no \
             --disable-werror    \
             --enable-new-dtags  \
             --enable-default-hash-style=gnu

compile

make
make install

GCC-14.2.0

GCC membutuhkan tiga pustaka penting sebagai dependensi utama, yaitu GMP, MPFR, dan MPC. Ketiga pustaka ini digunakan untuk mendukung perhitungan aritmatika presisi tinggi yang diperlukan dalam proses kompilasi. Karena tidak semua sistem host (distro Linux) secara default menyertakan versi yang kompatibel dari pustaka-pustaka ini, maka langkah aman dan direkomendasikan adalah membangunnya secara langsung bersamaan dengan GCC. Untuk itu, setiap arsip sumber dari GMP, MPFR, dan MPC perlu diekstrak ke dalam direktori sumber GCC, lalu direktori hasil ekstraksi tersebut di-rename sesuai yang dikenali oleh sistem build GCC. Dengan cara ini, sistem build GCC secara otomatis akan mendeteksi dan mengintegrasikan pustaka-pustaka tersebut ke dalam proses kompilasi, tanpa perlu konfigurasi tambahan. Langkah ini juga memastikan konsistensi versi dan kompatibilitas penuh antara GCC dan dependensinya selama pembangunan toolchain LFS.

tar -xf ../mpfr-4.2.1.tar.xz
mv -v mpfr-4.2.1 mpfr
tar -xf ../gmp-6.3.0.tar.xz
mv -v gmp-6.3.0 gmp
tar -xf ../mpc-1.3.1.tar.gz
mv -v mpc-1.3.1 mpc

Jika host pakai x86_64

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
 ;;
esac

Sekarang untuk compile GCC

mkdir -v build
cd       build
../configure                  \
    --target=$LFS_TGT         \
    --prefix=$LFS/tools       \
    --with-glibc-version=2.41 \
    --with-sysroot=$LFS       \
    --with-newlib             \
    --without-headers         \
    --enable-default-pie      \
    --enable-default-ssp      \
    --disable-nls             \
    --disable-shared          \
    --disable-multilib        \
    --disable-threads         \
    --disable-libatomic       \
    --disable-libgomp         \
    --disable-libquadmath     \
    --disable-libssp          \
    --disable-libvtv          \
    --disable-libstdcxx       \
    --enable-languages=c,c++

compile

make
make install

Setelah selesai jalankan command

cd ../ 
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
  `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h

Command ini membuat file limits.h versi lengkap, lalu menaruhnya di direktori internal GCC, supaya GCC bisa mengenali batasan (limit) sistem secara utuh, walaupun sistem target-nya (LFS) belum punya Glibc lengkap. Hal ini dilakukan karena Saat ini, limits.h yang lengkap belum tersedia, karena glibc belum dibangun. GCC butuh header ini untuk meng-compile Glibc dan program lain nantinya. Kalau header ini tidak lengkap GCC bisa error atau compile-nya tidak optimal.

Linux-6.13.4 API Headers

Sebelum sistem bisa membangun pustaka C standar (Glibc), kernel Linux perlu menyediakan Application Programming Interface (API) berupa header file C yang bersih dan sesuai standar. Header-header ini digunakan Glibc agar dapat berkomunikasi dengan kernel, dan memastikan fungsi-fungsi dasar sistem seperti syscall bisa berjalan dengan benar. Header ini diambil dari source code kernel Linux, lalu disanitasi dan dipasang di direktori target agar Glibc bisa menggunakannya sebagai referensi saat dikompilasi.

make mrproper
make headers
find usr/include -type f ! -name '*.h' -delete
cp -rv usr/include $LFS/usr

Glibc-2.41