kind: pipeline
name: gcc9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: gcc:9
  environment:
    CC: gcc
    CXX: g++
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=OFF -DSIMDJSON_IMPLEMENTATION=icelake;haswell;westmere;fallback
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list
    - apt-get update -qq
    - apt-get -t buster-backports install -y cmake
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS -L acceptance -LE per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=icelake ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=haswell ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=westmere ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=fallback ctest $CTEST_FLAGS -L per_implementation
    - ctest $CTEST_FLAGS -LE "acceptance|per_implementation" # Everything we haven't run yet, run now.
---
kind: pipeline
name: clang6
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: conanio/clang60
  user: root
  environment:
    CC: clang-6.0
    CXX: clang++-6.0
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=OFF -DSIMDJSON_IMPLEMENTATION=icelake;haswell;westmere;fallback
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS -L acceptance -LE per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=icelake ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=haswell ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=westmere ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=fallback ctest $CTEST_FLAGS -L per_implementation
    - ctest $CTEST_FLAGS -LE "acceptance|per_implementation" # Everything we haven't run yet, run now.
---
kind: pipeline
name: dynamic-gcc9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: gcc:9
  environment:
    CC: gcc
    CXX: g++
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=ON
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list
    - apt-get update -qq
    - apt-get -t buster-backports install -y cmake
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: dynamic-clang9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: conanio/clang9
  user: root
  environment:
    CC: clang-9
    CXX: clang++-9
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=ON
    BUILD_FLAGS: -- -j
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: sanitize-gcc9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: gcc:9
  environment:
    CC: gcc
    CXX: g++
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=OFF -DSIMDJSON_IMPLEMENTATION=icelake;haswell;westmere;fallback
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list
    - apt-get update -qq
    - apt-get -t buster-backports install -y cmake
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L acceptance -LE per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=icelake ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=haswell ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=westmere ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=fallback ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -LE "acceptance|per_implementation" # Everything we haven't run yet, run now.
---
kind: pipeline
name: sanitize-clang9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: conanio/clang9
  user: root
  environment:
    CC: clang-9
    CXX: clang++-9
    CMAKE_FLAGS: -DSIMDJSON_SANITIZE=ON -DSIMDJSON_IMPLEMENTATION=icelake;haswell;westmere;fallback
    BUILD_FLAGS: -- -j
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L acceptance -LE per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=icelake ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=haswell ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=westmere ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=fallback ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -LE "acceptance|per_implementation" # Everything we haven't run yet, run now.
---
kind: pipeline
name: cpp20-clang11-libcpp
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: pauldreik/llvm-11
  user: root
  environment:
    CC: clang-11
    CXX: clang++-11
    CMAKE_FLAGS: -GNinja
    BUILD_FLAGS:
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
    CXXFLAGS: -std=c++20 -stdlib=libc++
  commands:
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: arm64-gcc8
platform: { os: linux, arch: arm64 }
steps:
- name: Build and Test
  image: gcc:8
  environment:
    CC: gcc
    CXX: g++
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=OFF -DSIMDJSON_IMPLEMENTATION=arm64;fallback
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list
    - apt-get update -qq
    - apt-get -t buster-backports install -y cmake
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS -L acceptance -LE per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=arm64 ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=fallback ctest $CTEST_FLAGS -L per_implementation
    - ctest $CTEST_FLAGS -LE "acceptance|per_implementation" # Everything we haven't run yet, run now.
---
kind: pipeline
name: arm64-clang6
platform: { os: linux, arch: arm64 }
steps:
- name: Build and Test
  image: debian:buster-backports
  environment:
    CC: clang-6.0
    CXX: clang++-6.0
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=ON
    BUILD_FLAGS: -- -j
    CTEST_FLAGS: -j4 --output-on-failure  -LE explicitonly
  commands:
    - apt-get -qq update
    - apt-get -t buster-backports install -y cmake
    - apt-get install -y clang-6.0 git
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: arm64-dynamic-gcc8
platform: { os: linux, arch: arm64 }
steps:
- name: Build and Test
  image: gcc:8
  environment:
    CC: gcc
    CXX: g++
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=ON
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list
    - apt-get update -qq
    - apt-get -t buster-backports install -y cmake
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: arm64-dynamic-clang6
platform: { os: linux, arch: arm64 }
steps:
- name: Build and Test
  image: debian:buster-backports
  environment:
    CC: clang-6.0
    CXX: clang++-6.0
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=ON
    BUILD_FLAGS: -- -j
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - apt-get -qq update
    - apt-get -t buster-backports install -y cmake
    - apt-get install -y clang-6.0 git
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: arm64-sanitize-gcc8
platform: { os: linux, arch: arm64 }
steps:
- name: Build and Test
  image: gcc:8
  environment:
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=OFF -DSIMDJSON_IMPLEMENTATION=arm64;fallback
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
    CC: gcc
    CXX: g++
  commands:
    - echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list
    - apt-get update -qq
    - apt-get -t buster-backports install -y cmake
    - apt-get install -y libstdc++6
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L acceptance -LE per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=arm64 ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=fallback ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -LE "acceptance|per_implementation" # Everything we haven't run yet, run now.
---
kind: pipeline
name: arm64-sanitize-clang6
platform: { os: linux, arch: arm64 }
steps:
- name: Build and Test
  image: debian:buster-backports
  environment:
    CC: clang-6.0
    CXX: clang++-6.0
    CMAKE_FLAGS: -DSIMDJSON_SANITIZE=ON -DSIMDJSON_IMPLEMENTATION=arm64;fallback
    BUILD_FLAGS: -- -j
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - apt-get -qq update
    - apt-get -t buster-backports install -y cmake
    - apt-get install -y clang-6.0 git
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L acceptance -LE per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=arm64 ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - SIMDJSON_FORCE_IMPLEMENTATION=fallback ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -L per_implementation
    - ASAN_OPTIONS="detect_leaks=0" ctest $CTEST_FLAGS -LE "acceptance|per_implementation" # Everything we haven't run yet, run now.
---
kind: pipeline
name: ninja-clang9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: conanio/clang9
  user: root
  environment:
    CC: clang-9
    CXX: clang++-9
    BUILD_FLAGS: -- -j 4
    CMAKE_FLAGS: -GNinja -DBUILD_SHARED_LIBS=OFF
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
    CXXFLAGS: -stdlib=libc++
  commands:
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: libcpp-clang9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: conanio/clang9
  user: root
  environment:
    CC: clang-9
    CXX: clang++-9
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=OFF
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
    CXXFLAGS: -stdlib=libc++
  commands:
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: libcpp-clang7
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: conanio/clang7
  user: root
  environment:
    CC: clang-7
    CXX: clang++-7
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DBUILD_SHARED_LIBS=OFF
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
    CXXFLAGS: -stdlib=libc++
  commands:
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: noexceptions-gcc9
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: gcc:9
  environment:
    CC: gcc
    CXX: g++
    BUILD_FLAGS: -- -j
    CMAKE_FLAGS: -DSIMDJSON_EXCEPTIONS=OFF
    CTEST_FLAGS: -j4 --output-on-failure -LE explicitonly
  commands:
    - echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list
    - apt-get update -qq
    - apt-get -t buster-backports install -y cmake
    - mkdir build
    - cd build
    - cmake $CMAKE_FLAGS ..
    - cmake --build . $BUILD_FLAGS
    - ctest $CTEST_FLAGS
---
kind: pipeline
name: arm64-fuzz
platform: { os: linux, arch: arm64 }
steps:
- name: Build and run fuzzers shortly
  image: ubuntu:20.04
  environment:
    CC: clang
    CXX: clang++
    DEBIAN_FRONTEND: noninteractive
    ASAN_OPTIONS: detect_leaks=0
  commands:
    - apt-get -qq update
    - apt-get install -q -y clang cmake git wget zip ninja-build
    - wget -O corpus.tar.gz https://readonly:readonly@www.pauldreik.se/fuzzdata/index.php?project=simdjson
    - tar xf corpus.tar.gz && rm corpus.tar.gz
    - fuzz/build_like_ossfuzz.sh
    - mkdir -p common_out
    - for fuzzer in build/fuzz/fuzz_* ; do echo $fuzzer;$fuzzer common_out out/* -max_total_time=40; done
---
kind: pipeline
name: stylecheck
platform: { os: linux, arch: amd64 }
steps:
- name: Build and Test
  image: ubuntu:18.04
  commands:
    - apt-get update -y
    - apt-get install -y python clang-format
    - ./style/run-clang-format.py -r include/ benchmark/ src/ tests/
