You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							164 lines
						
					
					
						
							6.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							164 lines
						
					
					
						
							6.1 KiB
						
					
					
				| #!/bin/sh | |
| # | |
| # Copyright 2005-2013 Intel Corporation.  All Rights Reserved. | |
| # | |
| # This file is part of Threading Building Blocks. | |
| # | |
| # Threading Building Blocks is free software; you can redistribute it | |
| # and/or modify it under the terms of the GNU General Public License | |
| # version 2 as published by the Free Software Foundation. | |
| # | |
| # Threading Building Blocks 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 Threading Building Blocks; if not, write to the Free Software | |
| # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA | |
| # | |
| # As a special exception, you may use this file as part of a free software | |
| # library without restriction.  Specifically, if other files instantiate | |
| # templates or use macros or inline functions from this file, or you compile | |
| # this file and link it with other files to produce an executable, this | |
| # file does not by itself cause the resulting executable to be covered by | |
| # the GNU General Public License.  This exception does not however | |
| # invalidate any other reasons why the executable file might be covered by | |
| # the GNU General Public License. | |
| 
 | |
| # Usage: | |
| # android.linux.launcher.sh [-v] [-u] [-l <library>] <executable> <arg1> <arg2> <argN> | |
| #         where: -l <library> specfies the library name to be assigned to LD_PRELOAD | |
| #         where: -v enables verbose output when running the test (where supported) | |
| #         where: -u is ignored on Android | |
| # | |
| # Libs and executable necessary for testing should be present in the current directory before running. | |
| # ANDROID_SERIAL must be set to the connected Android target device name for file transfer and test runs. | |
| # ANDROID_TEST_DIRECTORY may be set to the directory used for testing on the Android target device; otherwise,  | |
| #                        the default directory used is "/data/local/tmp/$(basename $PWD)". | |
| # Note: Do not remove the redirections to '/dev/null' in the script, otherwise the nightly test system will fail. | |
| 
 | |
| do_cleanup() | |
| { | |
|     adb pull $targetdir/events.txt events.txt > /dev/null 2>&1 | |
|     # Remove target directory on the device | |
|     adb shell "rm -r ${targetdir}; mkdir -p ${targetdir}" > /dev/null 2>&1 | |
| } | |
| 
 | |
| do_trap_cleanup() | |
| { | |
|     do_cleanup | |
|     exit -1 | |
| } | |
| 
 | |
| # Process the optional arguments if present | |
| if [ "x$1" = "x-v" ]; then { | |
|     verb="$1" | |
|     shift 1 | |
| }; fi | |
| 
 | |
| if [ "x$1" = "x-u" ]; then { | |
|     shift 1 | |
| }; fi | |
| 
 | |
| if [ "x$1" = "x-l" ]; then { | |
|     ldpreload="$2" | |
|     shift 2 | |
| }; fi | |
| 
 | |
| # Collect the executable name | |
| exename=$(basename $1) | |
| shift | |
| 
 | |
| # Prepare the target directory on the device | |
| currentdir=$(basename $PWD) | |
| targetdir=${ANDROID_TEST_DIRECTORY:-/data/local/tmp/$currentdir} | |
| do_cleanup | |
| trap do_trap_cleanup INT  # if someone hits control-c, cleanup the device | |
| 
 | |
| # Collect the list of files to transfer to the target device, starting with executable itself. | |
| fnamelist="$exename" | |
| 
 | |
| # Add the C++ standard library from the NDK, which is required for all tests on Android. | |
| if [ ! -z "${LIB_GNU_STL_ANDROID}" ]; then | |
| 	fnamelist="$fnamelist ${LIB_GNU_STL_ANDROID}/libgnustl_shared.so" | |
| else | |
| 	fnamelist="$fnamelist libgnustl_shared.so" | |
| fi | |
| 
 | |
| # Find the TBB libraries and add them to the list. | |
| # Add TBB libraries from the current directory that contains libtbb* files | |
| 
 | |
| files="$(/bin/ls libtbb* 2> /dev/null)" | |
| if [ ! -z "$files" ]; then fnamelist="$fnamelist $files"; fi | |
| 
 | |
| mallocfiles="$(/bin/ls libtbbmalloc* 2> /dev/null)" | |
| if [ ! -z "$mallocfiles" ]; then { | |
|     #TODO: any better workaround instead calling echo  | |
|     #(without echo there is error: /system/bin/sh: libtbbmalloc_proxy.so: not found) | |
|     ldpreload="$ldpreload $(echo $mallocfiles)" | |
| }; fi | |
| 
 | |
| if [ ! -z "$ldpreload" ]; then ldpreload="export LD_PRELOAD=$ldpreload;"; fi | |
| 
 | |
| # Add any libraries built for specific tests. | |
| exeroot=${exename%\.*} | |
| files="$(/bin/ls ${exeroot}*.so ${exeroot}*.so.* 2> /dev/null)" | |
| if [ ! -z "$files" ]; then { | |
|     fnamelist="$fnamelist $files"  | |
| }; fi | |
| 
 | |
| # TODO: Add extra libraries from the Intel(R) Compiler for certain tests | |
| # found=$(echo $exename | egrep 'test_malloc_atexit\|test_malloc_lib_unload' 2> /dev/null) | |
| # if [ ! -z $found ] ; then | |
| #     fnamelist="$fnamelist ${compiler_path_lib}/libimf.so  \ | |
| #                           ${compiler_path_lib}/libsvml.so \ | |
| #                           ${compiler_path_lib}/libintlc.so.5" | |
| # fi | |
| 
 | |
| # Transfer collected executable and library files to the target device. | |
| transfers_ok=1 | |
| for fullname in $fnamelist; do { | |
|     if [ -r $fullname ]; then { | |
|         # Transfer the executable and libraries to top-level target directory | |
|         adb push $fullname ${targetdir}/$(basename $fullname) > /dev/null 2>&1 | |
|     }; else { | |
|         echo "Error: required file ${currentdir}/${fullname} for test $exename not available for transfer." | |
|         transfers_ok=0 | |
|     }; fi | |
| }; done | |
| 
 | |
| if [ "${transfers_ok}" = "0" ]; then { | |
|     do_cleanup | |
|     exit -1 | |
| }; fi | |
| 
 | |
| # Transfer input files used by example codes by scanning the executable argument list. | |
| for fullname in "$@"; do { | |
|     if [ -r $fullname ]; then { | |
|         directory=$(dirname $fullname) | |
|         filename=$(basename $fullname) | |
|         # strip leading "." from fullname if present | |
|         if [ "$directory" = "\." ]; then { | |
|             directory="" | |
|             fullname=$filename | |
|         }; fi | |
|         # Create the target directory to hold input file if necessary | |
|         if [ ! -z $directory ]; then { | |
|             adb shell "mkdir $directory" > /dev/null 2>&1 | |
|         }; fi | |
|         # Transfer the input file to corresponding directory on target device | |
|         adb push $fullname ${targetdir}/$fullname > /dev/null 2>&1 | |
|     }; fi | |
| }; done | |
| 
 | |
| # The return_code file is the best way found to return the status of the test execution when using adb shell. | |
| (adb shell "cd $targetdir; $ldpreload export LD_LIBRARY_PATH=.; ./$exename $verb $*; echo \$? > return_code") | sed -e "s/\\r$//" | |
| 
 | |
| # Capture the return code string and remove the trailing \r from the return_code file contents | |
| exitcode=`(adb shell "cat $targetdir/return_code 2> /dev/null") | sed -e "s/\\r$//"` | |
| 
 | |
| do_cleanup | |
| 
 | |
| # Return the exit code of the test. | |
| exit $exitcode
 |