* Add ARM setup

* Factor what can be into common scripts
This commit is contained in:
Amaury Chamayou
2020-03-20 08:07:12 +00:00
committed by GitHub
parent f301fdd2a0
commit e92fef6e63
5 changed files with 93 additions and 31 deletions

View File

@@ -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:

7
ci/linux_arm64 Normal file
View File

@@ -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

20
ci/scripts/build.sh Executable file
View File

@@ -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

12
ci/scripts/test.sh Executable file
View File

@@ -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

View File

@@ -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
}
};