xref: /aosp_15_r20/external/libopus/cmake/RunTest.cmake (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
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()