Enable running test on Android
This patch converts all add_executable calls when building for Android to a module library and replaces the call to add_test() to use the android testrunner binary. Change-Id: I10ba5919217cdc93cc2cbbb7d13ad9d10fc5ac1a Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>bb10
parent
d183c21a2c
commit
080f9ad160
|
|
@ -2287,7 +2287,20 @@ function(add_qt_executable name)
|
|||
set(arg_INSTALL_DIRECTORY "${INSTALL_BINDIR}")
|
||||
endif()
|
||||
|
||||
add_executable("${name}" ${arg_EXE_FLAGS})
|
||||
if (ANDROID)
|
||||
add_library("${name}" MODULE)
|
||||
qt_android_apply_arch_suffix("${name}")
|
||||
qt_android_generate_deployment_settings("${name}")
|
||||
qt_android_add_apk_target("${name}")
|
||||
# On our qmake builds we don't compile the executables with
|
||||
# visibility=hidden. Not having this flag set will cause the
|
||||
# executable to have main() hidden and can then no longer be loaded
|
||||
# through dlopen()
|
||||
set_property(TARGET ${name} PROPERTY C_VISIBILITY_PRESET default)
|
||||
set_property(TARGET ${name} PROPERTY CXX_VISIBILITY_PRESET default)
|
||||
else()
|
||||
add_executable("${name}" ${arg_EXE_FLAGS})
|
||||
endif()
|
||||
|
||||
qt_autogen_tools_initial_setup(${name})
|
||||
|
||||
|
|
@ -2320,6 +2333,7 @@ function(add_qt_executable name)
|
|||
)
|
||||
set_target_properties("${name}" PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY "${arg_OUTPUT_DIRECTORY}"
|
||||
LIBRARY_OUTPUT_DIRECTORY "${arg_OUTPUT_DIRECTORY}"
|
||||
WIN32_EXECUTABLE "${arg_GUI}"
|
||||
MACOSX_BUNDLE "${arg_GUI}"
|
||||
)
|
||||
|
|
@ -2331,6 +2345,7 @@ function(add_qt_executable name)
|
|||
if(NOT arg_NO_INSTALL)
|
||||
qt_install(TARGETS "${name}"
|
||||
RUNTIME DESTINATION "${arg_INSTALL_DIRECTORY}"
|
||||
LIBRARY DESTINATION "${arg_INSTALL_DIRECTORY}"
|
||||
BUNDLE DESTINATION "${arg_INSTALL_DIRECTORY}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
|
@ -2417,15 +2432,19 @@ function(add_qt_test name)
|
|||
# and use it also for XML output
|
||||
file(RELATIVE_PATH label "${PROJECT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/${name}")
|
||||
|
||||
if(arg_QMLTEST AND NOT arg_SOURCES)
|
||||
set(test_working_dir "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(test_executable ${QT_CMAKE_EXPORT_NAMESPACE}::qmltestrunner)
|
||||
if (ANDROID)
|
||||
qt_android_add_test("${name}")
|
||||
else()
|
||||
set(test_working_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
set(test_executable "${name}")
|
||||
endif()
|
||||
if(arg_QMLTEST AND NOT arg_SOURCES)
|
||||
set(test_working_dir "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
set(test_executable ${QT_CMAKE_EXPORT_NAMESPACE}::qmltestrunner)
|
||||
else()
|
||||
set(test_working_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
set(test_executable "${name}")
|
||||
endif()
|
||||
|
||||
add_test(NAME "${name}" COMMAND ${test_executable} ${extra_test_args} -o ${name}.xml,xml -o -,txt WORKING_DIRECTORY "${test_working_dir}")
|
||||
add_test(NAME "${name}" COMMAND ${test_executable} ${extra_test_args} -o ${name}.xml,xml -o -,txt WORKING_DIRECTORY "${test_working_dir}")
|
||||
endif()
|
||||
set_tests_properties("${name}" PROPERTIES RUN_SERIAL "${arg_RUN_SERIAL}" LABELS "${label}")
|
||||
|
||||
# Get path to qtbase/bin, then prepend this path containing the shared libraries to PATH
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ function(qt_android_add_apk_target target)
|
|||
endif()
|
||||
|
||||
set(deployment_tool "${QT_HOST_PATH}/bin/androiddeployqt")
|
||||
set(apk_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>/apk")
|
||||
set(apk_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>/android-build")
|
||||
add_custom_target(${target}_prepare_apk_dir
|
||||
DEPENDS ${target}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
|
|
@ -349,3 +349,30 @@ function(qt_android_add_apk_target target)
|
|||
COMMENT "Creating APK for ${target}"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
|
||||
# Add a test for Android which will be run by the android test runner tool
|
||||
function(qt_android_add_test target)
|
||||
|
||||
set(deployment_tool "${QT_HOST_PATH}/bin/androiddeployqt")
|
||||
set(test_runner "${QT_HOST_PATH}/bin/androidtestrunner")
|
||||
|
||||
get_target_property(deployment_file ${target} QT_ANDROID_DEPLOYMENT_SETTINGS_FILE)
|
||||
if (NOT deployment_file)
|
||||
message(FATAL_ERROR "Target ${target} is not a valid android executable target\n")
|
||||
endif()
|
||||
|
||||
set(target_binary_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>")
|
||||
set(apk_dir "${target_binary_dir}/android-build")
|
||||
|
||||
add_test(NAME "${target}"
|
||||
COMMAND "${test_runner}"
|
||||
--androiddeployqt "${deployment_tool} --input ${deployment_file}"
|
||||
--adb "${ANDROID_SDK_ROOT}/platform-tools/adb"
|
||||
--path "${apk_dir}"
|
||||
--skip-install-root
|
||||
--make "${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target ${target}_make_apk"
|
||||
--apk "${apk_dir}/${target}.apk"
|
||||
--verbose
|
||||
)
|
||||
endfunction()
|
||||
|
|
|
|||
Loading…
Reference in New Issue