From 01bef50612b7c1c233857eb0505530f025b7e864 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Wed, 14 Oct 2020 11:06:59 +0200 Subject: [PATCH] attempt to fix murmur on big endian --- .cirrus.yml | 62 ---- .github/workflows/cmake-build-ci.yml | 405 --------------------------- CMake/CheckByteswap.cmake | 58 ++++ CMake/_Include.cmake | 5 +- 4 files changed, 62 insertions(+), 468 deletions(-) delete mode 100644 .cirrus.yml delete mode 100644 .github/workflows/cmake-build-ci.yml create mode 100644 CMake/CheckByteswap.cmake diff --git a/.cirrus.yml b/.cirrus.yml deleted file mode 100644 index d4a7d4b1..00000000 --- a/.cirrus.yml +++ /dev/null @@ -1,62 +0,0 @@ -env: - CMAKE_BUILD_TYPE: Debug - BUILD_TESTING: "ON" - ENABLE_SASL: "ON" - ENABLE_HASH_HSIEH: "ON" - ENABLE_DTRACE: "ON" - VERBOSE: "ON" - MEMCACHED_BINARY: "/usr/local/bin/memcached" - -task: - name: Freebsd - env: - gitter: ENCRYPTED[92e34815ac1a27681bf868c8299bfa37f3cb98c7d88156884c85dfb33e786bd3124c5d624721fb13735d23f7c57ead4b] - ports: RELEASE_12_1_0 - freebsd_instance: - image_family: freebsd-12-1 - dependencies_script: | - pkg update - pkg upgrade -y - pkg install -y \ - autotools \ - bison \ - cmake \ - cyrus-sasl \ - flex \ - libevent \ - pkgconf \ - subversion \ - sudo - memcached_script: | - svn co https://svn.freebsd.org/ports/tags/${ports}/databases/memcached memcached - svn co https://svn.freebsd.org/ports/tags/${ports}/Mk /usr/ports/Mk - svn co https://svn.freebsd.org/ports/tags/${ports}/Templates /usr/ports/Templates - cd memcached - echo bin/memcached > pkg-plist - make all install SASLPWDB_CONFIGURE_ENABLE=sasl-pwdb OPTIONS_SET="SASL SASLPWDB" OPTIONS_DEFINE="SASL SASLPWDB" - cd .. - prepare_script: | - mkdir build - chown nobody build - chsh -s /bin/sh nobody - configure_script: | - sudo -E -u nobody cmake -S . -B build - build_script: | - sudo -E -u nobody make -C build -j2 all - test_script: | - sudo -E -u nobody make -C build -j2 test/fast - install_script: | - sudo -E -u nobody make -C build install DESTDIR=/tmp - on_success: - gitter_success_script: | - curl -sS "${gitter}" \ - --data-urlencode "level=info" \ - --data-urlencode "message=Cirrus-CI build for ${CIRRUS_BRANCH} on ${OS} [succeeded](https://cirrus-ci.org/task/${CIRRUS_TASK_ID})" - on_failure: - gitter_failure_script: | - curl -sS "${gitter}" \ - --data-urlencode "level=error" \ - --data-urlencode "message=Cirrus-CI build for ${CIRRUS_BRANCH} on ${OS} [failed](https://cirrus-ci.org/task/${CIRRUS_TASK_ID})" - testlog_artifacts: - path: build/Testing/Temporary/LastTest.log - type: text/plain diff --git a/.github/workflows/cmake-build-ci.yml b/.github/workflows/cmake-build-ci.yml deleted file mode 100644 index b45102c1..00000000 --- a/.github/workflows/cmake-build-ci.yml +++ /dev/null @@ -1,405 +0,0 @@ -# Generated file; do not edit! -name: cmake-build-ci -on: - push: - paths-ignore: - - "docs/**" - - ".travis.yml" - - ".cirrus.yml" - branches-ignore: - - gh-pages - pull_request: - branches: - - master - - v1.x -env: - # defaults - INSTALL_MEMCACHED: memcached - CMAKE_BUILD_TYPE: Debug - BUILD_TESTING: "ON" - ENABLE_SASL: "OFF" - ENABLE_HASH_HSIEH: "ON" - ENABLE_DTRACE: "OFF" - VERBOSE: "ON" - OS_VND: Linux # - OS_VER: ubuntu-20.04 # - CC_VND: gnu # - CC_VER: cur # - -jobs: - - # new memcached - dbg-new: - name: dbg-new (ubuntu-20.04, gnu, cur) - runs-on: ubuntu-20.04 # - env: - INSTALL_MEMCACHED: - MEMCACHED_PREFIX: /tmp - ENABLE_SASL: "ON" - steps: - - uses: actions/checkout@v2 - - uses: actions/checkout@v2 - with: - repository: memcached/memcached - path: memcached - ref: 1.6.7 - - name: Prepare environment (for cur gnu on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='gnu') && (env.CC_VER=='cur') - run: | - echo CC="gcc-9" >> ${GITHUB_ENV} - echo CXX="g++-9" >> ${GITHUB_ENV} - - name: Install dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo apt-get install \ - libevent-dev \ - libsasl2-dev \ - ${INSTALL_MEMCACHED} \ - ${INSTALL_CC} ${INSTALL_CXX} - sudo systemctl stop memcached || true - - name: Install dependencies (Mac) - if: runner.os == 'macOS' - run: | - brew install bison flex ${INSTALL_MEMCACHED} - brew services stop memcached || true - echo MEMCACHED_BINARY="/usr/local/bin/memcached" >> ${GITHUB_ENV} - - name: Build memcached - run: | - if test -d memcached - then - cd memcached - ./autogen.sh - ./configure CFLAGS="-O2 -pipe" \ - --prefix=${MEMCACHED_PREFIX} \ - --enable-sasl \ - --enable-sasl-pwdb \ - --disable-coverage \ - --disable-dependency-tracking \ - --disable-docs \ - --disable-extstore \ - --disable-option-checking \ - ; - make -j2 - make install - cd .. - echo MEMCACHED_BINARY="${MEMCACHED_PREFIX}/bin/memcached" >> ${GITHUB_ENV} - fi - - name: Generate build tree (${{ env.CMAKE_BUILD_TYPE }}) - run: cmake -S . -B build - - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }} - run: make -C build -j2 all - - name: Test - run: make -C build -j2 test - - name: Install - run: make -C build -j2 install DESTDIR=. - - name: Failed tests log - if: ${{ failure() }} - run: cat build/Testing/Temporary/LastTest.log || true - - # sanitizer build - dbg-san: - name: dbg-san (ubuntu-20.04, gnu, cur) - runs-on: ubuntu-20.04 # - env: - ENABLE_SANITIZERS: "address;undefined" - steps: - - uses: actions/checkout@v2 - - name: Prepare environment (for cur gnu on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='gnu') && (env.CC_VER=='cur') - run: | - echo CC="gcc-9" >> ${GITHUB_ENV} - echo CXX="g++-9" >> ${GITHUB_ENV} - - name: Install dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo apt-get install \ - libevent-dev \ - libsasl2-dev \ - ${INSTALL_MEMCACHED} \ - ${INSTALL_CC} ${INSTALL_CXX} - sudo systemctl stop memcached || true - - name: Install dependencies (Mac) - if: runner.os == 'macOS' - run: | - brew install bison flex ${INSTALL_MEMCACHED} - brew services stop memcached || true - echo MEMCACHED_BINARY="/usr/local/bin/memcached" >> ${GITHUB_ENV} - - name: Build memcached - run: | - if test -d memcached - then - cd memcached - ./autogen.sh - ./configure CFLAGS="-O2 -pipe" \ - --prefix=${MEMCACHED_PREFIX} \ - --enable-sasl \ - --enable-sasl-pwdb \ - --disable-coverage \ - --disable-dependency-tracking \ - --disable-docs \ - --disable-extstore \ - --disable-option-checking \ - ; - make -j2 - make install - cd .. - echo MEMCACHED_BINARY="${MEMCACHED_PREFIX}/bin/memcached" >> ${GITHUB_ENV} - fi - - name: Generate build tree (${{ env.CMAKE_BUILD_TYPE }}) - run: cmake -S . -B build - - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }} - run: make -C build -j2 all - - name: Test - run: make -C build -j2 test - - name: Install - run: make -C build -j2 install DESTDIR=. - - name: Failed tests log - if: ${{ failure() }} - run: cat build/Testing/Temporary/LastTest.log || true - - # coverage build - dbg-cov: - name: dbg-cov (ubuntu-20.04, gnu, cur) - runs-on: ubuntu-20.04 # - env: - CFLAGS: -O0 --coverage - CXXFLAGS: -O0 --coverage - steps: - - uses: actions/checkout@v2 - - name: Prepare environment (for cur gnu on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='gnu') && (env.CC_VER=='cur') - run: | - echo CC="gcc-9" >> ${GITHUB_ENV} - echo CXX="g++-9" >> ${GITHUB_ENV} - - name: Install dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo apt-get install \ - libevent-dev \ - libsasl2-dev \ - ${INSTALL_MEMCACHED} \ - ${INSTALL_CC} ${INSTALL_CXX} - sudo systemctl stop memcached || true - - name: Install dependencies (Mac) - if: runner.os == 'macOS' - run: | - brew install bison flex ${INSTALL_MEMCACHED} - brew services stop memcached || true - echo MEMCACHED_BINARY="/usr/local/bin/memcached" >> ${GITHUB_ENV} - - name: Build memcached - run: | - if test -d memcached - then - cd memcached - ./autogen.sh - ./configure CFLAGS="-O2 -pipe" \ - --prefix=${MEMCACHED_PREFIX} \ - --enable-sasl \ - --enable-sasl-pwdb \ - --disable-coverage \ - --disable-dependency-tracking \ - --disable-docs \ - --disable-extstore \ - --disable-option-checking \ - ; - make -j2 - make install - cd .. - echo MEMCACHED_BINARY="${MEMCACHED_PREFIX}/bin/memcached" >> ${GITHUB_ENV} - fi - - name: Generate build tree (${{ env.CMAKE_BUILD_TYPE }}) - run: cmake -S . -B build - - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }} - run: make -C build -j2 all - - name: Test - run: make -C build -j2 test - - name: Install - run: make -C build -j2 install DESTDIR=. - - name: Failed tests log - if: ${{ failure() }} - run: cat build/Testing/Temporary/LastTest.log || true - - uses: codecov/codecov-action@v1.0.13 - - # mac build - dbg-mac: - name: dbg-mac (macos-10.15, clang, apple) - runs-on: macos-10.15 # - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Install dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo apt-get install \ - libevent-dev \ - libsasl2-dev \ - ${INSTALL_MEMCACHED} \ - ${INSTALL_CC} ${INSTALL_CXX} - sudo systemctl stop memcached || true - - name: Install dependencies (Mac) - if: runner.os == 'macOS' - run: | - brew install bison flex ${INSTALL_MEMCACHED} - brew services stop memcached || true - echo MEMCACHED_BINARY="/usr/local/bin/memcached" >> ${GITHUB_ENV} - - name: Build memcached - run: | - if test -d memcached - then - cd memcached - ./autogen.sh - ./configure CFLAGS="-O2 -pipe" \ - --prefix=${MEMCACHED_PREFIX} \ - --enable-sasl \ - --enable-sasl-pwdb \ - --disable-coverage \ - --disable-dependency-tracking \ - --disable-docs \ - --disable-extstore \ - --disable-option-checking \ - ; - make -j2 - make install - cd .. - echo MEMCACHED_BINARY="${MEMCACHED_PREFIX}/bin/memcached" >> ${GITHUB_ENV} - fi - - name: Generate build tree (${{ env.CMAKE_BUILD_TYPE }}) - run: cmake -S . -B build - - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }} - run: make -C build -j2 all - - name: Test - run: make -C build -j2 test - - name: Install - run: make -C build -j2 install DESTDIR=. - - name: Failed tests log - if: ${{ failure() }} - run: cat build/Testing/Temporary/LastTest.log || true - - # release builds - release: - strategy: - fail-fast: false - matrix: - os_ver: [ubuntu-20.04, ubuntu-18.04] - cc_vnd: [gnu, clang] - cc_ver: [new, cur, old] - runs-on: ${{ matrix.os_ver }} - continue-on-error: ${{ matrix.cc_vnd == 'clang' }} - env: - CMAKE_BUILD_TYPE: Release - OS_VND: Linux - OS_VER: ${{ matrix.os_ver }} - CC_VND: ${{ matrix.cc_vnd }} - CC_VER: ${{ matrix.cc_ver }} - steps: - - uses: actions/checkout@v2 - - name: Prepare environment (for new gnu on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='gnu') && (env.CC_VER=='new') - run: | - echo CC="gcc-10" >> ${GITHUB_ENV} - echo CXX="g++-10" >> ${GITHUB_ENV} - echo INSTALL_CC="gcc-10" >> ${GITHUB_ENV} - echo INSTALL_CXX="g++-10" >> ${GITHUB_ENV} - - name: Prepare environment (for cur gnu on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='gnu') && (env.CC_VER=='cur') - run: | - echo CC="gcc-9" >> ${GITHUB_ENV} - echo CXX="g++-9" >> ${GITHUB_ENV} - - name: Prepare environment (for old gnu on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='gnu') && (env.CC_VER=='old') - run: | - echo CC="gcc-8" >> ${GITHUB_ENV} - echo CXX="g++-8" >> ${GITHUB_ENV} - - name: Prepare environment (for new clang on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='clang') && (env.CC_VER=='new') - run: | - echo CC="clang-10" >> ${GITHUB_ENV} - echo CXX="clang++-10" >> ${GITHUB_ENV} - - name: Prepare environment (for cur clang on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='clang') && (env.CC_VER=='cur') - run: | - echo CC="clang-9" >> ${GITHUB_ENV} - echo CXX="clang++-9" >> ${GITHUB_ENV} - - name: Prepare environment (for old clang on ubuntu-20.04) - if: (env.OS_VER=='ubuntu-20.04') && (env.CC_VND=='clang') && (env.CC_VER=='old') - run: | - echo CC="clang-8" >> ${GITHUB_ENV} - echo CXX="clang++-8" >> ${GITHUB_ENV} - - name: Prepare environment (for new gnu on ubuntu-18.04) - if: (env.OS_VER=='ubuntu-18.04') && (env.CC_VND=='gnu') && (env.CC_VER=='new') - run: | - echo CC="gcc-9" >> ${GITHUB_ENV} - echo CXX="g++-9" >> ${GITHUB_ENV} - - name: Prepare environment (for cur gnu on ubuntu-18.04) - if: (env.OS_VER=='ubuntu-18.04') && (env.CC_VND=='gnu') && (env.CC_VER=='cur') - run: | - echo CC="gcc-8" >> ${GITHUB_ENV} - echo CXX="g++-8" >> ${GITHUB_ENV} - - name: Prepare environment (for old gnu on ubuntu-18.04) - if: (env.OS_VER=='ubuntu-18.04') && (env.CC_VND=='gnu') && (env.CC_VER=='old') - run: | - echo CC="gcc-7" >> ${GITHUB_ENV} - echo CXX="g++-7" >> ${GITHUB_ENV} - - name: Prepare environment (for new clang on ubuntu-18.04) - if: (env.OS_VER=='ubuntu-18.04') && (env.CC_VND=='clang') && (env.CC_VER=='new') - run: | - echo CC="clang-9" >> ${GITHUB_ENV} - echo CXX="clang++-9" >> ${GITHUB_ENV} - - name: Prepare environment (for cur clang on ubuntu-18.04) - if: (env.OS_VER=='ubuntu-18.04') && (env.CC_VND=='clang') && (env.CC_VER=='cur') - run: | - echo CC="clang-8" >> ${GITHUB_ENV} - echo CXX="clang++-8" >> ${GITHUB_ENV} - - name: Prepare environment (for old clang on ubuntu-18.04) - if: (env.OS_VER=='ubuntu-18.04') && (env.CC_VND=='clang') && (env.CC_VER=='old') - run: | - echo CC="clang-6.0" >> ${GITHUB_ENV} - echo CXX="clang++-6.0" >> ${GITHUB_ENV} - echo CXXFLAGS="-stdlib=libc++" >> ${GITHUB_ENV} - - name: Install dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo apt-get install \ - libevent-dev \ - libsasl2-dev \ - ${INSTALL_MEMCACHED} \ - ${INSTALL_CC} ${INSTALL_CXX} - sudo systemctl stop memcached || true - - name: Install dependencies (Mac) - if: runner.os == 'macOS' - run: | - brew install bison flex ${INSTALL_MEMCACHED} - brew services stop memcached || true - echo MEMCACHED_BINARY="/usr/local/bin/memcached" >> ${GITHUB_ENV} - - name: Build memcached - run: | - if test -d memcached - then - cd memcached - ./autogen.sh - ./configure CFLAGS="-O2 -pipe" \ - --prefix=${MEMCACHED_PREFIX} \ - --enable-sasl \ - --enable-sasl-pwdb \ - --disable-coverage \ - --disable-dependency-tracking \ - --disable-docs \ - --disable-extstore \ - --disable-option-checking \ - ; - make -j2 - make install - cd .. - echo MEMCACHED_BINARY="${MEMCACHED_PREFIX}/bin/memcached" >> ${GITHUB_ENV} - fi - - name: Generate build tree (${{ env.CMAKE_BUILD_TYPE }}) - run: cmake -S . -B build - - name: Build all with ${{ env.CXX }} ${{ env.CXXFLAGS }} - run: make -C build -j2 all - - name: Test - run: make -C build -j2 test - - name: Install - run: make -C build -j2 install DESTDIR=. - - name: Failed tests log - if: ${{ failure() }} - run: cat build/Testing/Temporary/LastTest.log || true diff --git a/CMake/CheckByteswap.cmake b/CMake/CheckByteswap.cmake new file mode 100644 index 00000000..b238a805 --- /dev/null +++ b/CMake/CheckByteswap.cmake @@ -0,0 +1,58 @@ +include(CheckHeader) +include(CheckDecl) +include(CheckCompiles) + +# defines HAVE_BYTESWAP +# optionally defines BYTESWAP_HEADER +# optionally defines BYTESWAP_32 +# +# checks whether the following compiles: +# __builtin_bswap32(): defines HAVE_BUILTIN_BSWAP32 +# +# else checks: +# byteswap.h: defines HAVE_BYTESWAP_H +# bswap_32() in byteswap.h: defines HAVE_BSWAP_32 +# +# else checks: +# sys/endian.h: defines HAVE_SYS_ENDIAN_H +# bswap32() in sys/endian.h: defines HAVE_BSWAP32 +# +function(check_byteswap) + + check_compiles(HAVE_BUILTIN_BSWAP32 "uint32_t a, b = __builtin_bswap32(a);" stdint.h) + + if(HAVE_BUILTIN_BSWAP32) + unset(BYTESWAP_HEADER PARENT_SCOPE) + set(BYTESWAP_32 __builtin_bswap32 PARENT_SCOPE) + set(HAVE_BYTESWAP 1 PARENT_SCOPE) + return() + endif() + + check_header(byteswap.h) + check_decl(bswap_32 byteswap.h) + + if(HAVE_BSWAP_32) + if(HAVE_BYTESWAP_H) + set(BYTESWAP_HEADER byteswap.h PARENT_SCOPE) + endif() + set(BYTESWAP_32 bswap_32 PARENT_SCOPE) + set(HAVE_BYTESWAP 1 PARENT_SCOPE) + return() + endif() + + check_header(sys/endian.h) + check_decl(bswap32 sys/endian.h) + + if(HAVE_BSWAP32) + if(HAVE_SYS_ENDIAN_H) + set(BYTESWAP_HEADER sys/endian.h PARENT_SCOPE) + endif() + set(BYTESWAP_32 bswap32 PARENT_SCOPE) + set(HAVE_BYTESWAP 1 PARENT_SCOPT) + return() + endif() + + unset(BYTESWAP_HEADER PARENT_SCOPE) + unset(BYTESWAP_32 PARENT_SCOPE) + set(HAVE_BYTESWAP 0 PARENT_SCOPE) +endfunction() diff --git a/CMake/_Include.cmake b/CMake/_Include.cmake index 7067ef46..41077574 100644 --- a/CMake/_Include.cmake +++ b/CMake/_Include.cmake @@ -26,6 +26,8 @@ include(CheckHeader) include(CheckCompiles) include(CheckType) include(CheckStdatomic) +include(TestBigEndian) +include(CheckByteswap) # configuration @@ -76,8 +78,8 @@ endif() # system checks -include(TestBigEndian) test_big_endian(WORDS_BIGENDIAN) +check_byteswap() check_header(alloca.h) check_header(arpa/inet.h) @@ -112,6 +114,7 @@ check_decl(sndtimeo sys/socket.h) check_decl(setenv stdlib.h) check_decl(strerror string.h) check_decl(strerror_r string.h) + check_compiles(HAVE_STRERROR_R_CHAR_P "char x, y = *strerror_r(0,&x,1);" string.h) check_decl(abi::__cxa_demangle cxxabi.h) -- 2.30.2