cookutils rev 403

Use sysroot in option, fix for x86_64 (gcc static is fine now)
author Christophe Lincoln <pankso@slitaz.org>
date Sun May 13 17:07:21 2012 +0200 (2012-05-13)
parents f74eb62977b5
children ad6f30bc0095
files cross cross.conf
line diff
     1.1 --- a/cross	Sun May 13 15:56:33 2012 +0200
     1.2 +++ b/cross	Sun May 13 17:07:21 2012 +0200
     1.3 @@ -42,10 +42,11 @@
     1.4  # Make sure we have all directories.
     1.5  init_compile() {
     1.6  	export LC_ALL=POSIX LANG=POSIX
     1.7 -	export PATH=$PATH:$PREFIX/bin
     1.8 +	[ "$SYSROOT" ] || export PATH=$PATH:$PREFIX/bin
     1.9  	export CROSS_COMPILE=${TARGET}-
    1.10  	source=$WORK/source
    1.11  	logdir=$WORK/log
    1.12 +	#install=$WORK/install
    1.13  	mkdir -p $source $logdir $install
    1.14  	cd $source
    1.15  }
    1.16 @@ -60,36 +61,47 @@
    1.17  	[ -f "busybox-$BUSYBOX_VERSION.tar.bz2" ] || wget $BUSYBOX_WGET
    1.18  }
    1.19  
    1.20 +# Use sysroot or not ?
    1.21 +check_sysroot() {
    1.22 +	if [ "$SYSROOT" ]; then
    1.23 +		PREFIX=/usr
    1.24 +		HDR_PATH=$SYSROOT/usr
    1.25 +		sysroot="--with-sysroot=$SYSROOT"
    1.26 +		echo "Cross configure: $sysroot"
    1.27 +	else
    1.28 +		HDR_PATH=$PREFIX
    1.29 +	fi
    1.30 +}
    1.31 +
    1.32  # 1. Binutils
    1.33  binutils() {
    1.34  	echo "Extracting: binutils-$BINUTILS_VERSION.tar.bz2"
    1.35  	tar xjf $SRC/binutils-$BINUTILS_VERSION.tar.bz2
    1.36  	: ${BINUTILS_ARGS=--enable-shared}
    1.37 +	check_sysroot
    1.38  	cd binutils-$BINUTILS_VERSION
    1.39  	./configure \
    1.40  		--prefix=$PREFIX \
    1.41  		--target=$TARGET \
    1.42  		--enable-targets=$BUILD_SYSTEM \
    1.43 -		$BINUTILS_ARGS
    1.44 +		$BINUTILS_ARGS $sysroot
    1.45  	make || exit 1
    1.46  	make install
    1.47  }
    1.48  
    1.49 -# 2. Kernel headers
    1.50 -linux_headers() {
    1.51 -	echo "Extracting: linux-$LINUX_VERSION.tar.bz2"
    1.52 -	tar xjf $SRC/linux-$LINUX_VERSION.tar.bz2
    1.53 -	cd linux-$LINUX_VERSION
    1.54 -	make mrproper
    1.55 -	make ARCH=$ARCH headers_check
    1.56 -	make ARCH=$ARCH headers_install \
    1.57 -		INSTALL_HDR_PATH=$PREFIX
    1.58 -}
    1.59 -
    1.60 -# 3. GCC static (first pass)
    1.61 +# 2. GCC static (first pass)
    1.62  gcc_static() {
    1.63  	echo "Extracting: gcc-$GCC_VERSION.tar.bz2"
    1.64  	tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2
    1.65 +	check_sysroot
    1.66 +	# Arch fixes and work around
    1.67 +	case "$ARCH" in
    1.68 +		x86_64)
    1.69 +			# GCC wants Glib headers in cross environment (not tested
    1.70 +			# with sysroot) Should we install glibc-headers before ?
    1.71 +			[ "$SYSROOT" ] || \
    1.72 +				ls -s /usr/include $PREFIX/$TARGET/include ;;
    1.73 +	esac
    1.74  	rm -rf gcc-static
    1.75  	mkdir gcc-static && cd gcc-static
    1.76  	../gcc-$GCC_VERSION/configure \
    1.77 @@ -100,7 +112,7 @@
    1.78  		--disable-threads \
    1.79  		--without-headers \
    1.80  		--with-newlib \
    1.81 -		$GCC_STATIC_ARGS
    1.82 +		$GCC_STATIC_ARGS $sysroot
    1.83  	make all-gcc all-target-libgcc || exit 1
    1.84  	make install-gcc install-target-libgcc
    1.85  	cd $PREFIX/lib/gcc/$TARGET/$GCC_VERSION
    1.86 @@ -108,13 +120,25 @@
    1.87  	rm -f libgcc_eh.a && ln -s libgcc.a libgcc_eh.a
    1.88  }
    1.89  
    1.90 +# 3. Kernel headers use static GCC
    1.91 +linux_headers() {
    1.92 +	echo "Extracting: linux-$LINUX_VERSION.tar.bz2"
    1.93 +	tar xjf $SRC/linux-$LINUX_VERSION.tar.bz2
    1.94 +	check_sysroot
    1.95 +	cd linux-$LINUX_VERSION
    1.96 +	make mrproper
    1.97 +	make ARCH=$ARCH headers_check
    1.98 +	make ARCH=$ARCH headers_install \
    1.99 +		INSTALL_HDR_PATH=$HDR_PATH
   1.100 +}
   1.101 +
   1.102  # 4. GNU Glibc
   1.103  glibc() {
   1.104  	echo "Extracting: glibc-$GLIBC_VERSION.tar.bz2"
   1.105  	tar xjf $SRC/glibc-$GLIBC_VERSION.tar.bz2
   1.106  	[ "$continue" ] || rm -rf glibc-build
   1.107  	# Some arch may need glibc-ports and custom CFLAGS
   1.108 -	case $ARCH in
   1.109 +	case "$ARCH" in
   1.110  		arm)
   1.111  			#export CFLAGS="-march=armv6 -mtune=generic -g -O2"
   1.112  			[ -f "$SRC/glibc-ports-$GLIBC_VERSION.tar.bz2" ] || wget \
   1.113 @@ -139,11 +163,14 @@
   1.114  		--enable-add-ons $GLIBC_ARGS
   1.115  	make || exit 1
   1.116  	make install
   1.117 -	cd $PREFIX/$TARGET
   1.118 -	rm -rf lib include
   1.119 -	ln -s ../lib lib
   1.120 -	ln -s ../include include
   1.121 -	unset CFLAGS
   1.122 +	# Work around to let GCC find Glibc headers.
   1.123 +	if [ ! "$SYSROOT" ]; then
   1.124 +		cd $PREFIX/$TARGET
   1.125 +		rm -rf lib include
   1.126 +		ln -s ../lib lib
   1.127 +		ln -s ../include include
   1.128 +	fi
   1.129 +	#unset CFLAGS
   1.130  }
   1.131  
   1.132  # 5. GCC final
   1.133 @@ -152,6 +179,7 @@
   1.134  		echo "Extracting: gcc-$GCC_VERSION.tar.bz2"
   1.135  		tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2
   1.136  	fi
   1.137 +	check_sysroot
   1.138  	rm -rf gcc-build
   1.139  	mkdir gcc-build && cd gcc-build
   1.140  	../gcc-$GCC_VERSION/configure \
   1.141 @@ -163,7 +191,7 @@
   1.142  		--enable-long-long \
   1.143  		--enable-__cxa_atexit \
   1.144  		--with-pkgversion="SliTaz" \
   1.145 -		$GCC_FINAL_ARGS
   1.146 +		$GCC_FINAL_ARGS $sysroot
   1.147  	make || exit 1
   1.148  	make install
   1.149  }
   1.150 @@ -180,6 +208,7 @@
   1.151  	make install
   1.152  	chmod 4755 _install/bin/busybox
   1.153  	readelf -h _install/bin/busybox
   1.154 +	echo "Busybox install path: $(pwd)/_install"
   1.155  }
   1.156  
   1.157  #
   1.158 @@ -198,9 +227,13 @@
   1.159  		cat << EOT
   1.160  Target arch     : $ARCH
   1.161  C Compiler      : $CC
   1.162 -Additional path : $PREFIX/bin
   1.163  Build directory : $WORK
   1.164  EOT
   1.165 +		if [ "$SYSROOT" ]; then
   1.166 +			echo "Arch sysroot    : $SYSROOT"
   1.167 +		else
   1.168 +			echo "Additional path : $PREFIX/bin"
   1.169 +		fi
   1.170  		separator && echo ""
   1.171  		echo "GCC version" && separator
   1.172  		if [ -x "$PREFIX/$CC" ]; then
   1.173 @@ -247,12 +280,12 @@
   1.174  		init_compile
   1.175  		rm -f $logdir/binutils.log
   1.176  		binutils 2>&1 | tee $logdir/binutils.log ;;
   1.177 +	gcc-static)
   1.178 +		init_compile
   1.179 +		gcc_static 2>&1 | tee $logdir/gcc-static.log ;;
   1.180  	linux-headers)
   1.181  		init_compile
   1.182  		linux_headers 2>&1 | tee $logdir/linux-headers.log ;;
   1.183 -	gcc-static)
   1.184 -		init_compile
   1.185 -		gcc_static 2>&1 | tee $logdir/gcc-static.log ;;
   1.186  	glibc)
   1.187  		init_compile
   1.188  		glibc 2>&1 | tee $logdir/glibc.log ;;
   1.189 @@ -269,8 +302,8 @@
   1.190  		echo "Compile start: $(date)" | tee $logdir/compile.log
   1.191  		download_src
   1.192  		binutils 2>&1 | tee $logdir/binutils.log
   1.193 +		gcc_static 2>&1 | tee $logdir/gcc-static.log
   1.194  		linux_headers 2>&1 | tee $logdir/linux-headers.log
   1.195 -		gcc_static 2>&1 | tee $logdir/gcc-static.log
   1.196  		glibc 2>&1 | tee $logdir/glibc.log
   1.197  		gcc_final 2>&1 | tee $logdir/gcc-final.log
   1.198  		echo ""
     2.1 --- a/cross.conf	Sun May 13 15:56:33 2012 +0200
     2.2 +++ b/cross.conf	Sun May 13 17:07:21 2012 +0200
     2.3 @@ -9,6 +9,11 @@
     2.4  SRC=/home/slitaz/src
     2.5  PREFIX=/usr/cross/$ARCH
     2.6  
     2.7 +# Sysroot settings. If sysroot is used PREFIX will be set to /usr.
     2.8 +# Set sysroot to point to the directory of the cross toolchain
     2.9 +# Example: SYSROOT="/usr/$TARGET"
    2.10 +SYSROOT=""
    2.11 +
    2.12  # Cross-tools versions
    2.13  BINUTILS_VERSION="2.22"
    2.14  LINUX_VERSION="2.6.35.13"