cookutils diff cross @ rev 421

cook, cross, *.conf: improve cross compilation and small clean
author Christophe Lincoln <pankso@slitaz.org>
date Sat May 19 04:47:53 2012 +0200 (2012-05-19)
parents 9c322a61167d
children b2edbfaef132
line diff
     1.1 --- a/cross	Wed May 16 11:55:25 2012 +0200
     1.2 +++ b/cross	Sat May 19 04:47:53 2012 +0200
     1.3 @@ -26,12 +26,12 @@
     1.4    howto           Man alike and howto
     1.5    info            Display cross-tools info
     1.6    testsuite       Execute a small testsuite
     1.7 -  check-env       Check build host tools
     1.8 +  check           Check build host environment
     1.9    download        Download necessary sources
    1.10    show-log        Show a compile log
    1.11    binutils        Compile Binutils
    1.12 +  linux-headers   Install Kernel headers
    1.13    gcc-static      Compile GCC static
    1.14 -  linux-headers   Install Kernel headers
    1.15    glibc           Compile GNU Glibc
    1.16    gcc-final       Compile final GCC
    1.17    busybox         Cross compile Busybox
    1.18 @@ -78,11 +78,12 @@
    1.19  # Get source if not yet in $SRC.
    1.20  download_src() {
    1.21  	mkdir -p $SRC && cd $SRC
    1.22 -	[ -f "binutils-$BINUTILS_VERSION.tar.bz2" ] || wget $BINUTILS_WGET
    1.23 -	[ -f "linux-$LINUX_VERSION.tar.bz2" ] || wget $LINUX_WGET
    1.24 -	[ -f "glibc-$GLIBC_VERSION.tar.bz2" ] || wget $GLIBC_WGET
    1.25 -	[ -f "gcc-$GCC_VERSION.tar.bz2" ] || wget $GCC_WGET
    1.26 -	[ -f "busybox-$BUSYBOX_VERSION.tar.bz2" ] || wget $BUSYBOX_WGET
    1.27 +	[ -f "$BINUTILS_TARBALL" ] || wget $BINUTILS_WGET
    1.28 +	[ -f "$LINUX_TARBALL" ] || wget $LINUX_WGET
    1.29 +	[ -f "$GLIBC_TARBALL" ] || wget $GLIBC_WGET
    1.30 +	[ -f "$GCC_TARBALL" ] || wget $GCC_WGET
    1.31 +	[ -f "$BUSYBOX_TARBALL" ] || wget $BUSYBOX_WGET
    1.32 +	[ -f "$PKGCONFIG_TARBALL" ] || wget $PKGCONFIG_WGET
    1.33  }
    1.34  
    1.35  # Use sysroot or not ?
    1.36 @@ -91,9 +92,41 @@
    1.37  		PREFIX=/usr
    1.38  		HDR_PATH=$SYSROOT/usr
    1.39  		sysroot="--with-sysroot=$SYSROOT"
    1.40 -		echo "Configure : $sysroot"
    1.41 +		echo "Configure: $sysroot"
    1.42  	else
    1.43 -		HDR_PATH=$PREFIX
    1.44 +		HDR_PATH=$PREFIX/usr
    1.45 +	fi
    1.46 +}
    1.47 +
    1.48 +# Work around to fix GCC include search path
    1.49 +#
    1.50 +# GCC include search path is: $PREFIX/$TARGET/include, so make sure it
    1.51 +# is a symlink to default: $PREFIX/usr/include
    1.52 +#
    1.53 +# Glibc install headers in: $PREFIX/include, move them to usr/include
    1.54 +# if needed. After when we cross compile packages with cook we have
    1.55 +# to install build dependencies using --root=$CROSS_PREFIX and so
    1.56 +# default include dir is: $PREFIX/usr/include ($PREFIX is the root
    1.57 +# of our cross environment.
    1.58 +#
    1.59 +check_include() {
    1.60 +	cd $PREFIX
    1.61 +	echo "Checking: $PREFIX"
    1.62 +	if ! readlink include >/dev/null; then
    1.63 +		echo "Creating symlink: usr/include include"
    1.64 +		cp -a include usr && rm -rf include
    1.65 +		ln -s usr/include include
    1.66 +	fi
    1.67 +	cd $PREFIX/$TARGET
    1.68 +	echo "Checking: $PREFIX/$TARGET"
    1.69 +	if ! readlink include >/dev/null; then
    1.70 +		echo "Creating symlink: ../usr/include include"
    1.71 +		cp -a include ../usr && rm -rf include
    1.72 +		ln -s ../usr/include include
    1.73 +	fi
    1.74 +	if ! readlink lib >/dev/null; then
    1.75 +		echo "Creating symlink: ../lib lib"
    1.76 +		rm -rf lib && ln -s ../lib lib
    1.77  	fi
    1.78  }
    1.79  
    1.80 @@ -101,10 +134,10 @@
    1.81  binutils() {
    1.82  	init_compile
    1.83  	rm -rf binutils-$BINUTILS_VERSION
    1.84 -	echo "Extracting: binutils-$BINUTILS_VERSION.tar.bz2"
    1.85 -	tar xjf $SRC/binutils-$BINUTILS_VERSION.tar.bz2
    1.86 +	echo "Extracting: $BINUTILS_TARBALL"
    1.87 +	tar xjf $SRC/$BINUTILS_TARBALL
    1.88  	: ${BINUTILS_ARGS=--enable-shared}
    1.89 -	echo "Configure : $BINUTILS_ARGS"
    1.90 +	echo "Configure: $BINUTILS_ARGS"
    1.91  	check_sysroot
    1.92  	cd binutils-$BINUTILS_VERSION
    1.93  	./configure \
    1.94 @@ -114,15 +147,28 @@
    1.95  		$BINUTILS_ARGS $sysroot
    1.96  	make || exit 1
    1.97  	make install
    1.98 -	#echo "cross: binutils compiled on: $(date)"
    1.99 +	echo "cross: binutils compiled on: $(date)"
   1.100  }
   1.101  
   1.102 -# 2. GCC static (first pass)
   1.103 +# 2. Kernel headers could use CROSS_COMPILE but gcc is not yet build.
   1.104 +# NOTE: Compile GCC static first then linux-headers ?
   1.105 +linux_headers() {
   1.106 +	init_compile
   1.107 +	echo "Extracting: $LINUX_TARBALL"
   1.108 +	tar xjf $SRC/$LINUX_TARBALL
   1.109 +	check_sysroot
   1.110 +	cd linux-$LINUX_VERSION
   1.111 +	make mrproper
   1.112 +	make ARCH=$ARCH headers_check
   1.113 +	make ARCH=$ARCH headers_install INSTALL_HDR_PATH=$HDR_PATH
   1.114 +}
   1.115 +
   1.116 +# 3. GCC static (first pass)
   1.117  gcc_static() {
   1.118  	init_compile
   1.119 -	echo "Extracting: gcc-$GCC_VERSION.tar.bz2"
   1.120 -	tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2
   1.121 -	echo "Configure : $GCC_STATIC_ARGS"
   1.122 +	echo "Extracting: $GCC_TARBALL"
   1.123 +	tar xjf $SRC/$GCC_TARBALL
   1.124 +	echo "Configure: $GCC_STATIC_ARGS"
   1.125  	check_sysroot
   1.126  	# Arch fixes and work around
   1.127  	case "$ARCH" in
   1.128 @@ -147,28 +193,17 @@
   1.129  	make install-gcc install-target-libgcc
   1.130  	cd $PREFIX/lib/gcc/$TARGET/$GCC_VERSION
   1.131  	echo "Creating symlink for static libgcc: libgcc_eh.a"
   1.132 -	rm -f libgcc_eh.a && ln -s libgcc.a libgcc_eh.a
   1.133 -}
   1.134 -
   1.135 -# 3. Kernel headers use static GCC
   1.136 -linux_headers() {
   1.137 -	init_compile
   1.138 -	echo "Extracting: linux-$LINUX_VERSION.tar.bz2"
   1.139 -	tar xjf $SRC/linux-$LINUX_VERSION.tar.bz2
   1.140 -	check_sysroot
   1.141 -	cd linux-$LINUX_VERSION
   1.142 -	make mrproper
   1.143 -	make ARCH=$ARCH headers_check
   1.144 -	make ARCH=$ARCH headers_install \
   1.145 -		INSTALL_HDR_PATH=$HDR_PATH
   1.146 +	rm -f libgcc_eh.a
   1.147 +	ln -s libgcc.a libgcc_eh.a
   1.148 +	echo "cross: gcc-static compiled on: $(date)"
   1.149  }
   1.150  
   1.151  # 4. GNU Glibc
   1.152  glibc() {
   1.153  	init_compile
   1.154 -	echo "Extracting: glibc-$GLIBC_VERSION.tar.bz2"
   1.155 -	tar xjf $SRC/glibc-$GLIBC_VERSION.tar.bz2
   1.156 -	echo "Configure : $GLIBC_ARGS"
   1.157 +	echo "Extracting: $GLIBC_TARBALL"
   1.158 +	tar xjf $SRC/$GLIBC_TARBALL
   1.159 +	echo "Configure: $GLIBC_ARGS"
   1.160  	[ "$continue" ] || rm -rf glibc-build
   1.161  	# Some arch may need glibc-ports and custom CFLAGS
   1.162  	case "$ARCH" in
   1.163 @@ -184,7 +219,7 @@
   1.164  		x86_64)
   1.165  			ccflags="-m64" ;;
   1.166  	esac
   1.167 -	#echo "CFLAGS: $CFLAGS"
   1.168 +	echo "CFLAGS: $CFLAGS"
   1.169  	mkdir -p glibc-build && cd glibc-build
   1.170  	BUILD_CC="gcc" \
   1.171  	CC="${TARGET}-gcc $ccflags" \
   1.172 @@ -194,7 +229,7 @@
   1.173  		--prefix=$PREFIX \
   1.174  		--libexec=$PREFIX/lib/glibc \
   1.175  		--host=$TARGET \
   1.176 -		--with-headers=$PREFIX/include \
   1.177 +		--with-headers=$PREFIX/usr/include \
   1.178  		--with-binutils=$PREFIX/bin \
   1.179  		$GLIBC_ARGS
   1.180  	make || exit 1
   1.181 @@ -204,25 +239,23 @@
   1.182  		cd $SYSROOT
   1.183  		ln -s usr/include sys-include
   1.184  	else
   1.185 -		cd $PREFIX/$TARGET
   1.186 -		rm -rf lib include
   1.187 -		ln -s ../lib lib
   1.188 -		ln -s ../include include
   1.189 +		check_include
   1.190  	fi
   1.191 -	#unset CFLAGS
   1.192 +	unset CFLAGS
   1.193 +	echo "cross: glibc compiled on: $(date)"
   1.194  }
   1.195  
   1.196  # 5. GCC final
   1.197  gcc_final() {
   1.198  	init_compile
   1.199  	if [ ! -d "gcc-$GCC_VERSION" ]; then
   1.200 -		echo "Extracting: gcc-$GCC_VERSION.tar.bz2"
   1.201 -		tar xjf $SRC/gcc-$GCC_VERSION.tar.bz2
   1.202 +		echo "Extracting: $GCC_TARBALL"
   1.203 +		tar xjf $SRC/$GCC_TARBALL
   1.204  	fi
   1.205 -	echo "Configure : $GCC_FINAL_ARGS"
   1.206 +	echo "Configure: $GCC_FINAL_ARGS"
   1.207  	check_sysroot
   1.208 -	rm -rf gcc-build
   1.209 -	mkdir gcc-build && cd gcc-build
   1.210 +	[ "$continue" ] || rm -rf gcc-build
   1.211 +	mkdir -p gcc-build && cd gcc-build
   1.212  	../gcc-$GCC_VERSION/configure \
   1.213  		--prefix=$PREFIX \
   1.214  		--libexec=$PREFIX/lib \
   1.215 @@ -234,15 +267,16 @@
   1.216  		--with-pkgversion="SliTaz" \
   1.217  		$GCC_FINAL_ARGS $sysroot
   1.218  	make || exit 1
   1.219 -	make install
   1.220 +	make install &&
   1.221 +	echo "cross: GCC final compiled on: $(date)"
   1.222  }
   1.223  
   1.224  # Build Busybox to we can create prebuilt tiny rootfs image and boot
   1.225  # from NFS ?
   1.226  cross_busybox() {
   1.227  	init_compile
   1.228 -	echo "Extracting: busybox-$BUSYBOX_VERSION.tar.bz2"
   1.229 -	tar xjf $SRC/busybox-$BUSYBOX_VERSION.tar.bz2
   1.230 +	echo "Extracting: $BUSYBOX_TARBALL"
   1.231 +	tar xjf $SRC/$BUSYBOX_TARBALL
   1.232  	cd busybox-$BUSYBOX_VERSION
   1.233  	# CROSS_COMPILE is exported via init_compile.
   1.234  	make defconfig
   1.235 @@ -250,7 +284,8 @@
   1.236  	make install
   1.237  	chmod 4755 _install/bin/busybox
   1.238  	readelf -h _install/bin/busybox
   1.239 -	echo "Busybox install path: $(pwd)/_install"
   1.240 +	echo "cross: busybox install path: $(pwd)/_install"
   1.241 +	echo "cross: busybox compiled on: $(date)"
   1.242  }
   1.243  
   1.244  #
   1.245 @@ -297,14 +332,26 @@
   1.246  		fi
   1.247  		echo -e "\n[CHECKING] readelf -h test.out" | tee -a $logdir/testsuite.log
   1.248  		readelf -h test.out | tee -a $logdir/testsuite.log ;;
   1.249 -	check-env)
   1.250 -		for pkg in mpfr mpfr-dev gmp gmp-dev mpc-library gawk autoconf
   1.251 -		do
   1.252 +	check)
   1.253 +		echo "Checking: build system packages"
   1.254 +		for pkg in slitaz-toolchain mpfr mpfr-dev gmp gmp-dev mpc-library \
   1.255 +			gawk autoconf; do
   1.256  			if [ ! -d "/var/lib/tazpkg/installed/$pkg" ]; then
   1.257  				echo "Missing packages: $pkg"
   1.258 -				[ "$install" ] && tazpkg -gi $pkg
   1.259 +				if [ -x /usr/sbin/spk-add ]; then
   1.260 +					spk-add $pkg
   1.261 +				else
   1.262 +					tazpkg -gi $pkg
   1.263 +				fi
   1.264  			fi
   1.265 -		done ;;
   1.266 +		done
   1.267 +		# See: check_include()
   1.268 +		if [ "$SYSROOT" ]; then
   1.269 +			echo "Using: --with-sysroot=$SYSROOT"
   1.270 +			echo "WARNING: not well tested and buggy"
   1.271 +			exit 0
   1.272 +		fi
   1.273 +		check_include ;;
   1.274  	download)
   1.275  		download_src ;;
   1.276  	show-log)