| # Copyright (C) 2013 Free Software Foundation, Inc. |
| # |
| # This file is part of DejaGnu. |
| # |
| # DejaGnu is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # DejaGnu is distributed in the hope that it will be useful, but |
| # WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with DejaGnu; if not, write to the Free Software Foundation, |
| # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. |
| |
| process_multilib_options "" |
| |
| load_generic_config "adb" |
| |
| # We need this for find_gcc and *_include_flags/*_link_flags. |
| load_base_board_description "adb" |
| |
| set_board_info compiler "[find_gcc]" |
| |
| # We may need -mandroid. |
| set_board_info cflags "-mandroid" |
| set_board_info ldflags "-mandroid" |
| |
| # |
| # load PROG to DEST and run it with ARGS using adb |
| # |
| proc adb_load { dest prog args } { |
| # Default directory uses tmpfs, so it is the best place to run |
| # tests to avoid excessive wear of flash. |
| global android_tmp_dir |
| if { $android_tmp_dir != "" } { |
| verbose -log "android temporary directory is set to $android_tmp_dir" 3 |
| } else { |
| set android_tmp_dir "/mnt/sdcard/.android_secure" |
| verbose -log "android temporary directory will be used by default $android_tmp_dir" 3 |
| } |
| |
| if { [llength $args] > 0 } { |
| set pargs [lindex $args 0] |
| } else { |
| set pargs "" |
| } |
| |
| 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 standard_load." |
| verbose -log "$prog does not exist." 3 |
| return "untested" |
| } |
| |
| if [is_remote $dest] { |
| set localfile "./[file tail $prog].[pid]" |
| set remotefile "$android_tmp_dir/[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 "unresolved" |
| } |
| set retval [remote_exec $dest "test -x $remotefile"] |
| if { $retval != "0 {}" } { |
| # Android doesn't support symbolic input for chmod, therefore set executable permission by number |
| set retval [remote_exec $dest "chmod 755 $remotefile"] |
| if { $retval != "0 {}" } { |
| verbose -log "Setting executable permissions of $prog on [board_info $dest name] failed." 3 |
| return "unresolved" |
| } |
| } |
| if [board_info $dest exists remote_link] { |
| if [[board_info $dest remote_link] $remotefile] { |
| verbose -log "Couldn't do remote link" |
| # Can't use remote_file delete since /system/bin/rm does not |
| # support -f on Android. |
| remote_exec $dest rm $remotefile |
| return "unresolved" |
| } |
| } |
| set status [remote_exec $dest $localfile $pargs $inp] |
| remote_exec $dest rm $remotefile |
| } else { |
| set status [remote_exec $dest $prog $pargs $inp] |
| } |
| if { [lindex $status 0] < 0 } { |
| verbose -log "Couldn't execute $prog, [lindex $status 1]" 3 |
| return "unresolved" |
| } |
| set output [lindex $status 1] |
| set status [lindex $status 0] |
| |
| verbose -log "Executed $prog, status $status" 2 |
| if ![string match "" $output] { |
| verbose -log -- "$output" 2 |
| } |
| if { $status == 0 } { |
| return [list "pass" $output] |
| } else { |
| return [list "fail" $output] |
| } |
| } |