From e92fef6e63927c92ace797f69c5fa2b0e5832648 Mon Sep 17 00:00:00 2001 From: Amaury Chamayou Date: Fri, 20 Mar 2020 08:07:12 +0000 Subject: [PATCH] ARM CI (#148) * Add ARM setup * Factor what can be into common scripts --- azure-pipelines.yml | 83 +++++++++++++++++++++++++++++---------------- ci/linux_arm64 | 7 ++++ ci/scripts/build.sh | 20 +++++++++++ ci/scripts/test.sh | 12 +++++++ src/aal/aal_arm.h | 2 +- 5 files changed, 93 insertions(+), 31 deletions(-) create mode 100644 ci/linux_arm64 create mode 100755 ci/scripts/build.sh create mode 100755 ci/scripts/test.sh diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0f1c66b..17becfa 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -85,42 +85,65 @@ jobs: steps: - script: | - sudo update-alternatives --install /usr/bin/cc cc /usr/bin/$(CC) 100 - sudo update-alternatives --set cc /usr/bin/$(CC) - - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/$(CXX) 100 - sudo update-alternatives --set c++ /usr/bin/$(CXX) - - CMAKE_CXX_FLAGS="-std=c++17" - if [[ "$CXX" == clang++* ]]; then CMAKE_CXX_FLAGS+=" -stdlib=libstdc++"; fi - - displayName: 'Select compiler version' - - - task: CMake@1 - displayName: 'CMake .. $(CMakeArgs) -GNinja -DCMAKE_BUILD_TYPE=$(BuildType) -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" -DSNMALLOC_CI_BUILD=On -DSNMALLOC_RUST_SUPPORT=On' - inputs: - cmakeArgs: '.. $(CMakeArgs) -GNinja -DCMAKE_BUILD_TYPE=$(BuildType) -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" -DSNMALLOC_CI_BUILD=On -DSNMALLOC_RUST_SUPPORT=On' + ci/scripts/build.sh + env: + CC: $(CC) + CXX: $(CXX) + BUILD_TYPE: $(BuildType) + CMAKE_ARGS: $(CMakeArgs) + failOnStderr: true + displayName: 'Build' - script: | - ninja - - workingDirectory: build + ci/scripts/test.sh + env: + SELF_HOST: $(SelfHost) + BUILD_TYPE: $(BuildType) failOnStderr: true - displayName: 'Compile' + displayName: 'Test' + +- job: + displayName: 'ARM64 Linux' + pool: + vmImage: 'ubuntu-18.04' + + strategy: + matrix: + Clang-9 Debug: + CC: clang-9 + CXX: clang++-9 + BuildType: Debug + SelfHost: false + CMakeArgs: '' + + Clang-9 Release: + CC: clang-9 + CXX: clang++-9 + BuildType: Release + SelfHost: false + CMakeArgs: '' + + steps: + - script: | + sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset + displayName: 'Enable QEmu' - script: | - if [ $(SelfHost) = false ]; then - ctest -j 4 --output-on-failure -C $(BuildType) - else - sudo cp libsnmallocshim.so libsnmallocshim-1mib.so /usr/local/lib/ - ninja clean - LD_PRELOAD=/usr/local/lib/libsnmallocshim.so ninja - ninja clean - LD_PRELOAD=/usr/local/lib/libsnmallocshim-1mib.so ninja - fi + sudo docker run -v $PWD:/src \ + -e CC=$(CC) \ + -e CXX=$(CXX) \ + -e BUILD_TYPE=$(BuildType) \ + -e CMAKE_ARGS=$(CMakeArgs) \ + snmallocciteam/build_linux_arm64:latest \ + ci/scripts/build.sh + displayName: 'Build' - workingDirectory: build - failOnStderr: true + - script: | + sudo docker run -v $PWD:/src \ + -e BUILD_TYPE=$(BuildType) \ + -e SELF_HOST=$(SelfHost) \ + snmallocciteam/build_linux_arm64:latest \ + ci/scripts/test.sh displayName: 'Test' - job: diff --git a/ci/linux_arm64 b/ci/linux_arm64 new file mode 100644 index 0000000..83bf75f --- /dev/null +++ b/ci/linux_arm64 @@ -0,0 +1,7 @@ +FROM multiarch/ubuntu-core:arm64-bionic + +WORKDIR /src + +RUN apt update \ + && apt install --no-install-recommends -y ninja-build clang++-9 cmake \ + && apt -y clean \ No newline at end of file diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh new file mode 100755 index 0000000..4f604cf --- /dev/null +++ b/ci/scripts/build.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +mkdir build +cd build + +CMAKE_CXX_FLAGS="-std=c++17" +if [[ "$CXX" == clang++* ]]; then + CMAKE_CXX_FLAGS+=" -stdlib=libstdc++"; +fi + +cmake \ + $CMAKE_ARGS \ + -GNinja \ + -DSNMALLOC_CI_BUILD=ON \ + -DSNMALLOC_RUST_SUPPORT=ON \ + -DSNMALLOC_QEMU_WORKAROUND=ON \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" \ + .. +ninja \ No newline at end of file diff --git a/ci/scripts/test.sh b/ci/scripts/test.sh new file mode 100755 index 0000000..1d1176e --- /dev/null +++ b/ci/scripts/test.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +cd build +if [ $SELF_HOST = false ]; then + ctest -j 4 --output-on-failure -C $BUILD_TYPE +else + sudo cp libsnmallocshim.so libsnmallocshim-1mib.so /usr/local/lib/ + ninja clean + LD_PRELOAD=/usr/local/lib/libsnmallocshim.so ninja + ninja clean + LD_PRELOAD=/usr/local/lib/libsnmallocshim-1mib.so ninja +fi \ No newline at end of file diff --git a/src/aal/aal_arm.h b/src/aal/aal_arm.h index de0c2fc..baa690f 100644 --- a/src/aal/aal_arm.h +++ b/src/aal/aal_arm.h @@ -45,7 +45,7 @@ namespace snmalloc #ifdef _MSC_VER __prefetch(ptr); #else - __asm__ inline("prfm pldl1keep, [%0]" : "=r"(ptr)); + __asm__ volatile("prfm pldl1keep, [%0]" : "=r"(ptr)); #endif } };