Blame baseboards/androideabi.exp

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