Browse Source

rework default execution. build for all libc when -l is not given

Waldemar Brodkorb 11 years ago
parent
commit
d65472879e
1 changed files with 127 additions and 129 deletions
  1. 127 129
      embedded-test.sh

+ 127 - 129
embedded-test.sh

@@ -24,7 +24,7 @@
 # architecture specific notes:
 #  mips64n32/mips64eln32 produces segfaults on boot for uClibc/uClibc-ng
 #  sheb network card get no ip
-#  testsuite compile issues for arc and m68k
+#  testsuite compile issues for m68k
 
 arch_list_uclibcng="arm armhf bfin m68k-nommu mips mipsel mips64 mips64eln32 mips64n32 mips64n64 mips64el mips64el mips64eln64 ppc-nofpu sh sheb sparc x86 x86_64 xtensa"
 arch_list_uclibc="arm armhf arc arcbe avr32 bfin m68k-nommu mips mipsel mips64 mips64eln32 mips64n32 mips64n64 mips64el mips64el mips64eln64 ppc-nofpu sh sheb sparc x86 x86_64 xtensa"
@@ -32,6 +32,7 @@ arch_list_musl="arm armhf mips mipsel ppc-nofpu sh sheb x86 x86_64"
 arch_list_glibc="aarch64 arm armhf m68k mips mipsel mips64 mips64eln32 mips64n32 mips64n64 mips64el mips64eln32 mips64eln64 ppc-nofpu ppc64 sh sheb sparc sparc64 x86 x86_64"
 
 topdir=$(pwd)
+openadk_git=http://git.openadk.org/openadk.git
 
 tools='make git wget xz cpio tar awk sed'
 f=0
@@ -45,7 +46,7 @@ if [ $f -eq 1 ];then exit 1; fi
 
 help() {
 	cat >&2 <<EOF
-Syntax: $0 -l <libc> -a <arch> -t <tests>
+Syntax: $0 [ -l <libc> -a <arch> -t <tests> ]
 
 Explanation:
 	-l: c library to use (uclibc-ng|musl|glibc|uclibc)
@@ -58,6 +59,7 @@ Explanation:
 	-n: set NTP server for test run
 	-t: run tests (boot|libc|ltp|native)
 	-p: add extra packages to build
+	-r: rebuild C library
 	-m: start a shell in Qemu system for manual testing
 	-h: help text
 EOF
@@ -69,10 +71,11 @@ shell=0
 update=0
 debug=0
 git=0
+rebuild=0
 
 ntp=time.fu-berlin.de
 
-while getopts "hgumdcn:a:s:l:t:p:" ch; do
+while getopts "hgrumdcn:a:s:l:t:p:" ch; do
         case $ch in
                 m)
                         shell=1
@@ -89,6 +92,9 @@ while getopts "hgumdcn:a:s:l:t:p:" ch; do
                 u)
                         update=1
                         ;;
+                r)
+                        rebuild=1
+                        ;;
                 s)
                         source=$OPTARG
                         ;;
@@ -115,62 +121,10 @@ while getopts "hgumdcn:a:s:l:t:p:" ch; do
 done
 shift $((OPTIND - 1))
 
-if [ -z $libc ];then
-	echo "You need to provide a C library"
-	echo "Either uclibc-ng, musl, glibc or uclibc is supported."
-	exit 1
+if [ -z "$libc" ];then
+	libc="uclibc-ng uclibc musl glibc"
 fi
 
-case $libc in
-	uclibc-ng)
-		version=1.0.0rc1
-		gitversion=1.0.0
-		libver=uClibc-ng-${gitversion}
-		libdir=uClibc-ng
-		;;
-	uclibc)
-		version=0.9.33.2
-		gitversion=0.9.34-git
-		libver=uClibc-${gitversion}
-		libdir=uClibc
-		;;
-	glibc)
-		version=2.19
-		gitversion=2.19.90
-		libver=glibc-${gitversion}
-		libdir=glibc
-		;;
-	musl)
-		version=1.1.4
-		gitversion=git
-		libver=musl-${gitversion}
-		libdir=musl
-		;;
-	*)
-		echo "c library not supported"
-		exit 1
-esac
-
-if [ -z "$archlist" ];then
-	case $libc in
-		uclibc-ng)
-			archlist=$arch_list_uclibcng
-			;;
-		uclibc)
-			archlist=$arch_list_uclibc
-			;;
-		glibc)
-			archlist=$arch_list_glibc
-			;;
-		musl)
-			archlist=$arch_list_musl
-			;;
-	esac
-fi
-
-echo "Using OpenADK (http://www.openadk.org) to check $libc on $archlist"
-openadk_git=http://git.openadk.org/openadk.git
-
 if [ ! -d openadk ];then
 	git clone $openadk_git
 	if [ $? -ne 0 ];then
@@ -187,23 +141,12 @@ else
 	fi
 fi
 
-if [ ! -z $source ];then
-	if [ ! -d $source ];then
-		echo "Not a directory."
-		exit 1
-	fi
-	git=1
-	usrc=$(mktemp -d /tmp/XXXX)
-	echo "Creating source tarball openadk/dl/${libver}.tar.xz"
-	cp -a $source $usrc/$libver
-	mkdir -p $topdir/openadk/dl 2>/dev/null
-	rm $topdir/openadk/dl/${libver}.tar.xz 2>/dev/null
-	(cd $usrc && tar cJf $topdir/openadk/dl/${libver}.tar.xz ${libver} )
-fi
-
 runtest() {
 
-	arch=$1
+	lib=$1
+	arch=$2
+	test=$3
+
 	qemu=qemu-system-${arch}
 	qemu_args=
 	qemu_append="ntp_server=$ntp"
@@ -381,7 +324,7 @@ runtest() {
 		exit 1
 	fi
 
-	case $libc in
+	case $lib in
 		uclibc-ng)
 			prefix=uclibc
 			;;
@@ -394,9 +337,9 @@ runtest() {
 	esac
 	cross=${cpu_arch}-openadk-linux-${prefix}${suffix}
 	if [ -z $psuffix ];then
-		TCPATH=${topdir}/openadk/toolchain_qemu-${march}_${libc}_${cpu_arch}
+		TCPATH=${topdir}/openadk/toolchain_qemu-${march}_${lib}_${cpu_arch}
 	else
-		TCPATH=${topdir}/openadk/toolchain_qemu-${march}_${libc}_${cpu_arch}_${psuffix}
+		TCPATH=${topdir}/openadk/toolchain_qemu-${march}_${lib}_${cpu_arch}_${psuffix}
 	fi
 	export PATH="${TCPATH}/usr/bin:$PATH"
 
@@ -405,16 +348,16 @@ runtest() {
 		exit 1
 	fi
 
-	echo "Starting test for ${arch}"
+	echo "Starting test for $lib and ${arch}"
 	echo "Generating root filesystem for test run"
 	root=$(mktemp -d /tmp/XXXX)
-	if [ ! -f openadk/firmware/qemu-${march}_${libc}/qemu-${march}-${libc}-initramfsarchive.tar.gz ];then
+	if [ ! -f openadk/firmware/qemu-${march}_${lib}/qemu-${march}-${lib}-initramfsarchive.tar.gz ];then
 		echo "No root filesystem available for architecture ${arch}"
 		exit 1
 	fi
-	tar -xf openadk/firmware/qemu-${march}_${libc}/qemu-${march}-${libc}-initramfsarchive.tar.gz -C $root
+	tar -xf openadk/firmware/qemu-${march}_${lib}/qemu-${march}-${lib}-initramfsarchive.tar.gz -C $root
 
-	if [ $2 = "boot" ];then
+	if [ $test = "boot" ];then
 cat > ${root}/run.sh << EOF
 #!/bin/sh
 uname -a
@@ -426,7 +369,7 @@ done
 exit
 EOF
 	fi
-	if [ $2 = "ltp" ];then
+	if [ $test = "ltp" ];then
 cat > ${root}/run.sh << EOF
 #!/bin/sh
 uname -a
@@ -435,9 +378,9 @@ rdate -n \$ntp_server
 exit
 EOF
 	fi
-	if [ $2 = "libc" ];then
+	if [ $test = "libc" ];then
 
-		case $libc in
+		case $lib in
 			uclibc-ng|uclibc)
 cat > ${root}/run.sh << EOF
 #!/bin/sh
@@ -463,20 +406,20 @@ EOF
 	fi
 	chmod u+x ${root}/run.sh
 
-	kernel=openadk/firmware/qemu-${march}_${libc}/qemu-${march}-initramfsarchive-kernel
+	kernel=openadk/firmware/qemu-${march}_${lib}/qemu-${march}-initramfsarchive-kernel
 
 	echo "Creating initramfs filesystem"
 	(cd $root; find . | cpio -o -C512 -Hnewc |xz --check=crc32 --stdout > ${topdir}/initramfs.${arch})
 	rm -rf $root
 
-	echo "Now running the tests in qemu for architecture ${arch}"
+	echo "Now running the tests in qemu for architecture ${arch} and ${lib}"
 	echo "${qemu} -M ${qemu_machine} ${qemu_args} -append ${qemu_append} -kernel ${kernel} -qmp tcp:127.0.0.1:4444,server,nowait -no-reboot -nographic -initrd initramfs.${arch}"
-	${qemu} -M ${qemu_machine} ${qemu_args} -append "${qemu_append}" -kernel ${kernel} -qmp tcp:127.0.0.1:4444,server,nowait -no-reboot -nographic -initrd initramfs.${arch} | tee REPORT.${arch}.${libc}.$2
+	${qemu} -M ${qemu_machine} ${qemu_args} -append "${qemu_append}" -kernel ${kernel} -qmp tcp:127.0.0.1:4444,server,nowait -no-reboot -nographic -initrd initramfs.${arch} | tee REPORT.${arch}.${lib}.${test}.${version}
 	if [ $? -eq 0 ];then
-		echo "Test for ${arch} finished. See REPORT.${arch}.${libc}.$2"
+		echo "Test for ${arch} finished. See REPORT.${arch}.${lib}.${test}.${version}"
 		echo 
 	else
-		echo "Test $2 failed for ${arch} with ${libc}."
+		echo "Test ${test} failed for ${arch} with ${lib} ${version}."
 		echo 
 	fi
 }
@@ -489,13 +432,23 @@ compile() {
 }
 
 build() {
+
+	lib=$1
+	arch=$2
+	test=$3
+
 	cd openadk
 	make prereq
+
 	# always trigger regeneration of kernel config
-	rm build_*_${libc}_${arch}*/linux/.config 2>/dev/null
-	make package=$libc clean >/dev/null 2>&1
+	rm build_*_${lib}_${arch}*/linux/.config 2>/dev/null
+	if [ $rebuild -eq 1 ];then
+		rm dl/$lib*
+		make package=$lib clean
+	fi
+
+	DEFAULT="ADK_TARGET_LIBC=$lib ADK_TARGET_FS=initramfsarchive ADK_TARGET_COLLECTION=test"
 
-	DEFAULT="ADK_TARGET_LIBC=$libc ADK_TARGET_FS=initramfsarchive ADK_TARGET_COLLECTION=test"
 	if [ $debug -eq 1 ];then
 		DEFAULT="$DEFAULT VERBOSE=1"
 	fi
@@ -505,14 +458,14 @@ build() {
 	if [ ! -z $source ];then
 		DEFAULT="$DEFAULT ADK_NO_CHECKSUM=y"
 	fi
-	if [ $2 = "boot" ];then
+	if [ $test = "boot" ];then
 		DEFAULT="$DEFAULT ADK_TEST_BASE=y"
 	fi
-	if [ $2 = "ltp" ];then
+	if [ $test = "ltp" ];then
 		DEFAULT="$DEFAULT ADK_TEST_LTP=y"
 	fi
-	if [ $2 = "libc" ];then
-		case $libc in
+	if [ $test = "libc" ];then
+		case $lib in
 			uclibc-ng)
 				DEFAULT="$DEFAULT ADK_TEST_UCLIBC_NG_TESTSUITE=y"
 				;;
@@ -525,14 +478,10 @@ build() {
 			musl)
 				DEFAULT="$DEFAULT ADK_TEST_MUSL_TESTSUITE=y"
 				;;
-			*)
-				echo "test suite not available"
-				exit 1
-				;;
 		esac
 	fi
-	if [ $2 = "native" ];then
-		case $libc in
+	if [ $test = "native" ];then
+		case $lib in
 			uclibc-ng)
 				DEFAULT="$DEFAULT ADK_TEST_UCLIBC_NG_NATIVE=y"
 				;;
@@ -545,13 +494,9 @@ build() {
 			glibc)
 				DEFAULT="$DEFAULT ADK_TEST_GLIBC_NATIVE=y"
 				;;
-			*)
-				echo "native build not available"
-				exit 1
-				;;
 		esac
 	fi
-	case $1 in
+	case $arch in
 		aarch64)
 			DEFAULT="$DEFAULT ADK_TARGET_ARCH=aarch64 ADK_TARGET_SYSTEM=qemu-aarch64"
 			compile "$DEFAULT"
@@ -640,32 +585,85 @@ build() {
 	cd ..
 }	
 
-echo "Compiling base system and toolchain"
-
-for arch in ${archlist}; do
-	# start with a clean dir
-	if [ $clean -eq 1 ];then
-		(cd openadk && make cleandir)
-	fi
-	build $arch notest
-	if [ ! -z "$tests" ];then
-		for test in ${tests}; do
-			if [ $test = "boot" -o $test = "libc" -o $test = "ltp" -o $test = "native" ];then
-				case $arch in
-					arc|arcbe|avr32|bfin|m68k|m68k-nommu|ppc|sheb|mips64eln32|mips64n32)
-					echo "runtime tests disabled for $arch."
-					;;
-				*)
-					build $arch $test
-					runtest $arch $test
-					;;
-				esac
-			else
-				echo "Test $test is not valid. Allowed tests: boot libc ltp native"
-				exit 1
+for lib in ${libc}; do
+	case $lib in
+		uclibc-ng)
+			if [ -z "$archlist" ];then
+				archlist=$arch_list_uclibcng
+			fi
+			version=1.0.0
+			gitversion=1.0.0-git
+			libver=uClibc-ng-${gitversion}
+			libdir=uClibc-ng
+			;;
+		uclibc)
+			if [ -z "$archlist" ];then
+				archlist=$arch_list_uclibc
+			fi
+			version=0.9.33.2
+			gitversion=0.9.34-git
+			libver=uClibc-${gitversion}
+			libdir=uClibc
+			;;
+		glibc)
+			if [ -z "$archlist" ];then
+				archlist=$arch_list_glibc
+			fi
+			version=2.20
+			gitversion=2.19.90
+			libver=glibc-${gitversion}
+			libdir=glibc
+			;;
+		musl)
+			if [ -z "$archlist" ];then
+				archlist=$arch_list_musl
 			fi
-		done
+			version=1.1.4
+			gitversion=git
+			libver=musl-${gitversion}
+			libdir=musl
+			;;
+	esac
+	if [ ! -z $source ];then
+		if [ ! -d $source ];then
+			echo "Not a directory."
+			exit 1
+		fi
+		git=1
+		usrc=$(mktemp -d /tmp/XXXX)
+		echo "Creating source tarball openadk/dl/${libver}.tar.xz"
+		cp -a $source $usrc/$libver
+		mkdir -p $topdir/openadk/dl 2>/dev/null
+		rm $topdir/openadk/dl/${libver}.tar.xz 2>/dev/null
+		(cd $usrc && tar cJf $topdir/openadk/dl/${libver}.tar.xz ${libver} )
 	fi
+
+	for arch in ${archlist}; do
+		# start with a clean dir
+		if [ $clean -eq 1 ];then
+			(cd openadk && make cleandir)
+		fi
+		echo "Compiling base system and toolchain for $lib and $arch"
+		build $lib $arch notest
+		if [ ! -z "$tests" ];then
+			for test in ${tests}; do
+				if [ $test = "boot" -o $test = "libc" -o $test = "ltp" -o $test = "native" ];then
+					case $arch in
+						arc|arcbe|avr32|bfin|m68k|m68k-nommu|ppc|sheb|mips64eln32|mips64n32)
+							echo "runtime tests disabled for $arch."
+							;;
+						*)
+							build $lib $arch $test
+							runtest $lib $arch $test
+							;;
+					esac
+				else
+					echo "Test $test is not valid. Allowed tests: boot libc ltp native"
+					exit 1
+				fi
+			done
+		fi
+	done
 done
 
 echo "All tests finished."