Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Asteborg <maastebo@microsoft.com>2020-12-22 11:33:56 +0300
committerRalph Giles <giles@thaumas.net>2021-05-12 20:35:00 +0300
commitdfd6c88aaa54a03a61434c413e30c217eb98f1d5 (patch)
tree5d84c2476618b5340be12255b0c162d15cbbf8be
parent2985a40afee560dbbbc8dcf63c9eea09b3e2b733 (diff)
cmake - add support to run ctest on android #2347
Signed-off-by: Ralph Giles <giles@thaumas.net>
-rw-r--r--CMakeLists.txt49
-rw-r--r--Makefile.am1
-rw-r--r--cmake/RunTest.cmake61
3 files changed, 91 insertions, 20 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a28f441c..02de9b74 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -579,7 +579,7 @@ if(OPUS_BUILD_PROGRAMS)
target_link_libraries(opus_compare PRIVATE opus ${OPUS_REQUIRED_LIBRARIES})
endif()
-if(BUILD_TESTING)
+if(BUILD_TESTING AND NOT BUILD_SHARED_LIBS)
enable_testing()
# tests
@@ -590,29 +590,38 @@ if(BUILD_TESTING)
if(OPUS_FIXED_POINT)
target_compile_definitions(test_opus_decode PRIVATE DISABLE_FLOAT_API)
endif()
- add_test(NAME test_opus_decode COMMAND $<TARGET_FILE:test_opus_decode> WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+ add_test(NAME test_opus_decode COMMAND ${CMAKE_COMMAND}
+ -DTEST_EXECUTABLE=$<TARGET_FILE:test_opus_decode>
+ -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+ -P "${PROJECT_SOURCE_DIR}/cmake/RunTest.cmake")
add_executable(test_opus_padding ${test_opus_padding_sources})
target_include_directories(test_opus_padding
PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(test_opus_padding PRIVATE opus)
- add_test(NAME test_opus_padding COMMAND $<TARGET_FILE:test_opus_padding> WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
-
- if(NOT BUILD_SHARED_LIBS)
- # disable tests that depends on private API when building shared lib
- add_executable(test_opus_api ${test_opus_api_sources})
- target_include_directories(test_opus_api
- PRIVATE ${CMAKE_CURRENT_BINARY_DIR} celt)
- target_link_libraries(test_opus_api PRIVATE opus)
- if(OPUS_FIXED_POINT)
- target_compile_definitions(test_opus_api PRIVATE DISABLE_FLOAT_API)
- endif()
- add_test(NAME test_opus_api COMMAND $<TARGET_FILE:test_opus_api> WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
-
- add_executable(test_opus_encode ${test_opus_encode_sources})
- target_include_directories(test_opus_encode
- PRIVATE ${CMAKE_CURRENT_BINARY_DIR} celt)
- target_link_libraries(test_opus_encode PRIVATE opus)
- add_test(NAME test_opus_encode COMMAND $<TARGET_FILE:test_opus_encode> WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+ add_test(NAME test_opus_padding COMMAND ${CMAKE_COMMAND}
+ -DTEST_EXECUTABLE=$<TARGET_FILE:test_opus_padding>
+ -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+ -P "${PROJECT_SOURCE_DIR}/cmake/RunTest.cmake")
+
+ add_executable(test_opus_api ${test_opus_api_sources})
+ target_include_directories(test_opus_api
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR} celt)
+ target_link_libraries(test_opus_api PRIVATE opus)
+ if(OPUS_FIXED_POINT)
+ target_compile_definitions(test_opus_api PRIVATE DISABLE_FLOAT_API)
endif()
+ add_test(NAME test_opus_api COMMAND ${CMAKE_COMMAND}
+ -DTEST_EXECUTABLE=$<TARGET_FILE:test_opus_api>
+ -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+ -P "${PROJECT_SOURCE_DIR}/cmake/RunTest.cmake")
+
+ add_executable(test_opus_encode ${test_opus_encode_sources})
+ target_include_directories(test_opus_encode
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR} celt)
+ target_link_libraries(test_opus_encode PRIVATE opus)
+ add_test(NAME test_opus_encode COMMAND ${CMAKE_COMMAND}
+ -DTEST_EXECUTABLE=$<TARGET_FILE:test_opus_encode>
+ -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+ -P "${PROJECT_SOURCE_DIR}/cmake/RunTest.cmake")
endif()
diff --git a/Makefile.am b/Makefile.am
index 83beaa3f..70a2ebfa 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -222,6 +222,7 @@ EXTRA_DIST = opus.pc.in \
cmake/OpusFunctions.cmake \
cmake/OpusPackageVersion.cmake \
cmake/OpusSources.cmake \
+ cmake/RunTest.cmake \
cmake/config.h.cmake.in \
cmake/vla.c \
meson/get-version.py \
diff --git a/cmake/RunTest.cmake b/cmake/RunTest.cmake
new file mode 100644
index 00000000..f6f8b4a2
--- /dev/null
+++ b/cmake/RunTest.cmake
@@ -0,0 +1,61 @@
+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() \ No newline at end of file