From 7be2998cae9b569e2078a11e932dbb60d71d36f6 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 9 Aug 2019 17:26:05 -0400 Subject: [PATCH] Adding more sanitize tests as part of the CI. (#267) * Adding more sanitize tests as part of the CI. --- .appveyor.yml | 2 +- .circleci/config.yml | 138 ++++++++++++++++++++++++++++--- .drone.yml | 148 +++++++++++++++++++++++++++++++--- tools/cmake/FindOptions.cmake | 31 ++++--- 4 files changed, 284 insertions(+), 35 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 905dbf5d..4878777b 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -19,4 +19,4 @@ build_script: - cd build - ps: cmake -DSIMDJSON_BUILD_STATIC="$env:SIMDJSON_BUILD_STATIC" -DCMAKE_BUILD_TYPE=Release -DCMAKE_GENERATOR_PLATFORM=x64 .. - cmake --build . - - ctest --verbose + - ctest --verbose --output-on-failure diff --git a/.circleci/config.yml b/.circleci/config.yml index 86889c0b..b8ea40e6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,19 +25,46 @@ jobs: command: make quiettest amalgamate - run: - name: Building (gcc, cmake) + name: Building (gcc, cmake, dynamic) command: | mkdir build cd build - cmake .. + cmake -DSIMDJSON_BUILD_STATIC=OFF .. make - run: - name: Running tests (gcc, cmake) + name: Running tests (gcc, cmake, dynamic) command: | cd build make test + - run: + name: Building (gcc, cmake, static) + command: | + mkdir buildstatic + cd buildstatic + cmake -DSIMDJSON_BUILD_STATIC=ON .. + make + + - run: + name: Running tests (gcc, cmake, static) + command: | + cd buildstatic + make test + - run: + name: Building (gcc, cmake, sanitize) + command: | + mkdir buildsani + cd buildsani + cmake -DSIMDJSON_SANITIZE=ON -DSIMDJSON_BUILD_STATIC=OFF .. + make + + - run: + name: Running tests (gcc, cmake, sanitize) + command: | + cd buildsani + make test + "gccnoavx": docker: - image: ubuntu:18.04 @@ -63,19 +90,46 @@ jobs: command: ARCHFLAGS="-march=nehalem" make quiettest amalgamate - run: - name: Building (gcc, cmake) + name: Building (gcc, cmake, dynamic) command: | mkdir build cd build - cmake -DSIMDJSON_DISABLE_AVX=on .. + cmake -DSIMDJSON_DISABLE_AVX=ON -DSIMDJSON_BUILD_STATIC=OFF .. make - run: - name: Running tests (gcc, cmake) + name: Running tests (gcc, cmake, dynamic) command: | cd build make test + - run: + name: Building (gcc, cmake, static) + command: | + mkdir buildstatic + cd buildstatic + cmake -DSIMDJSON_DISABLE_AVX=ON -DSIMDJSON_BUILD_STATIC=ON .. + make + + - run: + name: Running tests (gcc, cmake, static) + command: | + cd buildstatic + make test + + - run: + name: Building (gcc, cmake, sanitize) + command: | + mkdir buildsani + cd buildsani + cmake -DSIMDJSON_BUILD_STATIC=OFF -DSIMDJSON_DISABLE_AVX=ON -DSIMDJSON_SANITIZE=ON .. + make + + - run: + name: Running tests (gcc, cmake, sanitize) + command: | + cd buildsani + make test "clang": docker: - image: ubuntu:18.04 @@ -101,19 +155,47 @@ jobs: command: make quiettest amalgamate - run: - name: Building (clang, cmake) + name: Building (clang, cmake, dynamic) command: | mkdir build cd build - cmake .. + cmake -DSIMDJSON_BUILD_STATIC=OFF .. make - run: - name: Running tests (clang, cmake) + name: Running tests (clang, cmake, dynamic) command: | cd build make test + - run: + name: Building (clang, cmake, static) + command: | + mkdir buildstatic + cd buildstatic + cmake -DSIMDJSON_BUILD_STATIC=ON .. + make + + - run: + name: Running tests (clang, cmake, static) + command: | + cd buildstatic + make test + + - run: + name: Building (clang, cmake, sanitize) + command: | + mkdir buildsani + cd buildsani + cmake -DSIMDJSON_BUILD_STATIC=OFF -DSIMDJSON_SANITIZE=ON .. + make + + - run: + name: Running tests (clang, cmake, sanitize) + command: | + cd buildsani + make test + "clangnoavx": docker: - image: ubuntu:18.04 @@ -139,19 +221,49 @@ jobs: command: ARCHFLAGS="-march=nehalem" make quiettest amalgamate - run: - name: Building (clang, cmake) + name: Building (clang, cmake, dynamic) command: | mkdir build cd build - cmake -DSIMDJSON_DISABLE_AVX=on .. + cmake -DSIMDJSON_BUILD_STATIC=OFF -DSIMDJSON_DISABLE_AVX=on .. make - run: - name: Running tests (clang, cmake) + name: Running tests (clang, cmake, dynamic) command: | cd build make test + + - run: + name: Building (clang, cmake, static) + command: | + mkdir buildstatic + cd buildstatic + cmake -DSIMDJSON_BUILD_STATIC=ON -DSIMDJSON_DISABLE_AVX=on .. + make + + - run: + name: Running tests (clang, cmake, static) + command: | + cd buildstatic + make test + + + - run: + name: Building (clang, cmake, sanitize) + command: | + mkdir buildsani + cd buildsani + cmake -DSIMDJSON_BUILD_STATIC=OFF -DSIMDJSON_DISABLE_AVX=ON -DSIMDJSON_SANITIZE=ON .. + make + + - run: + name: Running tests (clang, cmake, sanitize) + command: | + cd buildsani + make test + workflows: version: 2 build_and_test: @@ -159,4 +271,4 @@ workflows: - "clang" - "gcc" - "clangnoavx" - - "gccnoavx" \ No newline at end of file + - "gccnoavx" diff --git a/.drone.yml b/.drone.yml index 796eb283..4ca2bc15 100644 --- a/.drone.yml +++ b/.drone.yml @@ -63,7 +63,7 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=OFF $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure --- kind: pipeline name: amd64_clang_cmake_static @@ -85,7 +85,7 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=ON $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure --- kind: pipeline name: amd64_gcc_cmake_static @@ -107,7 +107,7 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=ON $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure --- kind: pipeline name: amd64_gcc_cmake_dynamic @@ -129,7 +129,7 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=OFF $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure --- kind: pipeline name: arm64_clang_cmake_dynamic @@ -151,7 +151,7 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=OFF $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure --- kind: pipeline name: arm64_gcc_cmake_dynamic @@ -173,7 +173,7 @@ steps: - mkdir build && cd build - cmake $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure commands: - apt-get update -y @@ -182,7 +182,7 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=OFF $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure --- kind: pipeline name: arm64_clang_cmake_static @@ -204,7 +204,7 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=ON $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure --- kind: pipeline name: arm64_gcc_cmake_static @@ -226,9 +226,139 @@ steps: - mkdir build && cd build - cmake -DSIMDJSON_BUILD_STATIC=ON $CMAKE_FLAGS .. - make -j - - ctest + - ctest --output-on-failure +--- +kind: pipeline +name: arm64_clang_cmake_sanitize +platform: + os: linux + arch: arm64 +steps: +- name: Build and Test + image: ubuntu:18.04 + environment: + CC: clang + CXX: clang++ + commands: + - apt-get update -y + - apt-get install -y make $CC g++ cmake + - $CC --version + - mkdir build && cd build + - cmake -DSIMDJSON_SANITIZE=ON $CMAKE_FLAGS .. + - make -j + - ASAN_OPTIONS="detect_leaks=0" ctest --output-on-failure +--- +kind: pipeline +name: arm64_gcc_cmake_sanitize +platform: + os: linux + arch: arm64 +steps: +- name: Build and Test + image: ubuntu:18.04 + environment: + CC: gcc + CXX: g++ + commands: + - apt-get update -y + - apt-get install -y make $CC g++ cmake + - $CC --version + - mkdir build && cd build + - cmake -DSIMDJSON_SANITIZE=ON $CMAKE_FLAGS .. + - make -j + - ASAN_OPTIONS="detect_leaks=0" ctest --output-on-failure + +--- +kind: pipeline +name: amd64_clang_cmake_sanitize + +platform: + os: linux + arch: amd64 + +steps: +- name: Build and Test + image: ubuntu:18.04 + environment: + CC: clang + CXX: clang++ + commands: + - apt-get update -y + - apt-get install -y make $CC g++ cmake + - $CC --version + - mkdir build && cd build + - cmake -DSIMDJSON_SANITIZE=ON $CMAKE_FLAGS .. + - make -j + - ASAN_OPTIONS="detect_leaks=0" ctest --output-on-failure +--- +kind: pipeline +name: amd64_gcc_cmake_sanitize + +platform: + os: linux + arch: amd64 + +steps: +- name: Build and Test + image: ubuntu:18.04 + environment: + CC: gcc + CXX: g++ + commands: + - apt-get update -y + - apt-get install -y make $CC g++ cmake + - $CC --version + - mkdir build && cd build + - cmake -DSIMDJSON_SANITIZE=ON $CMAKE_FLAGS .. + - make -j + - ASAN_OPTIONS="detect_leaks=0" ctest --output-on-failure + +--- +kind: pipeline +name: amd64_clang_cmake_sanitize_noavx + +platform: + os: linux + arch: amd64 + +steps: +- name: Build and Test + image: ubuntu:18.04 + environment: + CC: clang + CXX: clang++ + commands: + - apt-get update -y + - apt-get install -y make $CC g++ cmake + - $CC --version + - mkdir build && cd build + - cmake -DSIMDJSON_SANITIZE=ON -DSIMDJSON_DISABLE_AVX=ON $CMAKE_FLAGS .. + - make -j + - ASAN_OPTIONS="detect_leaks=0" ctest --output-on-failure +--- +kind: pipeline +name: amd64_gcc_cmake_sanitize_noavx + +platform: + os: linux + arch: amd64 + +steps: +- name: Build and Test + image: ubuntu:18.04 + environment: + CC: gcc + CXX: g++ + commands: + - apt-get update -y + - apt-get install -y make $CC g++ cmake + - $CC --version + - mkdir build && cd build + - cmake -DSIMDJSON_SANITIZE=ON -DSIMDJSON_DISABLE_AVX=ON $CMAKE_FLAGS .. + - make -j + - ASAN_OPTIONS="detect_leaks=0" ctest --output-on-failure diff --git a/tools/cmake/FindOptions.cmake b/tools/cmake/FindOptions.cmake index 45096f22..281b5258 100644 --- a/tools/cmake/FindOptions.cmake +++ b/tools/cmake/FindOptions.cmake @@ -12,19 +12,26 @@ if(SIMDJSON_SANITIZE) endif() endif() +if (CMAKE_SYSTEM_PROCESSOR MATCHES "(amd64)|(AMD64)|(x86_64)") + set (X64 TRUE) +else () + set (X64 FALSE) +endif () -if(SIMDJSON_DISABLE_AVX) - if(NOT MSVC) - set (OPT_FLAGS "${OPT_FLAGS} -mno-avx -mno-bmi -mno-pclmul -msse4.2") - else() - set (OPT_FLAGS "${OPT_FLAGS}") - endif() -else() - # some compilers like clang do not automagically define __AVX2__ and __BMI2__ even when the hardware supports it - if(NOT MSVC) - #set (OPT_FLAGS "${OPT_FLAGS} -mpclmul") - else() - #set (OPT_FLAGS "${OPT_FLAGS} /arch:AVX2") +if(X64) + message(STATUS "Detected x64 processor: ${CMAKE_SYSTEM_PROCESSOR}") + if(SIMDJSON_DISABLE_AVX) + message(STATUS "Disabling AVX. No runtime dispatch.") + if(NOT MSVC) + set (OPT_FLAGS "${OPT_FLAGS} -mno-avx -mno-bmi -mpclmul -msse4.2") #westmere + else() + set (OPT_FLAGS "${OPT_FLAGS}") + endif() + else() + if(NOT MSVC) + message(STATUS "Assuming Westmere or better") + set (OPT_FLAGS "${OPT_FLAGS} -mpclmul -msse4.2") + endif() endif() endif()