Artık daha fazla geçmişe takılmadan ilerleyelim ve
- su -clfs
NOT:Bazı paketleri derlemeden önce yamaya ihtiyacımız olacak ama yamaları bir sorunun etrafından dolaşmamız gerekeceği zaman uygulayacağız.
Bununla birlikte derlemelerde veya yamalarda çoğu zaman uyarılarla karşılaşabilirsiniz. Bu uyarıları güvenli birşekilde yoksayabilirsiniz.
Çünkü bazı paketler hala eski C standartlarını kullanıyor buda bazı uyarılara sebep olsada istediğimiz sorunsuz uygulanıyor.
Son olarak her paket yüklendikten sonra kaynak dizini silinirse daha sonraki tekrar yüklemelerden doğacak yanlış yapılandırmaları engellemiş olursunuz.
CFLAGS Ayarları:
- CFLAGS ve CXXFLAGS cross-tools inşası sırasında ayarlı olmamalı.
- unset CFLAGS
- unset CXXFLAGS
- echo unset CFLAGS >> ~/.bashrc
- echo unset CXXFLAGS >> ~/.bashrc
Değişkenleri Yapılandırma:
- Çapraz Derleme araçlarının inşası sırasında lazım olacak ana ve hedef makineleri belirtecek değişkenleri belirtelim:
- export CLFS_HOST = \
- "$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE |cut -d- -f2)/cross/")"
- export CLFS_TARGET="x86_64-unknown-linux-gnu"
- export CLFS_TARGET32="i686-pc-linux-gnu"
Bayraklar:
derleyici ve bağlayıcı için iki bayrağa ihtiyacımız olacak.- export BUILD32 = "-m32"
- export BUILD64 = "-m64"
- Daha sonra tekrar yükleme olursa diye bunları bashrc içine ekliyoruz.
- echo export CLFS_HOST=\""${CLFS_HOST}\"" >> ~/.bashrc
- echo export CLFS_TARGET=\""${CLFS_TARGET}\"" >> ~/.bashrc
- echo export CLFS_TARGET32=\""${CLFS_TARGET32}\"" >> ~/.bashrc
- echo export BUILD32=\""${BUILD32}\"" >> ~/.bashrc
- echo export BUILD64=\""${BUILD64}\"" >> ~/.bashrc
Linux-Headers-2.5.24.7:
Tüm mimariler için genelleşmiş başlık dosyalarını içerir.- install -dv /tools/include
- make mrproper
- make ARCH=x86_64 headers_check
- make ARCH=x86_64 INSTALL_HDR_PATH = dest headers_install
- cp -rv dest/include* /tools/include
File-4.23
Verilen dosyanın tipini düzenlemek için bir araç içerir.- ./configure -- prefix=/cross-tools
- make
- make install
Cross Binutils-2.18
bir bağlayıcı,bir assemnler ve nesnelerle ilgili diğer araçları içerir.GCC ve Glibc den önce en önemli araç budur.Dikkat!
- patch -Np1 -i ../binutils-2.18-posix-1.patch
- patch -Np1 -i ../binutils-2.18-branch_update-3.patch
- patch -Np1 -i ../binutils-2.18-genscripts_multilib-1.patch
- mkdir -v ../binutils-build
- cd../binutils-build
- Derlemeye hazırlık:
- AR=ar AS=as ../binutils-2.18/configure --prefix=/cross-tools \
- --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-lib-path=/tools/lib \
- --disable-nls --enable-shared --enable-64-bit-bfd
- Yazdıklarımız Ne Anlama Geliyor:
- --prefix=/cross-tools :
- cross-tools dizininde yükleme paketleri için hazırlar
- --host=${CLFS_HOST}
- --target ile kullanıldığında CLFS_HOST üzerinde çalışan CLFS_TARGET için çapraz mimari çalıştırılabilir dosyaları oluşturur.
- --target=${CLFS_TARGET} :
- --with-lib-path=/tools/lib :
- bağlayıcı için kütüphane dizinini /tools/lib ayarlar.
- --disable-nls :
- çarpraz derlemeiçin işe yaramayacak genelleştirmeyi pasifleştirir.
- --enable-shared
- Paylaşılan kütüphanelerin oluşturulmasını sağlar.
- --enable-64-bit-bfd
- 64 Bit Desteğini Ekler.
- Şimdi Derleyip sonrada yükleyelim.
- make configure-host
- make
- configure-host
- Bu kontrol Binutils derlemek için kullanılabilir önemli araçları host a göre emin olur.
- make install
- cp -v ../binutils-2.18/include/libiberty.h /tools/include
Cross GCC-4.2.4-Static
GNU C ve C++ derleyicilerini içerir.- patch -Np1 -i ../gcc-4.2.4-specs-1.patch
- patch -Np1 -i ../gcc-4.2.4-posix-1.patch
- Çapraz Derleme sırasında libgcc_s.so dosyasını /usr dizininde aramamak için:
- patch -Np1 -i ../gcc-4.2.4-cross_search_paths-1.patch
- kütüphanedeki Başlangıç dosyayı değiştirme
- echo "
- #undef STARTFILE_PREFIX_SPEC
- #define STARTFILE_PREFIX_SPEC \" /tools/lib/\"" >> gcc/config/linux.h
- GCC nin C önişlemcisini sadece /tools kullanması için düzenleyeceğiz:
- cp -v gcc/Makefile.in{,.orig}
- sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \
- gcc/Makefile.in.orig > gcc/Makefile.in
- GCC belgeleri Belirlenen inşa dizinindeki kaynak dizinin dışında GCC yi inşa etmeyi önerir.
- mkdir -v ../gcc-build
- cd ../gcc-build
- GCC derlemek için hazırla
- ../gcc-4.2.4/configure --prefix=/cross-tools \
- --host=${CLFS_HOST} --target=${CLFS_TARGET} \
- --with-local-prefix=/tools --disable-nls --disable-shared \
- --disable-threads --enable-languages=c
- Yapılandırma ayarlarının anlamı:
- --with-local-prefix=/tools
- Bu anahtarın amacı GCC'nin arama yolundan "/usr/local" dizini kaldırmaktır.
- Bu kesinlikle zorunlu değildir ama ana sistemin etkisini en aza indirmeye yardımcı olur.
- --disable-shared
- paylaşılan kütüphanelerin oluşumunu yoksayar.
- --disable-threads
- Bu, bu mimari için henüz oluşturulmayan, multi-thread içeren dosyaları aramasını engeller.
- GCC, Glibc Başlıkları oluşturduktan sonra multi-thread bilgisini bulabilecek.
- --enable-languages=c
- C Derleyici olmasını garantileyen bir seçenektir.
- Paketi derleyerek devam edelim:
- make all-gcc
- make install-gcc
Glibc-2.7 32 Bit
Glibc temel C kütüphanesini içerir.Bu kütüphane rutin bellek işlemleri,dizin arama, dosya açma-kapama, okuma-yazma,string elde etme,aritmetik... işlemleri sağlar.- patch -Np1 -i ../glibc-2.7-libgcc_eh-1.patch
- patch -Np -i ../glibc-2.7-localedef_segfault-1.patch
- mkdir -v ../glibc-build
- cd ../glibc-build
- echo "libc_cv_forced_unwind=yes" > config.cache
- echo "liibc_cv_c_cleanup=yes" >> config.cache
- BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc ${BUILD32}" \
- AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" \
- CFLAGS="-march=$(cut -d- -f1 <<< $CLFS_TARGET32) -mtune=generic -g -O2" \
- ../glibc-2.7/configure --prefix=/tools \
- --host=${CLFS_TARGET32} --build=${CLFS_HOST} \
- --disable-profile --enable-add-ons \
- --with-tls --enable-kernel=2.6.0 --with-__thread \
- --with-binutils=/cross-tools/bin --with-headers=/tools/include \
- --cache-file=config.cache
- Bunlar Ne Anlama Geliyor:
- BUILD_CC="gcc"
- CC="${CLFS_TARGET}-gcc ${BUILD32}"
- AR="${CLFS_TARGET}-ar"
- RANLIB="${CLFS_TARGET}-ranlib"
- CFLAGS="-march=$(cut -d- -f1 <<< $CLFS_TARGET32) -mtune=generic -g -O2"
- --disable-profile
- --enable-profile
- enable-add-ons
- --with-tls
- --enable-kernel=2.6.0
- --with-__thread
- --with-binutils=/cross-tools/bin
- Bu adımlar sırasında bazı uyarılar ile karşılaşabilirsiniz.Bakınız
- Daha sonra derleme ve yüklemeye devam ediyoruz.
- make
- make install
Glibc-2.7 64 Bit
Glibc temel C kütüphanesini içerir.Bu kütüphane rutin bellek işlemleri,dizin arama, dosya açma-kapama, okuma-yazma,string elde etme,aritmetik... işlemleri sağlar.- Glibc için bu kitapta önerilen derleme dışındaki derleme sistemin kararlılığını bozabilir.
- "libgcc_eh" için bağlamayı devre dışı bırakır:
- patch -Np1 -i ../glibc-2.7-libgcc_eh-1.patch
- segfault için localdef düzenler.
- patch -Np1 -i ../glibc-2.7-localedef_segfault-1.patch
- mkdir -v ../glibc-build
- cd ../glibc-build
- Glibc için NPTL desteğini config.cache e ekler:
- echo "libc_cv_forced_unwind=yes" > config.cache
- echo "libc_cv_c_cleanup=yes" >> config.cache
- /tools/lib64 içine Glibc için 64-bit kütüphanelerini yüklemesini söyler.
- echo "slibdir=/tools/lib64" >> configparms
- Derleme Hazırlığı
- BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc ${BUILD64}" \
- AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" \
- ../glibc-2.7/configure --prefix=/tools \
- --host=${CLFS_TARGET} --build=${CLFS_HOST} --libdir=/tools/lib64 \
- --disable-profile --enable-add-ons \
- --with-tls --enable-kernel=2.6.0 --with-__thread \
- --with-binutils=/cross-tools/bin --with-headers=/tools/include \
- --cache-file=config.cache
- Bunlar Ne Anlama Geliyor:
- CC="${CLFS_TARGET}-gcc ${BUILD64}"
- Hedef mimaride GCC nin 64bit bayraklarını kullanmasını sağlar.
- --libdir=/tools/lib64
- Glibc yi "/tools/lib" yerine "/tools/lib64" içine koyar.
- Bu aşamada Aşağıdaki uyarı görülebilir:
- configure: WARNING:
- *** These auxiliary programs are missing or
- *** incompatible versions: msgfmt
- *** some features will be disabled.
- *** Check the INSTALL file for required versions.
- GetText paketinin bir parçası olan msgfmt eksik ve uyumsuz mgmft programı genellikle zararsızdır.
- Paketi derleyip sonrada yükleyelim
- make
- make install
Cross GCC-4.2.4-Final
C ve C++ derleyicilerini içeren GNU derleyicilerini içerir.- Çekirdek derleme hata düzeltmelerini sağlar:
- patch -Np1 -i ../gcc-4.2.4-PR31490-1.patch
- GCC'nin inşa ortamımızı kullandığından emin olmak için temel ayar çiftini yapar:
- patch -Np1 -i ../gcc-4.2.4-specs-1.patch
- uygun sözdizimini kullanmak için bu yama ile emin oluruz:
- patch -Np1 -i ../gcc-4.2.4-posix-1.patch
- Çapraz derleme yapıldığı zaman gcc nin libgcc_s.so için /usr dizinini armamasını sağlar:
- patch -Np1 -i ../gcc-4.2.4-cross_search_paths-1.patch
- Doğru kütüphane yolunu vermek için Başlangıç Dosya özelliğini değiştiriyoruz.(StartFileSpec)
- echo "
- #undef STARTFILE_PREFIX_SPEC
- #define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/linux.h
- Şimdi GCC nin önişlemcisinin varsayılan arama yolunu sadece "/tools" kullanması için değiştirelim.
- cp -v gcc/Makefile.in{,.orig}
- sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \
- gcc/Makefile.in.orig > gcc/Makefile.in
- Son olarak "configure" içinde -B yi devre dışı bırakarak, -B gibi "Multilib" özelliği tarafından genişletilmemiş olan yanlış mimari kütüphanelerini almayız:
- cp -v configure{,.orig}
- sed -e '/FLAGS_FOR_TARGET.*\/lib\//s@-B[^ ]*/lib/@@g' configure.orig > \
- configure
- GCC belgelerinde tavsiye edilen; inşa edilecek dizinin dışında bir dizinde inşanın yapılmasıdır:
- mkdir -v ../gcc-build
- cd ../gcc-build
- Derleme için GCC yi hazırlayalım:
- ../gcc-4.2.4/configure --prefix=/cross-tools \
- --target=${CLFS_TARGET} --host=${CLFS_HOST} \
- --with-local-prefix=/tools --disable-nls --enable-shared \
- --enable-languages=c,c++ --enable-__cxa_atexit \
- --enable-c99 --enable-long-long --enable-threads=posix
- Bunlar Ne Anlama Geliyor:
- --enable-languages=c,c++
- Bu seçenek sadece c ve c++ derlemelerini yapmasını sağlar.
- --enable-__cxa_atexit
- Yıkıcı fonksiyon olarak çağrılmayı sağlayan etkin kılar!!!
- --enable-c99
- C programları için C99 etkinleştirir.
- --enable-long-long
- Derleyicide long long etkinleştirilir.
- --enable-threads=posix
- Multi-thread için hata yakalamasını etkinleştirir.
- Derleme ve yükleme ile devam edelim:
- make AS_FOR_TARGET="${CLFS_TARGET}-as" \
- LD_FOR_TARGET="${CLFS_TARGET}-ld"
- make install
- Başvurulan Kaynaklar:
- CLFS Kitabı(Part III. Make the Cross-Compile Tools)
1 yorum :
tebrikler güzel bir çalışma olmuş.
Yorum Gönder