Attempt to cross-compile for arm64 Linux

This commit is contained in:
Siarhei Fedartsou 2022-10-15 13:20:41 +02:00
parent 1c9812bfec
commit 820b60f079

View File

@ -20,6 +20,20 @@ env:
ENABLE_NODE_BINDINGS: "ON"
jobs:
linux-arm64:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: uraimo/run-on-arch-action@v2
name: Run commands
id: runcmd
with:
arch: arm64
distro: ubuntu22.04
githubToken: ${{ github.token }}
run: |
uname -a
echo ::set-output name=uname::$(uname -a)
# windows:
# needs: format-taginfo-docs
# runs-on: windows-2022
@ -139,11 +153,11 @@ jobs:
# curl --retry-delay 3 --retry 10 --retry-all-errors "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
# docker stop osrm-container
build-test-publish:
# needs: format-taginfo-docs
strategy:
matrix:
include:
# build-test-publish:
# # needs: format-taginfo-docs
# strategy:
# matrix:
# include:
# - name: gcc-9-debug-cov
# continue-on-error: false
# node: 12
@ -379,16 +393,16 @@ jobs:
# ENABLE_CONAN: ON
# NODE_PACKAGE_TESTS_ONLY: ON
- name: node-16-conan-linux-arm64-release
build_node_package: true
continue-on-error: false
node: 16
runs-on: ubuntu-20.04
BUILD_TYPE: Release
CCOMPILER: /usr/bin/aarch64-linux-gnu-gcc
CXXCOMPILER: /usr/bin/aarch64-linux-gnu-g++
ENABLE_CONAN: ON
NODE_PACKAGE_TESTS_ONLY: ON
# - name: node-16-conan-linux-arm64-release
# build_node_package: true
# continue-on-error: false
# node: 16
# runs-on: ubuntu-20.04
# BUILD_TYPE: Release
# CCOMPILER: /usr/bin/aarch64-linux-gnu-gcc
# CXXCOMPILER: /usr/bin/aarch64-linux-gnu-g++
# ENABLE_CONAN: ON
# NODE_PACKAGE_TESTS_ONLY: ON
# - name: node-16-conan-linux-release
# build_node_package: true
@ -506,269 +520,268 @@ jobs:
# ENABLE_CONAN: ON
# NODE_PACKAGE_TESTS_ONLY: ON
name: ${{ matrix.name}}
continue-on-error: ${{ matrix.continue-on-error }}
runs-on: ${{ matrix.runs-on }}
env:
BUILD_TOOLS: ${{ matrix.BUILD_TOOLS }}
BUILD_TYPE: ${{ matrix.BUILD_TYPE }}
BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS }}
CCOMPILER: ${{ matrix.CCOMPILER }}
CFLAGS: ${{ matrix.CFLAGS }}
CUCUMBER_TIMEOUT: ${{ matrix.CUCUMBER_TIMEOUT }}
CXXCOMPILER: ${{ matrix.CXXCOMPILER }}
CXXFLAGS: ${{ matrix.CXXFLAGS }}
ENABLE_ASSERTIONS: ${{ matrix.ENABLE_ASSERTIONS }}
ENABLE_CLANG_TIDY: ${{ matrix.ENABLE_CLANG_TIDY }}
ENABLE_COVERAGE: ${{ matrix.ENABLE_COVERAGE }}
ENABLE_CONAN: ${{ matrix.ENABLE_CONAN }}
ENABLE_SANITIZER: ${{ matrix.ENABLE_SANITIZER }}
NODE_PACKAGE_TESTS_ONLY: ${{ matrix.NODE_PACKAGE_TESTS_ONLY }}
ENABLE_APPLE_SILICON: ${{ matrix.ENABLE_APPLE_SILICON }}
TARGET_ARCH: ${{ matrix.TARGET_ARCH }}
OSRM_CONNECTION_RETRIES: ${{ matrix.OSRM_CONNECTION_RETRIES }}
OSRM_CONNECTION_EXP_BACKOFF_COEF: ${{ matrix.OSRM_CONNECTION_EXP_BACKOFF_COEF }}
steps:
- uses: actions/checkout@v2
- run: docker run -it --platform linux/arm64 debian:bullseye-slim echo hello
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- name: Enable Node.js cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Enable compiler cache
uses: actions/cache@v2
with:
path: ~/.ccache
key: ccache-${{ matrix.name }}-${{ github.sha }}
restore-keys: |
ccache-${{ matrix.name }}-
- name: Enable Conan cache
uses: actions/cache@v2
with:
path: ~/.conan
key: v6-conan-${{ matrix.name }}-${{ github.sha }}
restore-keys: |
v6-conan-${{ matrix.name }}-
- name: Enable test cache
uses: actions/cache@v2
with:
path: ${{github.workspace}}/test/cache
key: v3-test-${{ matrix.name }}-${{ github.sha }}
restore-keys: |
v3-test-${{ matrix.name }}-
- name: Prepare environment
run: |
PACKAGE_JSON_VERSION=$(node -e "console.log(require('./package.json').version)")
echo PUBLISH=$([[ "${GITHUB_REF:-}" == "refs/tags/v${PACKAGE_JSON_VERSION}" ]] && echo "On" || echo "Off") >> $GITHUB_ENV
echo "OSRM_INSTALL_DIR=${GITHUB_WORKSPACE}/install-osrm" >> $GITHUB_ENV
echo "OSRM_BUILD_DIR=${GITHUB_WORKSPACE}/build-osrm" >> $GITHUB_ENV
if [[ "$ENABLE_SANITIZER" == 'ON' ]]; then
# We can only set this after checkout once we know the workspace directory
echo "LSAN_OPTIONS=print_suppressions=0:suppressions=${GITHUB_WORKSPACE}/scripts/ci/leaksanitizer.conf" >> $GITHUB_ENV
echo "UBSAN_OPTIONS=symbolize=1:halt_on_error=1:print_stacktrace=1:suppressions=${GITHUB_WORKSPACE}/scripts/ci/undefinedsanitizer.conf" >> $GITHUB_ENV
fi
if [[ "${RUNNER_OS}" == "Linux" ]]; then
echo "JOBS=$((`nproc` + 1))" >> $GITHUB_ENV
elif [[ "${RUNNER_OS}" == "macOS" ]]; then
echo "JOBS=$((`sysctl -n hw.ncpu` + 1))" >> $GITHUB_ENV
fi
- name: Install dev dependencies
run: |
python3 -m pip install conan==1.53.0
sudo apt-get update -y && sudo apt-get -y install gcc-aarch64-linux-gnu
# ccache
if [[ "${RUNNER_OS}" == "Linux" ]]; then
sudo apt-get update -y && sudo apt-get install ccache
elif [[ "${RUNNER_OS}" == "macOS" ]]; then
brew install ccache
fi
# clang
if [[ "${CCOMPILER}" == "clang-6.0" ]]; then
sudo apt-get update -y && sudo apt-get install clang++-6
fi
# Linux dev packages
if [ "${TARGET_ARCH}" != "i686" ] && [ "${ENABLE_CONAN}" != "ON" ]; then
sudo apt-get update -y
sudo apt-get install -y libbz2-dev libxml2-dev libzip-dev liblua5.2-dev libboost-all-dev
if [[ "${CCOMPILER}" != clang-* ]]; then
sudo apt-get install -y ${CXXCOMPILER}
fi
if [[ "${ENABLE_COVERAGE}" == "ON" ]]; then
sudo apt-get install -y lcov
fi
elif [[ $TARGET_ARCH == "i686" ]]; then
source ./scripts/ci/before_install.${TARGET_ARCH}.sh
echo "PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig:${PKG_CONFIG_PATH}" >> $GITHUB_ENV
fi
# TBB
TBB_VERSION=2021.3.0
if [[ "${RUNNER_OS}" == "Linux" ]]; then
TBB_URL="https://github.com/oneapi-src/oneTBB/releases/download/v${TBB_VERSION}/oneapi-tbb-${TBB_VERSION}-lin.tgz"
elif [[ "${RUNNER_OS}" == "macOS" ]]; then
TBB_URL="https://github.com/oneapi-src/oneTBB/releases/download/v${TBB_VERSION}/oneapi-tbb-${TBB_VERSION}-mac.tgz"
fi
wget --tries 5 ${TBB_URL} -O onetbb.tgz
tar zxvf onetbb.tgz
sudo cp -a oneapi-tbb-${TBB_VERSION}/lib/. /usr/local/lib/
sudo cp -a oneapi-tbb-${TBB_VERSION}/include/. /usr/local/include/
- run: ls -R /usr/bin/
- name: Prepare build
run: |
mkdir ${OSRM_BUILD_DIR}
ccache --max-size=256M
npm ci --ignore-scripts
if [[ "${ENABLE_COVERAGE}" == "ON" ]]; then
lcov --directory . --zerocounters # clean cached files
fi
echo "CC=${CCOMPILER}" >> $GITHUB_ENV
echo "CXX=${CXXCOMPILER}" >> $GITHUB_ENV
- name: Build and install OSRM
run: |
echo "Using ${JOBS} jobs"
pushd ${OSRM_BUILD_DIR}
# handle Apple Silicon cross compilation
if [[ "${ENABLE_APPLE_SILICON}" == "ON" ]]; then
ARCH=arm64
TARGET="${ARCH}-apple-darwin"
CFLAGS="$CFLAGS --target=$TARGET"
CXXFLAGS="$CXXFLAGS --target=$TARGET"
APPLE_SILICON_FLAGS=(-DCMAKE_C_COMPILER_TARGET="$TARGET" -DCMAKE_CXX_COMPILER_TARGET="$TARGET" -DCMAKE_SYSTEM_PROCESSOR="${ARCH}" -DCMAKE_SYSTEM_NAME="Darwin" -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS")
else
APPLE_SILICON_FLAGS=()
fi
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DENABLE_CONAN=${ENABLE_CONAN:-OFF} \
-DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS:-OFF} \
-DENABLE_CLANG_TIDY=${ENABLE_CLANG_TIDY:-OFF} \
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-OFF} \
-DENABLE_COVERAGE=${ENABLE_COVERAGE:-OFF} \
-DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \
-DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} \
-DBUILD_TOOLS=${BUILD_TOOLS:-OFF} \
-DENABLE_CCACHE=ON \
-DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \
"${APPLE_SILICON_FLAGS[@]}"
make --jobs=${JOBS}
if [[ "${NODE_PACKAGE_TESTS_ONLY}" != "ON" && "${ENABLE_APPLE_SILICON}" != "ON" ]]; then
make tests --jobs=${JOBS}
make benchmarks --jobs=${JOBS}
ccache -s
sudo make install
if [[ "${RUNNER_OS}" == "Linux" ]]; then
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OSRM_INSTALL_DIR}/lib" >> $GITHUB_ENV
fi
echo "PKG_CONFIG_PATH=${OSRM_INSTALL_DIR}/lib/pkgconfig" >> $GITHUB_ENV
fi
popd
- name: Build example
if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
run: |
mkdir example/build && pushd example/build
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
make --jobs=${JOBS}
popd
- name: Run all tests
if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
run: |
make -C test/data benchmark
# macOS SIP strips the linker path. Reset this inside the running shell
export LD_LIBRARY_PATH=${{ env.LD_LIBRARY_PATH }}
./example/build/osrm-example test/data/mld/monaco.osrm
# All tests assume to be run from the build directory
pushd ${OSRM_BUILD_DIR}
for i in ./unit_tests/*-tests ; do echo Running $i ; $i ; done
if [ -z "${ENABLE_SANITIZER}" ] && [ "$TARGET_ARCH" != "i686" ]; then
npm run nodejs-tests
fi
popd
npm test
- name: Run benchmarks
if: ${{ matrix.ENABLE_BENCHMARKS == 'ON' }}
run: |
pushd ${OSRM_BUILD_DIR}
make --jobs=${JOBS} benchmarks
./src/benchmarks/alias-bench
./src/benchmarks/json-render-bench ../src/benchmarks/portugal_to_korea.json
./src/benchmarks/match-bench ../test/data/ch/monaco.osrm
./src/benchmarks/packedvector-bench
./src/benchmarks/rtree-bench ../test/data/monaco.osrm.ramIndex ../test/data/monaco.osrm.fileIndex ../test/data/monaco.osrm.nbg_nodes
popd
- name: Run Node package tests only
if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
run: |
npm run nodejs-tests
- name: Upload test logs
uses: actions/upload-artifact@v3
if: failure()
with:
name: logs
path: test/logs/
- name: Generate code coverage
if: ${{ matrix.ENABLE_COVERAGE == 'ON' }}
run: |
lcov --directory . --capture --output-file coverage.info # capture coverage info
lcov --remove coverage.info '/usr/*' --output-file coverage.info # filter out system
lcov --list coverage.info #debug info
# Uploading report to CodeCov
- name: Upload code coverage
if: ${{ matrix.ENABLE_COVERAGE == 'ON' }}
uses: codecov/codecov-action@v1
with:
files: coverage.info
name: codecov-osrm-backend
fail_ci_if_error: true
verbose: true
- name: Check Apple Silicon binary
if: ${{ matrix.ENABLE_APPLE_SILICON == 'ON' }}
run: |
ARCH=$(file ./lib/binding/node_osrm.node | awk '{printf $NF}')
if [[ "$ARCH" != "arm64" ]]; then
file ./lib/binding/node_osrm.node
>&2 echo "Wrong architecture!"
exit 1
fi
- name: Build Node package
if: ${{ matrix.build_node_package }}
run: ./scripts/ci/node_package.sh
- name: Publish Node package
if: ${{ matrix.build_node_package && env.PUBLISH == 'On' }}
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifactErrorsFailBuild: true
artifacts: build/stage/**/*.tar.gz
omitBody: true
omitBodyDuringUpdate: true
omitName: true
omitNameDuringUpdate: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
# ci-complete:
# runs-on: ubuntu-22.04
# needs: [build-test-publish, docker-image, windows]
# name: ${{ matrix.name}}
# continue-on-error: ${{ matrix.continue-on-error }}
# runs-on: ${{ matrix.runs-on }}
# env:
# BUILD_TOOLS: ${{ matrix.BUILD_TOOLS }}
# BUILD_TYPE: ${{ matrix.BUILD_TYPE }}
# BUILD_SHARED_LIBS: ${{ matrix.BUILD_SHARED_LIBS }}
# CCOMPILER: ${{ matrix.CCOMPILER }}
# CFLAGS: ${{ matrix.CFLAGS }}
# CUCUMBER_TIMEOUT: ${{ matrix.CUCUMBER_TIMEOUT }}
# CXXCOMPILER: ${{ matrix.CXXCOMPILER }}
# CXXFLAGS: ${{ matrix.CXXFLAGS }}
# ENABLE_ASSERTIONS: ${{ matrix.ENABLE_ASSERTIONS }}
# ENABLE_CLANG_TIDY: ${{ matrix.ENABLE_CLANG_TIDY }}
# ENABLE_COVERAGE: ${{ matrix.ENABLE_COVERAGE }}
# ENABLE_CONAN: ${{ matrix.ENABLE_CONAN }}
# ENABLE_SANITIZER: ${{ matrix.ENABLE_SANITIZER }}
# NODE_PACKAGE_TESTS_ONLY: ${{ matrix.NODE_PACKAGE_TESTS_ONLY }}
# ENABLE_APPLE_SILICON: ${{ matrix.ENABLE_APPLE_SILICON }}
# TARGET_ARCH: ${{ matrix.TARGET_ARCH }}
# OSRM_CONNECTION_RETRIES: ${{ matrix.OSRM_CONNECTION_RETRIES }}
# OSRM_CONNECTION_EXP_BACKOFF_COEF: ${{ matrix.OSRM_CONNECTION_EXP_BACKOFF_COEF }}
# steps:
# - run: echo "CI complete"
# - uses: actions/checkout@v2
# - name: Use Node.js
# uses: actions/setup-node@v3
# with:
# node-version: ${{ matrix.node }}
# - name: Enable Node.js cache
# uses: actions/cache@v2
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
# - name: Enable compiler cache
# uses: actions/cache@v2
# with:
# path: ~/.ccache
# key: ccache-${{ matrix.name }}-${{ github.sha }}
# restore-keys: |
# ccache-${{ matrix.name }}-
# - name: Enable Conan cache
# uses: actions/cache@v2
# with:
# path: ~/.conan
# key: v6-conan-${{ matrix.name }}-${{ github.sha }}
# restore-keys: |
# v6-conan-${{ matrix.name }}-
# - name: Enable test cache
# uses: actions/cache@v2
# with:
# path: ${{github.workspace}}/test/cache
# key: v3-test-${{ matrix.name }}-${{ github.sha }}
# restore-keys: |
# v3-test-${{ matrix.name }}-
# - name: Prepare environment
# run: |
# PACKAGE_JSON_VERSION=$(node -e "console.log(require('./package.json').version)")
# echo PUBLISH=$([[ "${GITHUB_REF:-}" == "refs/tags/v${PACKAGE_JSON_VERSION}" ]] && echo "On" || echo "Off") >> $GITHUB_ENV
# echo "OSRM_INSTALL_DIR=${GITHUB_WORKSPACE}/install-osrm" >> $GITHUB_ENV
# echo "OSRM_BUILD_DIR=${GITHUB_WORKSPACE}/build-osrm" >> $GITHUB_ENV
# if [[ "$ENABLE_SANITIZER" == 'ON' ]]; then
# # We can only set this after checkout once we know the workspace directory
# echo "LSAN_OPTIONS=print_suppressions=0:suppressions=${GITHUB_WORKSPACE}/scripts/ci/leaksanitizer.conf" >> $GITHUB_ENV
# echo "UBSAN_OPTIONS=symbolize=1:halt_on_error=1:print_stacktrace=1:suppressions=${GITHUB_WORKSPACE}/scripts/ci/undefinedsanitizer.conf" >> $GITHUB_ENV
# fi
# if [[ "${RUNNER_OS}" == "Linux" ]]; then
# echo "JOBS=$((`nproc` + 1))" >> $GITHUB_ENV
# elif [[ "${RUNNER_OS}" == "macOS" ]]; then
# echo "JOBS=$((`sysctl -n hw.ncpu` + 1))" >> $GITHUB_ENV
# fi
# - name: Install dev dependencies
# run: |
# python3 -m pip install conan==1.53.0
# sudo apt-get update -y && sudo apt-get -y install gcc-aarch64-linux-gnu
# # ccache
# if [[ "${RUNNER_OS}" == "Linux" ]]; then
# sudo apt-get update -y && sudo apt-get install ccache
# elif [[ "${RUNNER_OS}" == "macOS" ]]; then
# brew install ccache
# fi
# # clang
# if [[ "${CCOMPILER}" == "clang-6.0" ]]; then
# sudo apt-get update -y && sudo apt-get install clang++-6
# fi
# # Linux dev packages
# if [ "${TARGET_ARCH}" != "i686" ] && [ "${ENABLE_CONAN}" != "ON" ]; then
# sudo apt-get update -y
# sudo apt-get install -y libbz2-dev libxml2-dev libzip-dev liblua5.2-dev libboost-all-dev
# if [[ "${CCOMPILER}" != clang-* ]]; then
# sudo apt-get install -y ${CXXCOMPILER}
# fi
# if [[ "${ENABLE_COVERAGE}" == "ON" ]]; then
# sudo apt-get install -y lcov
# fi
# elif [[ $TARGET_ARCH == "i686" ]]; then
# source ./scripts/ci/before_install.${TARGET_ARCH}.sh
# echo "PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig:${PKG_CONFIG_PATH}" >> $GITHUB_ENV
# fi
# # TBB
# TBB_VERSION=2021.3.0
# if [[ "${RUNNER_OS}" == "Linux" ]]; then
# TBB_URL="https://github.com/oneapi-src/oneTBB/releases/download/v${TBB_VERSION}/oneapi-tbb-${TBB_VERSION}-lin.tgz"
# elif [[ "${RUNNER_OS}" == "macOS" ]]; then
# TBB_URL="https://github.com/oneapi-src/oneTBB/releases/download/v${TBB_VERSION}/oneapi-tbb-${TBB_VERSION}-mac.tgz"
# fi
# wget --tries 5 ${TBB_URL} -O onetbb.tgz
# tar zxvf onetbb.tgz
# sudo cp -a oneapi-tbb-${TBB_VERSION}/lib/. /usr/local/lib/
# sudo cp -a oneapi-tbb-${TBB_VERSION}/include/. /usr/local/include/
# - run: ls -R /usr/bin/
# - name: Prepare build
# run: |
# mkdir ${OSRM_BUILD_DIR}
# ccache --max-size=256M
# npm ci --ignore-scripts
# if [[ "${ENABLE_COVERAGE}" == "ON" ]]; then
# lcov --directory . --zerocounters # clean cached files
# fi
# echo "CC=${CCOMPILER}" >> $GITHUB_ENV
# echo "CXX=${CXXCOMPILER}" >> $GITHUB_ENV
# - name: Build and install OSRM
# run: |
# echo "Using ${JOBS} jobs"
# pushd ${OSRM_BUILD_DIR}
# # handle Apple Silicon cross compilation
# if [[ "${ENABLE_APPLE_SILICON}" == "ON" ]]; then
# ARCH=arm64
# TARGET="${ARCH}-apple-darwin"
# CFLAGS="$CFLAGS --target=$TARGET"
# CXXFLAGS="$CXXFLAGS --target=$TARGET"
# APPLE_SILICON_FLAGS=(-DCMAKE_C_COMPILER_TARGET="$TARGET" -DCMAKE_CXX_COMPILER_TARGET="$TARGET" -DCMAKE_SYSTEM_PROCESSOR="${ARCH}" -DCMAKE_SYSTEM_NAME="Darwin" -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS")
# else
# APPLE_SILICON_FLAGS=()
# fi
# cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
# -DENABLE_CONAN=${ENABLE_CONAN:-OFF} \
# -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS:-OFF} \
# -DENABLE_CLANG_TIDY=${ENABLE_CLANG_TIDY:-OFF} \
# -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-OFF} \
# -DENABLE_COVERAGE=${ENABLE_COVERAGE:-OFF} \
# -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \
# -DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} \
# -DBUILD_TOOLS=${BUILD_TOOLS:-OFF} \
# -DENABLE_CCACHE=ON \
# -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \
# "${APPLE_SILICON_FLAGS[@]}"
# make --jobs=${JOBS}
# if [[ "${NODE_PACKAGE_TESTS_ONLY}" != "ON" && "${ENABLE_APPLE_SILICON}" != "ON" ]]; then
# make tests --jobs=${JOBS}
# make benchmarks --jobs=${JOBS}
# ccache -s
# sudo make install
# if [[ "${RUNNER_OS}" == "Linux" ]]; then
# echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OSRM_INSTALL_DIR}/lib" >> $GITHUB_ENV
# fi
# echo "PKG_CONFIG_PATH=${OSRM_INSTALL_DIR}/lib/pkgconfig" >> $GITHUB_ENV
# fi
# popd
# - name: Build example
# if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
# run: |
# mkdir example/build && pushd example/build
# cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
# make --jobs=${JOBS}
# popd
# - name: Run all tests
# if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
# run: |
# make -C test/data benchmark
# # macOS SIP strips the linker path. Reset this inside the running shell
# export LD_LIBRARY_PATH=${{ env.LD_LIBRARY_PATH }}
# ./example/build/osrm-example test/data/mld/monaco.osrm
# # All tests assume to be run from the build directory
# pushd ${OSRM_BUILD_DIR}
# for i in ./unit_tests/*-tests ; do echo Running $i ; $i ; done
# if [ -z "${ENABLE_SANITIZER}" ] && [ "$TARGET_ARCH" != "i686" ]; then
# npm run nodejs-tests
# fi
# popd
# npm test
# - name: Run benchmarks
# if: ${{ matrix.ENABLE_BENCHMARKS == 'ON' }}
# run: |
# pushd ${OSRM_BUILD_DIR}
# make --jobs=${JOBS} benchmarks
# ./src/benchmarks/alias-bench
# ./src/benchmarks/json-render-bench ../src/benchmarks/portugal_to_korea.json
# ./src/benchmarks/match-bench ../test/data/ch/monaco.osrm
# ./src/benchmarks/packedvector-bench
# ./src/benchmarks/rtree-bench ../test/data/monaco.osrm.ramIndex ../test/data/monaco.osrm.fileIndex ../test/data/monaco.osrm.nbg_nodes
# popd
# - name: Run Node package tests only
# if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
# run: |
# npm run nodejs-tests
# - name: Upload test logs
# uses: actions/upload-artifact@v3
# if: failure()
# with:
# name: logs
# path: test/logs/
# - name: Generate code coverage
# if: ${{ matrix.ENABLE_COVERAGE == 'ON' }}
# run: |
# lcov --directory . --capture --output-file coverage.info # capture coverage info
# lcov --remove coverage.info '/usr/*' --output-file coverage.info # filter out system
# lcov --list coverage.info #debug info
# # Uploading report to CodeCov
# - name: Upload code coverage
# if: ${{ matrix.ENABLE_COVERAGE == 'ON' }}
# uses: codecov/codecov-action@v1
# with:
# files: coverage.info
# name: codecov-osrm-backend
# fail_ci_if_error: true
# verbose: true
# - name: Check Apple Silicon binary
# if: ${{ matrix.ENABLE_APPLE_SILICON == 'ON' }}
# run: |
# ARCH=$(file ./lib/binding/node_osrm.node | awk '{printf $NF}')
# if [[ "$ARCH" != "arm64" ]]; then
# file ./lib/binding/node_osrm.node
# >&2 echo "Wrong architecture!"
# exit 1
# fi
# - name: Build Node package
# if: ${{ matrix.build_node_package }}
# run: ./scripts/ci/node_package.sh
# - name: Publish Node package
# if: ${{ matrix.build_node_package && env.PUBLISH == 'On' }}
# uses: ncipollo/release-action@v1
# with:
# allowUpdates: true
# artifactErrorsFailBuild: true
# artifacts: build/stage/**/*.tar.gz
# omitBody: true
# omitBodyDuringUpdate: true
# omitName: true
# omitNameDuringUpdate: true
# replacesArtifacts: true
# token: ${{ secrets.GITHUB_TOKEN }}
# # ci-complete:
# # runs-on: ubuntu-22.04
# # needs: [build-test-publish, docker-image, windows]
# # steps:
# # - run: echo "CI complete"