From 71f4c0a48af7a9452b586d26b383cb2240e2b4f5 Mon Sep 17 00:00:00 2001 From: John Marino Date: Sat, 12 Apr 2014 22:04:15 +0000 Subject: [PATCH] lang/gnatdroid-armv7 (&gcc-aux): Fix socket support and gnat.dg testsuite The socket support on Gnatdroid was broken, and it had to be fixed at lang/gcc-aux. Until now, the dejagnu testsuite did not work on remote targets. To fix this, support files had to be installed at ${LOCALBASE}/share/dejagnu. Dejagnu was not made a run dependency, conditional or otherwise. The test targets for gnatdroid are really maintainer targets. Running the gnat.dg testsuite confirms that everything works in the cross-compiler except stack checking (there's no support in gcc for this just yet). --- lang/gcc-aux/Makefile | 21 +- lang/gcc-aux/Makefile.version | 4 +- lang/gcc-aux/files/android.exp | 106 +++++++ lang/gcc-aux/files/diff-ada | 46 ++- lang/gcc-aux/files/diff-ada-testsuite | 415 ++++++++++++++++++++++++++ lang/gcc-aux/files/gnatdroid.exp | 14 + lang/gnatdroid-armv7/Makefile | 7 + lang/gnatdroid-armv7/files/acats.diff | 63 ---- 8 files changed, 589 insertions(+), 87 deletions(-) create mode 100644 lang/gcc-aux/files/android.exp create mode 100644 lang/gcc-aux/files/gnatdroid.exp diff --git a/lang/gcc-aux/Makefile b/lang/gcc-aux/Makefile index 6f4e3a937075..1d2a0c03e60b 100644 --- a/lang/gcc-aux/Makefile +++ b/lang/gcc-aux/Makefile @@ -26,6 +26,7 @@ BOOTSTRAP_COMPILER= gnat-bootstrap.${GARCH}.${OPSYS:L}.tar.bz2 BLD_TARGET= ${GARCH}-aux-${OPSYS:L}${OSREL} FULL_GNATGCC= NOT_SET OS_LABEL4VERS= [${OPSYS}${GARCH:M*64:S/amd_//:S/x86_//}] +NO_MTREE= yes OPTIONS_GROUP= Standard Bootstrap OPTIONS_GROUP_Standard= FORT OBJC NLS TESTSUITE STATIC @@ -250,17 +251,25 @@ test-objc: do-install: cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \ ${MAKE_CMD} install-strip ${MAKE_ARGS} - ${RM} -rf ${STAGEDIR}${PKG_PREFIX}/share/info + ${MV} ${STAGEDIR}${PKG_PREFIX}/share ${WRKDIR}/moved_share + ${MKDIR} -p ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards \ + ${STAGEDIR}${PREFIX}/share/dejagnu/config + ${INSTALL_DATA} ${FILESDIR}/android.exp \ + ${STAGEDIR}${PREFIX}/share/dejagnu/config + ${INSTALL_DATA} ${FILESDIR}/gnatdroid.exp \ + ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards post-install: cd ${STAGEDIR}${PKG_PREFIX}; ${FIND} * -type d -empty | \ ${SORT} -dr | ${XARGS} ${RMDIR} - cd ${STAGEDIR}${PREFIX}; \ - ${FIND} ${PORTNAME} \( -type f -or -type l \) | \ - ${SORT} | ${SED} -e 's/\/man\/man[1578]\/.*[1578]$$/&.gz/' \ - >> ${TMPPLIST} + cd ${STAGEDIR}${PREFIX}; ${FIND} ${PORTNAME} share \ + \( -type f -or -type l \) | ${SORT} | \ + ${SED} -e 's/\/man\/man[1578]\/.*[1578]$$/&.gz/' >> ${TMPPLIST} cd ${STAGEDIR}${PREFIX}; ${FIND} ${PORTNAME} -type d | ${SORT} -r | \ - ${SED} -e '/^share/d' -e 's/^/@dirrm /g' >> ${TMPPLIST} + ${SED} -e 's/^/@dirrm /g' >> ${TMPPLIST} + cd ${STAGEDIR}${PREFIX}; ${FIND} share -type d | ${SORT} -r | \ + ${SED} -e 's/\(.*\)/@unexec rmdir %D\/\1 2>\/dev\/null || true/g' \ + >> ${TMPPLIST} .if ${PORT_OPTIONS:MBOOTSTRAP} post-stage: diff --git a/lang/gcc-aux/Makefile.version b/lang/gcc-aux/Makefile.version index 8b0b88e2f77f..2b7aee618ec8 100644 --- a/lang/gcc-aux/Makefile.version +++ b/lang/gcc-aux/Makefile.version @@ -4,9 +4,9 @@ GCC_BRANCH= 4.9 GCC_POINT= 0 GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT} SNAPSHOT= 20140406 -MAIN_PR= 1 +MAIN_PR= 2 ARMV5_PR= 1 -ARMV7_PR= 1 +ARMV7_PR= 2 IDENTIFICATION= gcc-${GCC_BRANCH}-${SNAPSHOT} MS_SUBDIR= snapshots/${GCC_BRANCH}-${SNAPSHOT} diff --git a/lang/gcc-aux/files/android.exp b/lang/gcc-aux/files/android.exp new file mode 100644 index 000000000000..b3eb17563371 --- /dev/null +++ b/lang/gcc-aux/files/android.exp @@ -0,0 +1,106 @@ +# This file is part of DejaGnu. + +if {![info exists board]} { + error "must set $board before loading android.exp" +} + +# For rcp_download, rsh_exec. +load_lib remote.exp + +# +# unix_load -- load the program and execute it +# +# See default.exp for explanation of arguments and results. +# + + +proc unix_load { dest prog args } { + global ld_library_path + set output "" + set orig_ld_library_path "" + + if { [llength $args] > 0 } { + set parg [lindex $args 0] + } else { + set parg "" + } + + if { [llength $args] > 1 } { + set inp [lindex $args 1] + } else { + set inp "" + } + + if {![file exists $prog]} then { + # We call both here because this should never happen. + perror "$prog does not exist in unix_load." + verbose -log "$prog does not exist." 3 + return "untested" + } + verbose "loading to $dest" 2 + if {![is_remote $dest]} { + if { "$inp" != "" } { + set command "$prog $parg < $inp" + } else { + set command "$prog $parg" + } + + if {![info exists ld_library_path]} { + set ld_library_path "" + } + + set orig_ld_library_path "[getenv LD_LIBRARY_PATH]" + setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" + setenv SHLIB_PATH "$ld_library_path:$orig_ld_library_path" + verbose -log "Setting LD_LIBRARY_PATH to $ld_library_path:$orig_ld_library_path" 2 + + set id [remote_spawn $dest "$command" "readonly"] + if { $id < 0 } { + set output "remote_spawn failed" + set status -1 + } else { + set status [remote_wait $dest 300] + set output [lindex $status 1] + set status [lindex $status 0] + } + # Unset them so we don't potentially get hosed when we try to run a + # non-testcase executable. (Setting LD_LIBRARY_PATH is the wrong + # fix in the first place; this just tries to minimize the resulting + # crap.) + if {[info exists ld_library_path]} { + setenv LD_LIBRARY_PATH $orig_ld_library_path + setenv SHLIB_PATH $orig_ld_library_path + } + } else { + set remotefile "/data/local/testsuite/[file tail $prog].[pid]" + set remotefile [remote_download $dest $prog $remotefile] + if { $remotefile == "" } { + verbose -log "Download of $prog to [board_info $dest name] failed." 3 + return [list "unresolved" ""] + } + set status [remote_exec $dest "$remotefile" $parg $inp] + remote_file $dest delete $remotefile.o $remotefile + if { [lindex $status 0] < 0 } { + verbose -log "Couldn't execute $prog, [lindex $status 1]" 3 + return [list "unresolved" ""] + } + set output [lindex $status 1] + set status [lindex $status 0] + } + + setenv LD_LIBRARY_PATH $orig_ld_library_path + setenv SHLIB_PATH $orig_ld_library_path + + verbose "Executed $prog, status $status" 2 + if {![string match "" $output]} { + verbose -- "$output" 2 + } + if { $status == 0 } { + set result "pass" + } else { + set result "fail" + } + return [list $result $output] +} + +set_board_info protocol "unix" diff --git a/lang/gcc-aux/files/diff-ada b/lang/gcc-aux/files/diff-ada index 1763266297c6..53b26e3b6497 100644 --- a/lang/gcc-aux/files/diff-ada +++ b/lang/gcc-aux/files/diff-ada @@ -846,7 +846,7 @@ + use Interfaces; + flags : constant Unsigned_32 := + Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0)); -+ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.FNDELAY); ++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.O_NDELAY); + enabled : constant Boolean := Arg.all = 1; + newval : C.int := C.int (flags); + begin @@ -1207,7 +1207,7 @@ + use Interfaces; + flags : constant Unsigned_32 := + Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0)); -+ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.FNDELAY); ++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.O_NDELAY); + enabled : constant Boolean := Arg.all = 1; + newval : C.int := C.int (flags); + begin @@ -1816,7 +1816,7 @@ #warning Sockets not supported on these platforms #undef HAVE_SOCKETS -@@ -198,8 +198,18 @@ +@@ -198,8 +198,19 @@ #include #endif @@ -1831,13 +1831,14 @@ + || defined (__DragonFly__) \ + || defined (__NetBSD__) \ + || defined (__OpenBSD__) \ ++ || defined (__ANDROID__) \ + || defined (__hpux__) \ + || defined (_WIN32) \ + || defined (__APPLE__) # define HAVE_THREAD_SAFE_GETxxxBYyyy 1 #elif defined (linux) || defined (__GLIBC__) || \ -@@ -231,7 +241,13 @@ +@@ -231,7 +242,13 @@ # endif #endif @@ -7685,6 +7686,20 @@ /* To be called from an established signal handler. Setup the DWARF CFI bits letting unwinders walk through the signal frame up into the +--- gcc/ada/socket.c.orig ++++ gcc/ada/socket.c +@@ -65,7 +65,10 @@ + int s_port; + __netdb_char_ptr s_proto; + }; +-#elif defined(__FreeBSD__) ++#elif defined(__FreeBSD__) \ ++ || defined(__DragonFly__) \ ++ || defined(__OpenBSD__) \ ++ || defined(__NetBSD__) + typedef unsigned int IOCTL_Req_T; + #else + typedef int IOCTL_Req_T; --- gcc/ada/sysdep.c.orig +++ gcc/ada/sysdep.c @@ -263,6 +263,7 @@ @@ -8868,7 +8883,7 @@ TARGET_ADA_SRCS = --- gcc/ada/gcc-interface/Makefile.in.orig +++ gcc/ada/gcc-interface/Makefile.in -@@ -1044,25 +1044,27 @@ +@@ -1044,25 +1044,24 @@ ifeq ($(strip $(filter-out arm% linux-androideabi,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads /dev/null 2>&1 if [ $? -ne 0 ]; then grep 'tasking not implemented' ${i}.log > /dev/null 2>&1 +--- /dev/null ++++ gcc/testsuite/ada/acats/run_remote.sh +@@ -0,0 +1,412 @@ ++#!/bin/sh ++# Run ACATS with the GNU Ada compiler ++ ++# The following functions are to be customized if you run in cross ++# environment or want to change compilation flags. Note that for ++# tests requiring checks not turned on by default, this script ++# automatically adds the needed flags to pass (ie: -gnato or -gnatE). ++ ++# gccflags="-O3 -fomit-frame-pointer -funroll-all-loops -finline-functions" ++# gnatflags="-gnatN" ++ ++gccflags="-O2" ++gnatflags="-gnatws" ++tabtarget="/data/local/testsuite" ++STRIP="arm-aux-linux-androideabi-strip" ++ ++target_run () { ++ # Run on rooted tablet (port 22 vs port 2222) ++ BN=`basename $*` ++ $STRIP_FOR_TARGET $* ++ /usr/bin/scp -qp $* root@tablet:$tabtarget/ ++ /usr/bin/ssh -q tablet $tabtarget/$BN ++} ++ ++target_cmd () { ++ /usr/bin/ssh -q tablet "$1" ++} ++ ++# End of customization section. ++ ++display_noeol () { ++ printf "$@" ++ printf "$@" >> $dir/acats.sum ++ printf "$@" >> $dir/acats.log ++} ++ ++display () { ++ echo "$@" ++ echo "$@" >> $dir/acats.sum ++ echo "$@" >> $dir/acats.log ++} ++ ++log () { ++ echo "$@" >> $dir/acats.sum ++ echo "$@" >> $dir/acats.log ++} ++ ++inform () { ++ printf "%04d %7s" $1 $2 ++} ++ ++disinform () { ++ printf "\r" ++} ++ ++dir=`${PWDCMD-pwd}` ++ ++if [ "$testdir" = "" ]; then ++ echo You must use make check or make check-ada ++ exit 1 ++fi ++ ++if [ "$dir" = "$testdir" ]; then ++ echo "error: srcdir must be different than objdir, exiting." ++ exit 1 ++fi ++ ++target_gnatmake () { ++ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\" ++ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" ++} ++ ++target_gcc () { ++ $GCC $gccflags $* ++} ++ ++clean_dir () { ++ rm -f "$binmain" *.o *.ali > /dev/null 2>&1 ++} ++ ++find_main () { ++ ls ${i}?.adb > ${i}.lst 2> /dev/null ++ ls ${i}*m.adb >> ${i}.lst 2> /dev/null ++ ls ${i}.adb >> ${i}.lst 2> /dev/null ++ main=`tail -1 ${i}.lst` ++} ++ ++split_testid () { ++ local mysplit=`echo $1 | awk -F/ '{print "section=" $1 "; TN=" $2 "; prog=" $3 ";"}'` ++ eval ${mysplit} ++} ++ ++EXTERNAL_OBJECTS="" ++# Global variable to communicate external objects to link with. ++ ++rm -f $dir/acats.sum $dir/acats.log $dir/transfer.lst ++ ++display "Test Run By $USER on `date`" ++ ++display " === acats configuration ===" ++ ++target=`$GCC -dumpmachine` ++ ++display target gcc is $GCC ++display `$GCC -v 2>&1` ++display host=`gcc -dumpmachine` ++display target=$target ++display `type gnatmake-cross` ++gnatls-cross -v >> $dir/acats.log ++display "" ++ ++# Let's be tidy and clear off the remote device first ++target_cmd "cd ${tabtarget}; rm logs/*; rmdir logs; rm *" ++ ++display " === acats support ===" ++display_noeol "Generating support files..." ++ ++rm -rf $dir/support ++mkdir -p $dir/support ++cd $dir/support ++ ++cp $testdir/support/*.ada $testdir/support/*.a $testdir/support/*.tst $dir/support ++ ++# Find out the size in bit of an address on the target ++target_gnatmake $testdir/support/impbit.adb >> $dir/acats.log 2>&1 ++target_run $dir/support/impbit > $dir/support/impbit.out 2>&1 ++target_bit=`cat $dir/support/impbit.out` ++echo target_bit="$target_bit" >> $dir/acats.log ++ ++# Find out a suitable asm statement ++# Adapted from configure.ac gcc_cv_as_dwarf2_debug_line ++case "$target" in ++ ia64*-*-* | s390*-*-*) ++ target_insn="nop 0" ++ ;; ++ mmix-*-*) ++ target_insn="swym 0" ++ ;; ++ *) ++ target_insn="nop" ++ ;; ++esac ++echo target_insn="$target_insn" >> $dir/acats.log ++ ++sed -e "s,ACATS4GNATDIR,$dir,g" \ ++ < $testdir/support/impdef.a > $dir/support/impdef.a ++sed -e "s,ACATS4GNATDIR,$dir,g" \ ++ -e "s,ACATS4GNATBIT,$target_bit,g" \ ++ -e "s,ACATS4GNATINSN,$target_insn,g" \ ++ < $testdir/support/macro.dfs > $dir/support/MACRO.DFS ++sed -e "s,ACATS4GNATDIR,$dir,g" \ ++ < $testdir/support/tsttests.dat > $dir/support/TSTTESTS.DAT ++ ++cp $testdir/tests/cd/*.c $dir/support ++cp $testdir/tests/cxb/*.c $dir/support ++grep -v '^#' $testdir/norun.lst | sort > $dir/support/norun.lst ++ ++rm -rf $dir/run ++mv $dir/tests $dir/tests.$$ 2> /dev/null ++rm -rf $dir/tests.$$ & ++mkdir -p $dir/run ++ ++cp -pr $testdir/tests $dir/ ++ ++for i in $dir/support/*.ada $dir/support/*.a; do ++ host_gnatchop $i >> $dir/acats.log 2>&1 ++done ++ ++# These tools are used to preprocess some ACATS sources ++# they need to be compiled native on the host. ++ ++host_gnatmake -q -gnatws macrosub.adb ++if [ $? -ne 0 ]; then ++ display "**** Failed to compile macrosub" ++ exit 1 ++fi ++./macrosub > macrosub.out 2>&1 ++ ++gcc -c cd300051.c ++host_gnatmake -q -gnatws widechr.adb ++if [ $? -ne 0 ]; then ++ display "**** Failed to compile widechr" ++ exit 1 ++fi ++./widechr > widechr.out 2>&1 ++ ++rm -f $dir/support/macrosub ++rm -f $dir/support/widechr ++rm -f $dir/support/*.ali ++rm -f $dir/support/*.o ++ ++display " done." ++ ++# From here, all compilations will be made by the target compiler ++ ++display_noeol "Compiling support files..." ++ ++target_gcc -c *.c ++if [ $? -ne 0 ]; then ++ display "**** Failed to compile C code" ++ exit 1 ++fi ++ ++host_gnatchop *.adt >> $dir/acats.log 2>&1 ++ ++target_gnatmake -c -gnato -gnatE *.ads >> $dir/acats.log 2>&1 ++target_gnatmake -c -gnato -gnatE *.adb >> $dir/acats.log 2>&1 ++ ++display " done." ++display "" ++display " === acats tests ===" ++ ++if [ $# -eq 0 ]; then ++ chapters=`cd $dir/tests; echo [a-z]*` ++else ++ chapters=$* ++fi ++ ++glob_countn=0 ++glob_countok=0 ++glob_countu=0 ++countdown=0 ++ ++for chapter in $chapters; do ++ if [ -d $dir/tests/$chapter ]; then ++ cd $dir/tests/$chapter ++ ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \ ++ cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \ ++ > $dir/tests/$chapter/${chapter}.lst ++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` ++ countdown=`expr $countdown + $countn` ++ fi ++done ++ ++cat > $dir/execute.sh << EOF ++inform () { ++ printf "left: %04d" \$1 ++} ++disinform () { ++ printf "\r" ++} ++cycle () { ++ local countx=0 ++ local total=\$(echo \$testlist | awk '{print NF}') ++ mkdir -p logs ++ echo "Executing \$total tests on remote device" ++ inform \$total ++ for x in \$testlist; do ++ timeout -t 30 ./\${x} > logs/\${x}.log 2>&1 ++ countx=\$(expr \$countx + 1) ++ if [ \$countx -eq 25 ]; then ++ total=\$(expr \$total - 25) ++ countx=0 ++ disinform ++ inform \$total ++ fi ++ done ++ disinform ++ tar -czf remote.logs.tar.gz logs ++} ++testlist=" \\ ++EOF ++ ++display "All tests are being cross-compiled without execution first." ++ ++for chapter in $chapters; do ++ if [ ! -d $dir/tests/$chapter ]; then ++ continue ++ fi ++ ++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst` ++ glob_countn=`expr $glob_countn + $countn` ++ counti=0 ++ for i in `cat $dir/tests/$chapter/${chapter}.lst`; do ++ counti=`expr $counti + 1` ++ extraflags="-gnat95" ++ grep $i $testdir/overflow.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -gnato" ++ fi ++ grep $i $testdir/elabd.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -gnatE" ++ fi ++ grep $i $testdir/floatstore.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -ffloat-store" ++ fi ++ grep $i $testdir/stackcheck.lst > /dev/null 2>&1 ++ if [ $? -eq 0 ]; then ++ extraflags="$extraflags -fstack-check" ++ fi ++ inform $countdown $i ++ countdown=`expr $countdown - 1` ++ test=$dir/tests/$chapter/$i ++ mkdir $test && cd $test >> $dir/acats.log 2>&1 ++ ++ if [ $? -ne 0 ]; then ++ disinform ++ display "FAIL: $i" ++ failed="${failed}${i} " ++ clean_dir ++ continue ++ fi ++ ++ host_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1 ++ find_main ++ if [ -z "$main" ]; then ++ sync ++ find_main ++ fi ++ binmain=`echo $main | sed -e 's/\(.*\)\..*/\1/g'` ++ echo "BUILD $main" >> $dir/acats.log ++ EXTERNAL_OBJECTS="" ++ case $i in ++ cxb30*) EXTERNAL_OBJECTS="$dir/support/cxb30040.o $dir/support/cxb30060.o $dir/support/cxb30130.o $dir/support/cxb30131.o";; ++ ca1020e) rm -f ca1020e_func1.adb ca1020e_func2.adb ca1020e_proc1.adb ca1020e_proc2.adb > /dev/null 2>&1;; ++ ca14028) rm -f ca14028_func2.ads ca14028_func3.ads ca14028_proc1.ads ca14028_proc3.ads > /dev/null 2>&1;; ++ cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc ++ esac ++ if [ "$main" = "" ]; then ++ disinform ++ display "FAIL: $i" ++ failed="${failed}${i} " ++ clean_dir ++ continue ++ fi ++ ++ target_gnatmake $extraflags -I$dir/support $main >> $dir/acats.log 2>&1 ++ if [ $? -ne 0 ]; then ++ disinform ++ display "FAIL: $i" ++ failed="${failed}${i} " ++ clean_dir ++ continue ++ fi ++ echo $chapter/$i/$binmain >> $dir/transfer.lst ++ echo "$binmain \\" >> $dir/execute.sh ++ $STRIP $binmain ++ disinform ++ done ++done ++echo '"' >> $dir/execute.sh ++echo "cycle" >> $dir/execute.sh ++ ++sync ++display "Transfer files to remote device: root@tablet:$tabtarget/" ++cd $dir/tests ++cat $dir/transfer.lst | xargs tar --strip-components=2 -czf - | \ ++ target_cmd "tar -C $tabtarget -xzf -" ++cd $dir ++tar -czf - execute.sh | target_cmd "tar -C $tabtarget -xzf -" ++target_cmd "cd $tabtarget; sh execute.sh" ++rm -rf $dir/logs $dir/remote.logs.tar.gz ++/usr/bin/scp -q root@tablet:$tabtarget/remote.logs.tar.gz $dir/ ++tar -xzf $dir/remote.logs.tar.gz ++ ++countdown=`wc -l < $dir/transfer.lst` ++glob_countn=${countdown} ++for i in `cat $dir/transfer.lst`; do ++ split_testid $i ++ if [ "$section" != "$savedsect" ]; then ++ display Running chapter $section ... ++ fi ++ savedsect=$section ++ ++ #inform $countdown $TN ++ countdown=`expr $countdown - 1` ++ proglog="$dir/logs/${prog}.log" ++ echo "RUN $prog" >> $dir/acats.log ++ if [ ! -f $proglog ]; then ++ echo "LOG NOT FOUND!" >> $proglog ++ fi ++ ++ cat $proglog >> $dir/acats.log ++ ++ egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' $proglog > /dev/null 2>&1 ++ if [ $? -ne 0 ]; then ++ grep 'tasking not implemented' $proglog > /dev/null 2>&1 ++ ++ if [ $? -ne 0 ]; then ++ display "FAIL: ${TN}" ++ failed="${failed}${TN} " ++ else ++ log "UNSUPPORTED: ${TN}" ++ glob_countn=`expr $glob_countn - 1` ++ glob_countu=`expr $glob_countu + 1` ++ fi ++ else ++ log "PASS: ${TN}" ++ glob_countok=`expr $glob_countok + 1` ++ fi ++ cd $dir/tests/$section/$TN ++ clean_dir ++ #disinform ++done ++ ++display " === acats Summary ===" ++display "# of expected passes $glob_countok" ++display "# of unexpected failures `expr $glob_countn - $glob_countok`" ++ ++if [ $glob_countu -ne 0 ]; then ++ display "# of unsupported tests $glob_countu" ++fi ++ ++if [ $glob_countok -ne $glob_countn ]; then ++ display "*** FAILURES: $failed" ++fi ++ ++display "$0 completed at `date`" ++ ++exit 0 --- gcc/testsuite/gnat.dg/test_raise_from_pure.adb.orig +++ gcc/testsuite/gnat.dg/test_raise_from_pure.adb @@ -1,4 +1,4 @@ diff --git a/lang/gcc-aux/files/gnatdroid.exp b/lang/gcc-aux/files/gnatdroid.exp new file mode 100644 index 000000000000..978319f8a9b1 --- /dev/null +++ b/lang/gcc-aux/files/gnatdroid.exp @@ -0,0 +1,14 @@ +# gnatdroid testsuite running over ssh. + +load_generic_config "android" + +process_multilib_options "" + +# The default compiler for this target. +set_board_info compiler "[find_gcc]" + +set_board_info rsh_prog /usr/bin/ssh +set_board_info rcp_prog /usr/bin/scp +set_board_info protocol standard +set_board_info hostname tablet +set_board_info username root diff --git a/lang/gnatdroid-armv7/Makefile b/lang/gnatdroid-armv7/Makefile index 0868aed0851e..f2b5f32d5383 100644 --- a/lang/gnatdroid-armv7/Makefile +++ b/lang/gnatdroid-armv7/Makefile @@ -109,6 +109,8 @@ post-extract: @${ECHO} "Applying composite patch diff-${suffix}" @${PATCH} -d ${WRKSRC} -s -E < ${PATCHDIR}/diff-${suffix} .endfor + @(cd ${WRKSRC}/gcc/testsuite/ada/acats && \ + ${CP} run_remote.sh run_all.sh) do-configure: ${MKDIR} ${BUILD_WRKSRC} @@ -145,4 +147,9 @@ acats: build PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \ gmake -sk check-acats +gnatdg: build + cd ${BUILD_WRKSRC}/gcc && ${SETENV} \ + PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \ + gmake -sk check-gnat RUNTESTFLAGS=--target_board=gnatdroid + .include diff --git a/lang/gnatdroid-armv7/files/acats.diff b/lang/gnatdroid-armv7/files/acats.diff index 8b97ffc497ed..631c077a6503 100644 --- a/lang/gnatdroid-armv7/files/acats.diff +++ b/lang/gnatdroid-armv7/files/acats.diff @@ -38,66 +38,3 @@ Before running the testsuite, define "tablet" in /etc/hosts echo export PATH >> host_gnatmake echo exec gnatmake '"$@"' >> host_gnatmake ---- gcc/testsuite/ada/acats/run_all.sh.orig 2011-08-18 12:31:42.000000000 -0500 -+++ gcc/testsuite/ada/acats/run_all.sh 2011-08-18 18:26:04.000000000 -0500 -@@ -11,9 +11,14 @@ - - gccflags="-O2" - gnatflags="-gnatws" -+tabtarget="/data/local/testsuite" - - target_run () { -- eval $EXPECT -f $testdir/run_test.exp $* -+ # Run on rooted tablet (port 22 vs port 2222) -+ BN=`basename $*` -+ $STRIP_FOR_TARGET $* -+ /usr/bin/scp -qp $* root@tablet:$tabtarget/ -+ /usr/bin/ssh -q tablet $tabtarget/$BN - } - - # End of customization section. -@@ -55,13 +60,9 @@ - exit 1 - fi - --target_gnatchop () { -- gnatchop --GCC="$GCC_DRIVER" $* --} -- - target_gnatmake () { -- echo gnatmake --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\" -- gnatmake --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" -+ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\" -+ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC" - } - - target_gcc () { -@@ -94,8 +95,8 @@ - display `$GCC -v 2>&1` - display host=`gcc -dumpmachine` - display target=$target --display `type gnatmake` --gnatls -v >> $dir/acats.log -+display `type gnatmake-cross` -+gnatls-cross -v >> $dir/acats.log - display "" - - display " === acats support ===" -@@ -187,7 +188,7 @@ - exit 1 - fi - --target_gnatchop *.adt >> $dir/acats.log 2>&1 -+host_gnatchop *.adt >> $dir/acats.log 2>&1 - - target_gnatmake -c -gnato -gnatE *.ads >> $dir/acats.log 2>&1 - target_gnatmake -c -gnato -gnatE *.adb >> $dir/acats.log 2>&1 -@@ -262,7 +263,7 @@ - continue - fi - -- target_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1 -+ host_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1 - main="" - find_main - if [ -z "$main" ]; then