因为通常无法跑目标平台的程序,更或者只有 static stage1 gcc 时无法编译可运行的程序,编译 cross glibc时会遇到无法计算 long double的问题。这个小脚本片段通过编译c程序为as代码来来计算 long double :
# get size of long double
echo 'int size_of_long_double=sizeof(long double);' > long_double.c
"$STAGE1_GCC" -S long_double.c
ac_cv_sizeof_long_double=$(grep -A1 'size_of_long_double:' long_double.s | tail -n1 | sed -n 's/^.*\..*[ \t]\+\([0-9]\+\)$/\1/p')
[ -z "$ac_cv_sizeof_long_double" ] && oops Failed to get size of long double
这段代码针对 arm 和 x86 目标平台都可以计算。 使用时设置 gcc 为你目标平台的 stage1 gcc 即可。
然后编译 glibc 时,类似这样运行 configure :
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double} \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
../../configure \
--prefix=/usr \
--host=$ARCH-linux \
--enable-add-ons=nptl,$GLIBC_PORTS \
--enable-bind-now \
--with-tls \
--with-__thread \
--with-headers="$YCROSS_PREFIX"/sysroot/usr/include \
CC="$STAGE1_GCC" \
CFLAGS="-pipe -g -O3 $GLIBC_EXTRA_FLAGS"
阅读(1616) | 评论(0) | 转发(0) |