113 lines
3.5 KiB
Plaintext
113 lines
3.5 KiB
Plaintext
|
# 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]
|
||
|
}
|
||
|
}
|