| if(NOT EXISTS ${TEST_EXECUTABLE}) |
| message(FATAL_ERROR "Error could not find ${TEST_EXECUTABLE}, ensure that you built the test binary") |
| endif() |
| |
| if(CMAKE_SYSTEM_NAME STREQUAL "Android") |
| |
| # support to run plain old binary on android devices |
| # requires android debug bridge to be installed |
| |
| find_program(adb_executable adb) |
| if(NOT adb_executable) |
| message(FATAL_ERROR "Error could not find adb") |
| endif() |
| |
| # check if any device emulator is attached |
| execute_process(COMMAND ${adb_executable} shell echo RESULT_VARIABLE CMD_RESULT) |
| if(CMD_RESULT) |
| message(FATAL_ERROR "Error adb: no devices/emulators found") |
| endif() |
| |
| # push binary |
| set(android_path /data/local/tmp) |
| execute_process(COMMAND ${adb_executable} push ${TEST_EXECUTABLE} ${android_path} RESULT_VARIABLE CMD_RESULT) |
| if(CMD_RESULT) |
| message(FATAL_ERROR "Error running ${adb_executable} push ${TEST_EXECUTABLE} ${android_path} failed with result ${CMD_RESULT}") |
| endif() |
| |
| # set permissions |
| get_filename_component(test_executable ${TEST_EXECUTABLE} NAME) |
| set(test_executable_on_android /data/local/tmp/${test_executable}) |
| execute_process(COMMAND ${adb_executable} shell chmod 555 ${test_executable_on_android} RESULT_VARIABLE CMD_RESULT) |
| if(CMD_RESULT) |
| message(FATAL_ERROR "Error running ${adb_executable} shell chmod 555 ${test_executable_on_android} failed with result ${CMD_RESULT}") |
| endif() |
| |
| # run executable |
| execute_process(COMMAND ${adb_executable} shell ${test_executable_on_android} RESULT_VARIABLE CMD_RESULT) |
| if(CMD_RESULT) |
| message(FATAL_ERROR "Error running ${adb_executable} shell ${test_executable_on_android} failed with result ${CMD_RESULT}") |
| endif() |
| |
| # clean up binary |
| execute_process(COMMAND ${adb_executable} shell rm ${test_executable_on_android} RESULT_VARIABLE CMD_RESULT) |
| if(CMD_RESULT) |
| message(FATAL_ERROR "Error running ${adb_executable} shell rm ${test_executable_on_android} failed with result ${CMD_RESULT}") |
| endif() |
| |
| elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS") |
| # CTest doesn't support iOS |
| |
| message(FATAL_ERROR "Error CTest is not supported on iOS") |
| |
| else() |
| # for other platforms just execute test binary on host |
| |
| execute_process(COMMAND ${TEST_EXECUTABLE} RESULT_VARIABLE CMD_RESULT) |
| if(CMD_RESULT) |
| message(FATAL_ERROR "Error running ${TEST_EXECUTABLE} failed with result ${CMD_RESULT}") |
| endif() |
| |
| endif() |