From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 4B3FD46970E for ; Fri, 20 Dec 2019 11:32:04 +0300 (MSK) From: "Alexander V. Tikhonov" Date: Fri, 20 Dec 2019 11:32:00 +0300 Message-Id: Subject: [Tarantool-patches] [PATCH v1] test: add ARM at gitlab-ci List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Munkin Cc: tarantool-patches@dev.tarantool.org Added ARM architecture for testing release and debug Tarantool builds on Gitlab-CI. Close #4270 --- Github: https://github.com/tarantool/tarantool/tree/avtikhon/gh-4270-travis-ci-arm Issue: https://github.com/tarantool/tarantool/issues/4270 .gitlab-ci.yml | 13 +++++++++++++ .travis.mk | 12 ++++++++++++ src/lib/core/fiber.c | 17 ++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3af5a3c8a..497f4e14c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,8 @@ stages: variables: GITLAB_MAKE: "make -f .gitlab.mk" + DOCKER_ARM_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/testing/arm64v8-debian-buster:latest" + DOCKER_NETWORK: "--network=host" # Jobs templates @@ -90,6 +92,17 @@ release_asan_clang8: script: - ${GITLAB_MAKE} test_asan_debian_no_deps +release_arm: + stage: test + tags: + - test + variables: + DOCKER_IMAGE: "${DOCKER_ARM_IMAGE}" + DOCKER_OPTIONS: "${DOCKER_NETWORK}" + CMAKE_EXTRA_PARAMS: -DENABLE_BACKTRACE=OFF + script: + - ${GITLAB_MAKE} test_arm_debian_no_deps + osx_13_release: <<: *release_only_definition <<: *vbox_definition diff --git a/.travis.mk b/.travis.mk index 42969ff56..1427d5b2f 100644 --- a/.travis.mk +++ b/.travis.mk @@ -24,6 +24,7 @@ asan: docker_test_asan_debian docker_%: mkdir -p ~/.cache/ccache docker run \ + ${DOCKER_OPTIONS} \ --rm=true --tty=true \ --volume "${PWD}:/tarantool" \ --volume "${HOME}/.cache:/cache" \ @@ -123,6 +124,17 @@ test_asan_debian_no_deps: build_asan_debian test_asan_debian: deps_debian deps_buster_clang_8 test_asan_debian_no_deps +####### +# ARM # +####### + +qemu_arm_debian: + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + +build_arm_debian: qemu_arm_debian docker_build_debian + +test_arm_debian_no_deps: qemu_arm_debian docker_test_debian_no_deps + ####### # OSX # ####### diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c index 00ae8cded..6ef3c22db 100644 --- a/src/lib/core/fiber.c +++ b/src/lib/core/fiber.c @@ -43,7 +43,22 @@ #include "trigger.h" #if ENABLE_FIBER_TOP +#if !defined(__arm__) && !defined(__aarch64__) && !defined(__powerpc64__) && !defined(__PPC64__) && \ + !defined(__powerpc__) #include /* __rdtscp() */ +#elif defined(__aarch64__) +static __inline__ unsigned long long __rdtscp(uint32_t *cpu_id) +{ + // System timer of ARMv8 runs at a different frequency than the CPU's. + // The frequency is fixed, typically in the range 1-50MHz. It can be + // read at CNTFRQ special register. We assume the OS has set up + // the virtual timer properly. + if (!cpu_id) { cpu_id = 0; } + int64_t virtual_timer_value; + __asm__ volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value)); + return virtual_timer_value; +} +#endif static inline void clock_stat_add_delta(struct clock_stat *stat, uint64_t clock_delta) @@ -109,7 +124,7 @@ cpu_stat_reset(struct cpu_stat *stat) static uint64_t cpu_stat_on_csw(struct cpu_stat *stat) { - uint32_t cpu_id; + uint32_t cpu_id = 0; uint64_t delta, clock = __rdtscp(&cpu_id); if (cpu_id == stat->prev_cpu_id) { -- 2.17.1