1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-19 19:59:43 +00:00

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).
This commit is contained in:
John Marino 2014-04-12 22:04:15 +00:00
parent a6e9cc6dde
commit 71f4c0a48a
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=351148
8 changed files with 589 additions and 87 deletions

View File

@ -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:

View File

@ -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}

View File

@ -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"

View File

@ -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 <netdb.h>
#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<a-intnam-linux.ads \
@ -8878,7 +8893,6 @@
- s-linux.ads<s-linux.ads \
+ s-intman.adb<s-intman-android.adb \
+ s-linux.ads<s-linux-android.ads \
+ s-mudido.adb<s-mudido-affinity.adb \
s-osinte.adb<s-osinte-android.adb \
s-osinte.ads<s-osinte-android.ads \
s-osprim.adb<s-osprim-posix.adb \
@ -8887,15 +8901,15 @@
+ s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
system.ads<system-linux-armel.ads \
- $(DUMMY_SOCKETS_TARGET_PAIRS)
+ a-exexpr.adb<a-exexpr-gcc.adb \
+ s-excmac.ads<s-excmac-arm.ads \
$(DUMMY_SOCKETS_TARGET_PAIRS)
+ s-excmac.ads<s-excmac-arm.ads
- TOOLS_TARGET_PAIRS = \
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
- indepsw.adb<indepsw-gnu.adb
-
GNATRTL_SOCKETS_OBJS =
- GNATRTL_SOCKETS_OBJS =
EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
- EH_MECHANISM=
+ EXTRA_LIBGNAT_OBJS+=raise-gcc.o sigtramp-armdroid.o
@ -8904,7 +8918,7 @@
THREADSLIB =
GNATLIB_SHARED = gnatlib-shared-dual
LIBRARY_VERSION := $(LIB_VERSION)
@@ -1072,6 +1074,7 @@
@@ -1072,6 +1071,7 @@
ifeq ($(strip $(filter-out sparc% sun solaris%,$(target_cpu) $(target_vendor) $(target_os))),)
LIBGNAT_TARGET_PAIRS_COMMON = \
a-intnam.ads<a-intnam-solaris.ads \
@ -8912,7 +8926,7 @@
s-inmaop.adb<s-inmaop-posix.adb \
s-intman.adb<s-intman-solaris.adb \
s-mudido.adb<s-mudido-affinity.adb \
@@ -1114,6 +1117,8 @@
@@ -1114,6 +1114,8 @@
TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb
EH_MECHANISM=-gcc
@ -8921,7 +8935,7 @@
THREADSLIB = -lposix4 -lthread
MISCLIB = -lposix4 -lnsl -lsocket
SO_OPTS = -Wl,-h,
@@ -1325,12 +1330,17 @@
@@ -1325,12 +1327,17 @@
# x86 FreeBSD
ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
@ -8941,7 +8955,7 @@
s-taprop.adb<s-taprop-posix.adb \
s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix.adb \
@@ -1338,11 +1348,12 @@
@@ -1338,11 +1345,12 @@
$(X86_TARGET_PAIRS) \
system.ads<system-freebsd-x86.ads
@ -8956,7 +8970,7 @@
EH_MECHANISM=-gcc
THREADSLIB= -lpthread
@@ -1354,12 +1365,17 @@
@@ -1354,12 +1362,17 @@
# x86-64 FreeBSD
ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
@ -8976,7 +8990,7 @@
s-taprop.adb<s-taprop-posix.adb \
s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix.adb \
@@ -1367,11 +1383,240 @@
@@ -1367,11 +1380,240 @@
$(X86_64_TARGET_PAIRS) \
system.ads<system-freebsd-x86_64.ads
@ -9219,7 +9233,7 @@
EH_MECHANISM=-gcc
THREADSLIB= -lpthread
@@ -3063,6 +3308,7 @@
@@ -3063,6 +3305,7 @@
socket.o : socket.c gsocket.h
sysdep.o : sysdep.c
raise.o : raise.c raise.h

View File

@ -109,6 +109,421 @@
egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' ${i}.log > /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 @@

View File

@ -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

View File

@ -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 <bsd.port.mk>

View File

@ -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