From 7b9bb698b93e747e02bf6ab8310c439867318f8e Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Wed, 12 Jan 2022 13:44:30 +0100 Subject: [PATCH] Add support of Android multi-ABI builds This patchset adds the rules to utilize build artifacts from multiple android abi builds and to use them for building and running tests. If target.arch has the value 'Multi', coin will now skip building Qt itself, since this means that all Qt versions were build previously. It only builds test using the pre-built Qt for Android archives and then runs the regular Android tests using multi-ABI apks. The rules are implemented for qtbase only. Change-Id: I265c70c45caa2155c75cd15c7e3a4f6a863252b8 Reviewed-by: Alexandru Croitor --- ...uild_and_upload_test_artifacts_target.yaml | 16 +++++- ...in_module_test_android_start_emulator.yaml | 2 +- .../coin_qtbase_build_template_v2.yaml | 14 ++++- .../prepare_android_multi_abi_env.yaml | 29 ++++++++++ coin/instructions/prepare_building_env.yaml | 56 ++++++++++++++----- 5 files changed, 97 insertions(+), 20 deletions(-) create mode 100644 coin/instructions/prepare_android_multi_abi_env.yaml diff --git a/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml b/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml index 8c3dfe14e13..be4db4f64e2 100644 --- a/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml +++ b/coin/instructions/cmake_build_and_upload_test_artifacts_target.yaml @@ -16,9 +16,19 @@ instructions: variableName: INSTALL_DIR_FOR_CMAKE_TESTS variableValue: "{{.InstallDir}}/target" disable_if: - condition: property - property: host.os - equals_value: Windows + condition: or + conditions: + - condition: property + property: host.os + equals_value: Windows + - condition: and + conditions: + - condition: property + property: target.osVersion + equals_value: Android_ANY + - condition: property + property: target.arch + equals_value: Multi - type: EnvironmentVariable variableName: COIN_CMAKE_ARGS variableValue: "{{.Env.COMMON_TARGET_TEST_CMAKE_ARGS}}" diff --git a/coin/instructions/coin_module_test_android_start_emulator.yaml b/coin/instructions/coin_module_test_android_start_emulator.yaml index a212f5742ec..105b3f1038b 100644 --- a/coin/instructions/coin_module_test_android_start_emulator.yaml +++ b/coin/instructions/coin_module_test_android_start_emulator.yaml @@ -3,7 +3,7 @@ instructions: - type: Group instructions: - type: ExecuteCommand - command: "{{.InstallDir}}/libexec/android_emulator_launcher.sh" + command: "{{.Env.LIBEXEC_INSTALL_DIR}}/android_emulator_launcher.sh" maxTimeInSeconds: 600 maxTimeBetweenOutput: 300 userMessageOnFailure: "Failed to start emulator, check coin log and ~/emulator.log" diff --git a/coin/instructions/coin_qtbase_build_template_v2.yaml b/coin/instructions/coin_qtbase_build_template_v2.yaml index 904d19819ba..a0edaa8e7c6 100644 --- a/coin/instructions/coin_qtbase_build_template_v2.yaml +++ b/coin/instructions/coin_qtbase_build_template_v2.yaml @@ -19,7 +19,19 @@ instructions: not_contains_value: "TargetBuildOnly" - type: Group instructions: - - !include "{{qt/qtbase}}/cmake_cross_compilation_qtbase_build_instructions.yaml" + - type: Group + instructions: + - !include "{{qt/qtbase}}/cmake_cross_compilation_qtbase_build_instructions.yaml" + disable_if: + condition: and + conditions: + - condition: property + property: target.osVersion + equals_value: Android_ANY + - condition: property + property: target.arch + equals_value: Multi + - !include "{{qt/qtbase}}/prepare_android_multi_abi_env.yaml" - type: Group instructions: - !include "{{qt/qtbase}}/cmake_build_and_upload_test_artifacts_target.yaml" diff --git a/coin/instructions/prepare_android_multi_abi_env.yaml b/coin/instructions/prepare_android_multi_abi_env.yaml new file mode 100644 index 00000000000..bbd83e600f4 --- /dev/null +++ b/coin/instructions/prepare_android_multi_abi_env.yaml @@ -0,0 +1,29 @@ +type: Group +instructions: + - type: EnvironmentVariable + variableName: INSTALL_DIR_FOR_CMAKE_TESTS + variableValue: "{{$android_artifact_path:=index .Env \"QT_CI_ARTIFACT_ID_PATH_Android-x86\"}}{{index .Env $android_artifact_path}}/install/target" + - type: AppendToEnvironmentVariable + variableName: COMMON_TARGET_TEST_CMAKE_ARGS + variableValue: " -DQT_PATH_ANDROID_ABI_arm64-v8a={{$android_artifact_path:=index .Env \"QT_CI_ARTIFACT_ID_PATH_Android-arm64-v8a\"}}{{index .Env $android_artifact_path}}/install/target" + - type: AppendToEnvironmentVariable + variableName: COMMON_TARGET_TEST_CMAKE_ARGS + variableValue: " -DQT_PATH_ANDROID_ABI_armeabi-v7a={{$android_artifact_path:=index .Env \"QT_CI_ARTIFACT_ID_PATH_Android-armeabi-v7a\"}}{{index .Env $android_artifact_path}}/install/target" + - type: AppendToEnvironmentVariable + variableName: COMMON_TARGET_TEST_CMAKE_ARGS + variableValue: " -DQT_PATH_ANDROID_ABI_x86={{$android_artifact_path:=index .Env \"QT_CI_ARTIFACT_ID_PATH_Android-x86\"}}{{index .Env $android_artifact_path}}/install/target" + - type: AppendToEnvironmentVariable + variableName: COMMON_TARGET_TEST_CMAKE_ARGS + variableValue: " -DQT_PATH_ANDROID_ABI_x86_64={{$android_artifact_path:=index .Env \"QT_CI_ARTIFACT_ID_PATH_Android-x86_64\"}}{{index .Env $android_artifact_path}}/install/target" + - type: AppendToEnvironmentVariable + variableName: COMMON_TARGET_TEST_CMAKE_ARGS + variableValue: " -DQT_HOST_PATH={{.Env.HOST_INSTALL_DIR}}" +enable_if: + condition: and + conditions: + - condition: property + property: target.osVersion + equals_value: Android_ANY + - condition: property + property: target.arch + equals_value: Multi diff --git a/coin/instructions/prepare_building_env.yaml b/coin/instructions/prepare_building_env.yaml index a94a42c3e26..f816ef56ea5 100644 --- a/coin/instructions/prepare_building_env.yaml +++ b/coin/instructions/prepare_building_env.yaml @@ -26,21 +26,6 @@ instructions: property: host.os equals_value: Windows - - type: EnvironmentVariable - variableName: LIBEXEC_INSTALL_DIR - variableValue: "{{.InstallDir}}\\bin\\" - enable_if: - condition: property - property: host.os - equals_value: Windows - - type: EnvironmentVariable - variableName: LIBEXEC_INSTALL_DIR - variableValue: "{{.InstallDir}}/libexec/" - disable_if: - condition: property - property: host.os - equals_value: Windows - # Export ICC specific env. variables - type: Group instructions: @@ -553,3 +538,44 @@ instructions: - condition: property property: host.os contains_value: Windows + + - type: EnvironmentVariable + variableName: HOST_INSTALL_DIR + variableValue: "{{$android_host_artifact_path := index .Env \"QT_CI_ARTIFACT_ID_PATH_Android-host\" }}{{index .Env $android_host_artifact_path}}/install" + enable_if: + condition: and + conditions: + - condition: property + property: target.osVersion + equals_value: Android_ANY + - condition: property + property: target.arch + equals_value: Multi + + - type: EnvironmentVariable + variableName: HOST_INSTALL_DIR + variableValue: "{{.InstallDir}}" + disable_if: + condition: and + conditions: + - condition: property + property: target.osVersion + equals_value: Android_ANY + - condition: property + property: target.arch + equals_value: Multi + + - type: EnvironmentVariable + variableName: LIBEXEC_INSTALL_DIR + variableValue: "{{.Env.HOST_INSTALL_DIR}}\\bin\\" + enable_if: + condition: property + property: host.os + equals_value: Windows + - type: EnvironmentVariable + variableName: LIBEXEC_INSTALL_DIR + variableValue: "{{.Env.HOST_INSTALL_DIR}}/libexec/" + disable_if: + condition: property + property: host.os + equals_value: Windows