Ура ! наконец-то эпопея с корректной сборкой армовского тулчейна завершена !
На самом деле, все не очень сложно, если использовать мануал и исходники от cross-lfs для ARM, хотя и там есть засады - например, ссылаются на glibc 2.8.1, а на ftp лежит версия 2.6.1 ;-)
В общем, так не интересно ;-) Поэтому, в качестве дополнительного условия, решил использовать, в качестве базовых, версии исходников, которые являются актуальными в сизифе на данный момент. Благодаря работе ldv@ проблем практически не возникло - только glibc потребовал косметического вмешательства, правда, эти мелочи в cross-lfs для ARM не
unset CFLAGS
unset CXXFLAGS
export CLFS_HOST="$(echo $MACHTYPE |sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
$ echo $CLFS_HOST
i586-cross-linux-gnu
export CLFS_TARGET="armv5tel-alt-linux-gnu"
export CLFS=/home/d4s/arm/toolchain
export PATH=$CLFS/bin:$CLFS/cross-tools/bin:$PATH
------------------------------------------------------------------------
kernel headers:
#using glibc-kernheaders instead real kernel
cd glibc-kernheaders-2.6.27-alt3
make ARCH=arm INSTALL_HDR_PATH=dest headers_install
mkdir -p ${CLFS}/usr/include
cp -rv dest/include/* ${CLFS}/usr/include
------------------------------------------------------------------------
gmp:
./configure --prefix=${CLFS}/cross-tools --enable-cxx --enable-mpbsd
make -j 8
make install
------------------------------------------------------------------------
mkfr:
LDFLAGS="-Wl,-rpath,${CLFS}/cross-tools/lib" ./configure --prefix=${CLFS}/cross-tools --enable-shared --with-gmp=${CLFS}/cross-tools
make
make install
------------------------------------------------------------------------
binutils:
mkdir binutils
cd binutils
AR=ar AS=as ../binutils-2.18.50.0.9/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} --disable-nls --enable-shared --disable-multilib
make
make install
cp -v ../binutils-2.18.50.0.9/include/libiberty.h ${CLFS}/usr/include
------------------------------------------------------------------------
Cross GCC Compiler with Static libgcc and no Threads:
AR=ar LDFLAGS="-Wl,-rpath,${CLFS}/cross-tools/lib" ../gcc-4.3.2-20081105/configure --prefix=${CLFS}/cross-tools --build=${CLFS_HOST} --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --without-headers --with-newlib --disable-decimal-float --disable-libgomp --disable-libmudflap --disable-libssp --with-mpfr=${CLFS}/cross-tools --with-gmp=${CLFS}/cross-tools --disable-shared --disable-threads --enable-languages=c
make
make install
------------------------------------------------------------------------
glibc:
mkdir glibc
cd glibc
cat > config.cache << EOF
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
EOF
echo "install_root=${CLFS}" > configparms
echo "CFLAGS += -fno-stack-protector" >> configparms
ln -s $CLFS/usr/include/linux/limits.h $CLFS/usr/include/
patch glibc-2.9-alt3/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
http://www.nabble.com/arm-linux-compilation-failure-and-possible-fix-td19229074.html
patch glibc-2.9-alt3/ports/sysdeps/arm/fpu/setjmp.S
http://sourceware.org/ml/libc-ports/2008-12/msg00011.html
cp ./bits/libc-tsd.h ./include-native/bits/libc-tsd.h
BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" ../glibc-2.9-alt3/configure --prefix=/usr --libexecdir=/usr/lib/glibc --host=${CLFS_TARGET} --build=${CLFS_HOST} --disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.9 --with-__thread --with-binutils=${CLFS}/cross-tools/bin --with-headers=${CLFS}/usr/include --cache-file=config.cache
cat > ${CLFS}/etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
EOF
TZDIR="${CLFS}/usr/share/zoneinfo" ${CLFS}/usr/bin/tzselect
cp -vf ${CLFS}/usr/share/zoneinfo/Europe/Minsk ${CLFS}/etc/localtime
------------------------------------------------------------------------
Cross compiler final version:
mkdir gcc-final
cd mkdir-final
AR=ar LDFLAGS="-Wl,-rpath,${CLFS}/cross-tools/lib" ../gcc-4.3.2-20081105/configure --prefix=${CLFS}/cross-tools --build=${CLFS_HOST} --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --with-mpfr=${CLFS}/cross-tools --with-gmp=${CLFS}/cross-tools --enable-c99 --enable-long-long --enable-threads=posix
make -j 8 AS_FOR_TARGET="${CLFS_TARGET}-as" LD_FOR_TARGET="${CLFS_TARGET}-ld"
make install
PS я не "изобретатель велосипеда", я вспоминаю, как все это работает ;-)
PPS интересно, если все это каким-то образом опакетить и поставить на студенческие компы в комплекте с qemu-arm, то это будет востребовано в универе ?
PPPS на очереди обновление ядра для sabio ;-))) сборка, на которой проестировал свежесобранный тулчейн запускается, но полноценно не работет ;-) пока ;-)
На самом деле, все не очень сложно, если использовать мануал и исходники от cross-lfs для ARM, хотя и там есть засады - например, ссылаются на glibc 2.8.1, а на ftp лежит версия 2.6.1 ;-)
В общем, так не интересно ;-) Поэтому, в качестве дополнительного условия, решил использовать, в качестве базовых, версии исходников, которые являются актуальными в сизифе на данный момент. Благодаря работе ldv@ проблем практически не возникло - только glibc потребовал косметического вмешательства, правда, эти мелочи в cross-lfs для ARM не
unset CFLAGS
unset CXXFLAGS
export CLFS_HOST="$(echo $MACHTYPE |sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
$ echo $CLFS_HOST
i586-cross-linux-gnu
export CLFS_TARGET="armv5tel-alt-linux-gnu"
export CLFS=/home/d4s/arm/toolchain
export PATH=$CLFS/bin:$CLFS/cross-tools/bin:$PATH
------------------------------------------------------------------------
kernel headers:
#using glibc-kernheaders instead real kernel
cd glibc-kernheaders-2.6.27-alt3
make ARCH=arm INSTALL_HDR_PATH=dest headers_install
mkdir -p ${CLFS}/usr/include
cp -rv dest/include/* ${CLFS}/usr/include
------------------------------------------------------------------------
gmp:
./configure --prefix=${CLFS}/cross-tools --enable-cxx --enable-mpbsd
make -j 8
make install
------------------------------------------------------------------------
mkfr:
LDFLAGS="-Wl,-rpath,${CLFS}/cross-tools/lib" ./configure --prefix=${CLFS}/cross-tools --enable-shared --with-gmp=${CLFS}/cross-tools
make
make install
------------------------------------------------------------------------
binutils:
mkdir binutils
cd binutils
AR=ar AS=as ../binutils-2.18.50.0.9/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} --disable-nls --enable-shared --disable-multilib
make
make install
cp -v ../binutils-2.18.50.0.9/include/libiberty.h ${CLFS}/usr/include
------------------------------------------------------------------------
Cross GCC Compiler with Static libgcc and no Threads:
AR=ar LDFLAGS="-Wl,-rpath,${CLFS}/cross-tools/lib" ../gcc-4.3.2-20081105/configure --prefix=${CLFS}/cross-tools --build=${CLFS_HOST} --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --without-headers --with-newlib --disable-decimal-float --disable-libgomp --disable-libmudflap --disable-libssp --with-mpfr=${CLFS}/cross-tools --with-gmp=${CLFS}/cross-tools --disable-shared --disable-threads --enable-languages=c
make
make install
------------------------------------------------------------------------
glibc:
mkdir glibc
cd glibc
cat > config.cache << EOF
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
EOF
echo "install_root=${CLFS}" > configparms
echo "CFLAGS += -fno-stack-protector" >> configparms
ln -s $CLFS/usr/include/linux/limits.h $CLFS/usr/include/
patch glibc-2.9-alt3/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
http://www.nabble.com/arm-linux-compilation-failure-and-possible-fix-td19229074.html
patch glibc-2.9-alt3/ports/sysdeps/arm/fpu/setjmp.S
http://sourceware.org/ml/libc-ports/2008-12/msg00011.html
cp ./bits/libc-tsd.h ./include-native/bits/libc-tsd.h
BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" ../glibc-2.9-alt3/configure --prefix=/usr --libexecdir=/usr/lib/glibc --host=${CLFS_TARGET} --build=${CLFS_HOST} --disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.9 --with-__thread --with-binutils=${CLFS}/cross-tools/bin --with-headers=${CLFS}/usr/include --cache-file=config.cache
cat > ${CLFS}/etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
EOF
TZDIR="${CLFS}/usr/share/zoneinfo" ${CLFS}/usr/bin/tzselect
cp -vf ${CLFS}/usr/share/zoneinfo/Europe/Minsk ${CLFS}/etc/localtime
------------------------------------------------------------------------
Cross compiler final version:
mkdir gcc-final
cd mkdir-final
AR=ar LDFLAGS="-Wl,-rpath,${CLFS}/cross-tools/lib" ../gcc-4.3.2-20081105/configure --prefix=${CLFS}/cross-tools --build=${CLFS_HOST} --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --with-mpfr=${CLFS}/cross-tools --with-gmp=${CLFS}/cross-tools --enable-c99 --enable-long-long --enable-threads=posix
make -j 8 AS_FOR_TARGET="${CLFS_TARGET}-as" LD_FOR_TARGET="${CLFS_TARGET}-ld"
make install
PS я не "изобретатель велосипеда", я вспоминаю, как все это работает ;-)
PPS интересно, если все это каким-то образом опакетить и поставить на студенческие компы в комплекте с qemu-arm, то это будет востребовано в универе ?
PPPS на очереди обновление ядра для sabio ;-))) сборка, на которой проестировал свежесобранный тулчейн запускается, но полноценно не работет ;-) пока ;-)