diff options
author | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2021-09-27 18:02:52 +0300 |
---|---|---|
committer | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2021-10-27 13:30:01 +0300 |
commit | 6c22f7e39c7b0f1c7508f39d7bd973b6cbe9aaaf (patch) | |
tree | 989fd01b0a33fec5a4d67005df45feafa8a5fb55 /coin | |
parent | c91b5dae9a5e62e3912781a8e7520a746bc8983e (diff) |
CI: Add QNX qemu support
* Script used to parse env variables and run test over ssh on qemu
* Script to start qnx qemu
* Script used to set env variables for ssh so they are correct in qemu
* Add b2qt sdk host toolchain to path for actual qemu binaries
Task-number: QTBUG-87628
Pick-to: 6.2
Change-Id: I951172211c2963654899491568771310a410e616
Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
Diffstat (limited to 'coin')
5 files changed, 156 insertions, 4 deletions
diff --git a/coin/instructions/cmake_setup_running_qnxqemu_tests_env_vars.yaml b/coin/instructions/cmake_setup_running_qnxqemu_tests_env_vars.yaml new file mode 100644 index 0000000000..031e3eb4c1 --- /dev/null +++ b/coin/instructions/cmake_setup_running_qnxqemu_tests_env_vars.yaml @@ -0,0 +1,40 @@ +type: Group +instructions: + - type: WriteFile + fileContents: | + #!/usr/bin/python3 + import subprocess + import calendar + import datetime + import time + import sys + import os + import re + + file=os.path.basename(sys.argv[1]) + timestamp = str(round(time.time() * 1000)) + resultdir = os.getenv('COIN_CTEST_RESULTSDIR') + results_file = resultdir + "/testresults/" + file +"-" + timestamp + ".xml,xml" + testargs = [" -o", results_file, "-o", "-,txt"] + if re.search("testlib.selftests.tst_selftests", sys.argv[1]): + testargs = [] + testcmd = sys.argv[1] + testcmd += ' '.join(testargs) + qemuargs = os.getenv('TESTARGS') + sshcmd, ldenv, backend, qpa = qemuargs.split() + testdir = sys.argv[1][::-1].split('/', 1)[1][::-1] + testcmd = "cd " + testdir + ";" + ldenv + " " + backend + " " + qpa + " " + testcmd + proc = subprocess.run(["ssh", sshcmd, testcmd]) + exit(proc.returncode) + filename: "{{.SourceDir}}/coin_qnx_qemu_runner.py" + fileMode: 755 + - type: ExecuteCommand + command: "chmod 755 {{.SourceDir}}/coin_qnx_qemu_runner.py" + maxTimeInSeconds: 10 + maxTimeBetweenOutput: 10 + userMessageOnFailure: > + Failed to change file permission. + disable_if: + condition: property + property: host.os + equals_value: Windows diff --git a/coin/instructions/cmake_setup_running_tests_env_vars.yaml b/coin/instructions/cmake_setup_running_tests_env_vars.yaml index f2c290a3df..c1a83eae07 100644 --- a/coin/instructions/cmake_setup_running_tests_env_vars.yaml +++ b/coin/instructions/cmake_setup_running_tests_env_vars.yaml @@ -50,7 +50,7 @@ instructions: equals_property: target.os - condition: property property: target.osVersion - not_equals_value: QEMU + not_in_values: [QEMU, QNX_710] - type: Group instructions: - type: EnvironmentVariable @@ -64,4 +64,16 @@ instructions: equals_property: target.os - condition: property property: target.osVersion - not_equals_value: QEMU + not_in_values: [QEMU, QNX_710] + - type: Group + instructions: + - !include "{{qt/qtbase}}/cmake_setup_running_qnxqemu_tests_env_vars.yaml" + enable_if: + condition: and + conditions: + - condition: property + property: target.osVersion + equals_value: QNX_710 + - condition: property + property: features + not_contains_value: DisableTests diff --git a/coin/instructions/coin_module_test_qnx_start_emulator.yaml b/coin/instructions/coin_module_test_qnx_start_emulator.yaml new file mode 100644 index 0000000000..39a44f7f99 --- /dev/null +++ b/coin/instructions/coin_module_test_qnx_start_emulator.yaml @@ -0,0 +1,90 @@ +type: Group +instructions: + - type: Group + instructions: + - type: WriteFile + fileContents: | + #!/bin/bash + RESULT=1 # 0 upon success + TIMEOUT=60 + COUNT=0 + QEMUPID=0 + QEMUIPADDR="{{.Env.QNX_QEMU_IPADDR}}" + mkqnximage --type=qemu --hostname=QNX_QEMU_CI --graphics=no --ip=${QEMUIPADDR} --build --run=-h </dev/null &>/dev/null & disown + + while [[ "QEMUPID" -eq 0 ]] + do + QEMUPID=`pidof qemu-system-x86_64` + + if [[ "QEMUPID" -eq 0 ]]; then + echo "QEMU not yet started, wait 1 sec." + COUNT=$((COUNT+1)) + sleep 1 + else + echo "QEMU running with PID: $QEMUPID" + fi + + if [[ "COUNT" -eq "TIMEOUT" ]]; then + echo "Timeout waiting QEMU to start" + exit 1 + fi + done + + while :; do + echo "Waiting QEMU SSH coming up" + status=$(ssh -o BatchMode=yes -o ConnectTimeout=1 ${QEMUIPADDR} echo ok 2>&1) + RESULT=$? + if [ $RESULT -eq 0 ]; then + echo "QEMU SSH Connected ok" + break + fi + if [ $RESULT -eq 255 ]; then + # connection refused also gets you here + if [[ $status == *"Permission denied"* ]] ; then + # permission denied indicates the ssh link is okay + echo "QEMU SSH server up" + RESULT=0 + break + fi + fi + TIMEOUT=$((TIMEOUT-1)) + if [ $TIMEOUT -eq 0 ]; then + echo "QEMU SSH timed out" + exit $RESULT + fi + sleep 1 + done + exit $RESULT + filename: "{{.Env.QNX_QEMU}}/start_qnx_qemu.sh" + fileMode: 755 + - type: ChangeDirectory + directory: "{{.Env.QNX_QEMU}}" + - type: ExecuteCommand + command: "chmod 755 {{.Env.QNX_QEMU}}/start_qnx_qemu.sh" + maxTimeInSeconds: 10 + maxTimeBetweenOutput: 10 + userMessageOnFailure: > + Failed to change file permission. + disable_if: + condition: property + property: host.os + equals_value: Windows + - type: ExecuteCommand + command: "{{.Env.QNX_QEMU}}/start_qnx_qemu.sh" + maxTimeInSeconds: 100 + maxTimeBetweenOutput: 100 + userMessageOnFailure: > + Failed to start QNX qemu, check logs. + disable_if: + condition: property + property: host.os + equals_value: Windows + enable_if: + condition: and + conditions: + - condition: property + property: target.osVersion + equals_value: QNX_710 + - condition: property + property: features + not_contains_value: DisableTests diff --git a/coin/instructions/coin_module_test_template_common.yaml b/coin/instructions/coin_module_test_template_common.yaml index bd610a2281..16fac8dd5d 100644 --- a/coin/instructions/coin_module_test_template_common.yaml +++ b/coin/instructions/coin_module_test_template_common.yaml @@ -3,6 +3,7 @@ instructions: # The build env is needed on MSVC so that tst_qmake can properly build apps / libraries. - !include "{{qt/qtbase}}/prepare_building_env.yaml" - !include "{{qt/qtbase}}/coin_module_test_android_start_emulator.yaml" + - !include "{{qt/qtbase}}/coin_module_test_qnx_start_emulator.yaml" # The test env vars are needed to pick the proper prefix.bat file. - !include "{{qt/qtbase}}/cmake_setup_running_tests_env_vars.yaml" - !include "{{qt/qtbase}}/coin_module_test_qemu_env_vars.yaml" diff --git a/coin/instructions/prepare_building_env.yaml b/coin/instructions/prepare_building_env.yaml index 7f7bf15fd1..0cbc9c9cae 100644 --- a/coin/instructions/prepare_building_env.yaml +++ b/coin/instructions/prepare_building_env.yaml @@ -273,14 +273,14 @@ instructions: enable_if: condition: property property: target.osVersion - equals_value: QEMU + in_values: [QEMU, QNX_710] - type: EnvironmentVariable variableName: TARGET_ENV_PREFIX variableValue: "" disable_if: condition: property property: target.osVersion - equals_value: QEMU + in_values: [QEMU, QNX_710] # Windows on Arm, cross-compilation with MSVC - type: Group @@ -305,6 +305,12 @@ instructions: property: target.os equals_value: QNX instructions: + - type: WriteFile + fileContents: "#!/bin/bash\nexport TESTARGS={{.Env.TESTARGS}}\nexport TESTRUNNER={{.Env.TESTRUNNER}}\nexport COIN_CTEST_RESULTSDIR={{.Env.COIN_CTEST_RESULTSDIR}}\n$*" + filename: "{{.Env.HOME}}/prefix.sh" + fileMode: 493 + maxTimeInSeconds: 20 + maxTimeBetweenOutput: 20 - type: EnvironmentVariable variableName: QNX_TARGET variableValue: "{{.Env.QNX_710}}/target/qnx7" @@ -326,6 +332,9 @@ instructions: - type: EnvironmentVariable variableName: QNX_HOST variableValue: "{{.Env.QNX_710}}/host/linux/x86_64" + - type: AppendToEnvironmentVariable + variableName: PATH + variableValue: ":{{.Env.QEMUARMV7_TOOLCHAIN_SYSROOT}}/../x86_64-pokysdk-linux/usr/bin:" enable_if: condition: property property: host.os |