1*a58d3d2aSXin Liif(NOT EXISTS ${TEST_EXECUTABLE}) 2*a58d3d2aSXin Li message(FATAL_ERROR "Error could not find ${TEST_EXECUTABLE}, ensure that you built the test binary") 3*a58d3d2aSXin Liendif() 4*a58d3d2aSXin Li 5*a58d3d2aSXin Liif(CMAKE_SYSTEM_NAME STREQUAL "Android") 6*a58d3d2aSXin Li 7*a58d3d2aSXin Li # support to run plain old binary on android devices 8*a58d3d2aSXin Li # requires android debug bridge to be installed 9*a58d3d2aSXin Li 10*a58d3d2aSXin Li find_program(adb_executable adb) 11*a58d3d2aSXin Li if(NOT adb_executable) 12*a58d3d2aSXin Li message(FATAL_ERROR "Error could not find adb") 13*a58d3d2aSXin Li endif() 14*a58d3d2aSXin Li 15*a58d3d2aSXin Li # check if any device emulator is attached 16*a58d3d2aSXin Li execute_process(COMMAND ${adb_executable} shell echo RESULT_VARIABLE CMD_RESULT) 17*a58d3d2aSXin Li if(CMD_RESULT) 18*a58d3d2aSXin Li message(FATAL_ERROR "Error adb: no devices/emulators found") 19*a58d3d2aSXin Li endif() 20*a58d3d2aSXin Li 21*a58d3d2aSXin Li # push binary 22*a58d3d2aSXin Li set(android_path /data/local/tmp) 23*a58d3d2aSXin Li execute_process(COMMAND ${adb_executable} push ${TEST_EXECUTABLE} ${android_path} RESULT_VARIABLE CMD_RESULT) 24*a58d3d2aSXin Li if(CMD_RESULT) 25*a58d3d2aSXin Li message(FATAL_ERROR "Error running ${adb_executable} push ${TEST_EXECUTABLE} ${android_path} failed with result ${CMD_RESULT}") 26*a58d3d2aSXin Li endif() 27*a58d3d2aSXin Li 28*a58d3d2aSXin Li # set permissions 29*a58d3d2aSXin Li get_filename_component(test_executable ${TEST_EXECUTABLE} NAME) 30*a58d3d2aSXin Li set(test_executable_on_android /data/local/tmp/${test_executable}) 31*a58d3d2aSXin Li execute_process(COMMAND ${adb_executable} shell chmod 555 ${test_executable_on_android} RESULT_VARIABLE CMD_RESULT) 32*a58d3d2aSXin Li if(CMD_RESULT) 33*a58d3d2aSXin Li message(FATAL_ERROR "Error running ${adb_executable} shell chmod 555 ${test_executable_on_android} failed with result ${CMD_RESULT}") 34*a58d3d2aSXin Li endif() 35*a58d3d2aSXin Li 36*a58d3d2aSXin Li # run executable 37*a58d3d2aSXin Li execute_process(COMMAND ${adb_executable} shell ${test_executable_on_android} RESULT_VARIABLE CMD_RESULT) 38*a58d3d2aSXin Li if(CMD_RESULT) 39*a58d3d2aSXin Li message(FATAL_ERROR "Error running ${adb_executable} shell ${test_executable_on_android} failed with result ${CMD_RESULT}") 40*a58d3d2aSXin Li endif() 41*a58d3d2aSXin Li 42*a58d3d2aSXin Li # clean up binary 43*a58d3d2aSXin Li execute_process(COMMAND ${adb_executable} shell rm ${test_executable_on_android} RESULT_VARIABLE CMD_RESULT) 44*a58d3d2aSXin Li if(CMD_RESULT) 45*a58d3d2aSXin Li message(FATAL_ERROR "Error running ${adb_executable} shell rm ${test_executable_on_android} failed with result ${CMD_RESULT}") 46*a58d3d2aSXin Li endif() 47*a58d3d2aSXin Li 48*a58d3d2aSXin Lielseif(CMAKE_SYSTEM_NAME STREQUAL "iOS") 49*a58d3d2aSXin Li # CTest doesn't support iOS 50*a58d3d2aSXin Li 51*a58d3d2aSXin Li message(FATAL_ERROR "Error CTest is not supported on iOS") 52*a58d3d2aSXin Li 53*a58d3d2aSXin Lielse() 54*a58d3d2aSXin Li # for other platforms just execute test binary on host 55*a58d3d2aSXin Li 56*a58d3d2aSXin Li execute_process(COMMAND ${TEST_EXECUTABLE} RESULT_VARIABLE CMD_RESULT) 57*a58d3d2aSXin Li if(CMD_RESULT) 58*a58d3d2aSXin Li message(FATAL_ERROR "Error running ${TEST_EXECUTABLE} failed with result ${CMD_RESULT}") 59*a58d3d2aSXin Li endif() 60*a58d3d2aSXin Li 61*a58d3d2aSXin Liendif()