From bf87a834dd13ef570df5fec6f38245a36ba9100d Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 17:14:31 +0800 Subject: [PATCH 01/37] add travis CI --- .travis.yaml | 11 +++ ci/scripts/build.sh | 123 ++++++++++++++++++++++++++++++++ ci/travis/install_dependency.sh | 35 +++++++++ ci/travis/travis_build.sh | 24 +++++++ ci/travis/travis_env_common.sh | 10 +++ 5 files changed, 203 insertions(+) create mode 100644 .travis.yaml create mode 100755 ci/scripts/build.sh create mode 100755 ci/travis/install_dependency.sh create mode 100644 ci/travis/travis_build.sh create mode 100644 ci/travis/travis_env_common.sh diff --git a/.travis.yaml b/.travis.yaml new file mode 100644 index 0000000000..7b008a38e4 --- /dev/null +++ b/.travis.yaml @@ -0,0 +1,11 @@ +sudo: required +dist: bionic +addons: + apt: + update: true + packages: + - cmake-3.14 +install: + - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh +script: + - $TRAVIS_BUILD_DIR/ci/travis/travis_build.sh diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh new file mode 100755 index 0000000000..fb6f94f670 --- /dev/null +++ b/ci/scripts/build.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +set -ex + +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +SCRIPTS_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +MILVUS_CORE_DIR="${SCRIPTS_DIR}/../../core" +CORE_BUILD_DIR="${MILVUS_CORE_DIR}/cmake_build" +BUILD_TYPE="Debug" +BUILD_UNITTEST="OFF" +INSTALL_PREFIX="/opt/milvus" +BUILD_COVERAGE="OFF" +USE_JFROG_CACHE="OFF" +RUN_CPPLINT="OFF" +CUDA_COMPILER=/usr/local/cuda/bin/nvcc + +while getopts "o:t:b:ulcjh" arg +do + case $arg in + o) + INSTALL_PREFIX=$OPTARG + ;; + t) + BUILD_TYPE=$OPTARG # BUILD_TYPE + ;; + b) + CORE_BUILD_DIR=$OPTARG # CORE_BUILD_DIR + ;; + u) + echo "Build and run unittest cases" ; + BUILD_UNITTEST="ON"; + ;; + l) + RUN_CPPLINT="ON" + ;; + c) + BUILD_COVERAGE="ON" + ;; + j) + USE_JFROG_CACHE="ON" + ;; + h) # help + echo " + +parameter: +-o: install prefix(default: /opt/milvus) +-t: build type(default: Debug) +-b: core code build directory +-u: building unit test options(default: OFF) +-l: run cpplint, clang-format and clang-tidy(default: OFF) +-c: code coverage(default: OFF) +-j: use jfrog cache build directory(default: OFF) +-h: help + +usage: +./build.sh -o \${INSTALL_PREFIX} -t \${BUILD_TYPE} -b \${CORE_BUILD_DIR} [-u] [-l] [-c] [-j] [-h] + " + exit 0 + ;; + ?) + echo "ERROR! unknown argument" + exit 1 + ;; + esac +done + +if [[ ! -d ${CORE_BUILD_DIR} ]]; then + mkdir ${CORE_BUILD_DIR} +fi + +pushd ${CORE_BUILD_DIR} + +# remove make cache since build.sh -l use default variables +# force update the variables each time +make rebuild_cache + +CMAKE_CMD="cmake \ +-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} +-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ +-DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \ +-DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ +-DBUILD_COVERAGE=${BUILD_COVERAGE} \ +-DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ +${MILVUS_CORE_DIR}" +echo ${CMAKE_CMD} +${CMAKE_CMD} + +if [[ ${RUN_CPPLINT} == "ON" ]]; then + # cpplint check + make lint + if [ $? -ne 0 ]; then + echo "ERROR! cpplint check failed" + exit 1 + fi + echo "cpplint check passed!" + + # clang-format check + make check-clang-format + if [ $? -ne 0 ]; then + echo "ERROR! clang-format check failed" + exit 1 + fi + echo "clang-format check passed!" + +# # clang-tidy check +# make check-clang-tidy +# if [ $? -ne 0 ]; then +# echo "ERROR! clang-tidy check failed" +# rm -f CMakeCache.txt +# exit 1 +# fi +# echo "clang-tidy check passed!" +else + # compile and build + make -j8 || exit 1 + make install || exit 1 +fi diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh new file mode 100755 index 0000000000..bc4a972b8f --- /dev/null +++ b/ci/travis/install_dependency.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +set -ex + +wget -P /tmp https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB + +sudo apt-key add /tmp/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB + +echo "deb https://apt.repos.intel.com/mkl all main" | \ + sudo tee /etc/apt/sources.list.d/intel-mkl.list + +sudo apt-get update -qq + +sudo apt-get install -y -q --no-install-recommends \ + flex \ + bison \ + gfortran \ + lsb-core \ + libtool \ + automake \ + pkg-config \ + libboost-filesystem-dev \ + libboost-system-dev \ + libboost-regex-dev \ + intel-mkl-gnu-2019.4-243 \ + intel-mkl-core-2019.4-243 \ + libmysqlclient-dev \ + clang-format-6.0 \ + clang-tidy-6.0 \ + lcov + +sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so \ + /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so + +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/lib/intel64 \ No newline at end of file diff --git a/ci/travis/travis_build.sh b/ci/travis/travis_build.sh new file mode 100644 index 0000000000..3cde1d5a4d --- /dev/null +++ b/ci/travis/travis_build.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -ex + +source $TRAVIS_BUILD_DIR/ci/travis/travis_env_common.sh + +only_library_mode=no + +while true; do + case "$1" in + --only-library) + only_library_mode=yes + shift ;; + *) break ;; + esac +done + +BUILD_COMMON_FLAGS="-t ${MILVUS_BUILD_TYPE} -o ${MILVUS_INSTALL_PREFIX} -b ${MILVUS_BUILD_DIR}" + +if [ $only_library_mode == "yes" ]; then + ${TRAVIS_BUILD_DIR}/ci/scripts/build.sh ${BUILD_COMMON_FLAGS} +else + ${TRAVIS_BUILD_DIR}/ci/scripts/build.sh ${BUILD_COMMON_FLAGS} -u -c +fi \ No newline at end of file diff --git a/ci/travis/travis_env_common.sh b/ci/travis/travis_env_common.sh new file mode 100644 index 0000000000..ac63d2950b --- /dev/null +++ b/ci/travis/travis_env_common.sh @@ -0,0 +1,10 @@ +export MILVUS_CORE_DIR=${TRAVIS_BUILD_DIR}/core +export MILVUS_BUILD_DIR=${TRAVIS_BUILD_DIR}/core/cmake_build +export MILVUS_INSTALL_PREFIX=/opt/milvus +export MILVUS_TRAVIS_COVERAGE=${MILVUS_TRAVIS_COVERAGE:=0} + +if ["$MILVUS_TRAVIS_COVERAGE" == "1"]; then + export MILVUS_CPP_COVERAGE_FILE=${TRAVIS_BUILD_DIR}/output_new.info +fi + +export MILVUS_BUILD_TYPE=${MILVUS_BUILD_TYPE:=Release} From 191d63fc4b7f4e091c65a5b4b7ddc02a54a6d193 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 17:23:49 +0800 Subject: [PATCH 02/37] rename travis CI file --- .travis.yaml => .travis.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .travis.yaml => .travis.yml (100%) diff --git a/.travis.yaml b/.travis.yml similarity index 100% rename from .travis.yaml rename to .travis.yml From 2f571df6deac0513ea61c7c7c9a810ee94a199ab Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 17:27:10 +0800 Subject: [PATCH 03/37] disable install cmake-3.14 in travis.yml --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7b008a38e4..9abb055c52 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,6 @@ dist: bionic addons: apt: update: true - packages: - - cmake-3.14 install: - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh script: From dc94aa22cbb69d56d3717fb65949a1372331462f Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 17:44:56 +0800 Subject: [PATCH 04/37] setting language in travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9abb055c52..ec3b1c41fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +language: cpp sudo: required dist: bionic addons: From 1551adf908eba47c8a05f6ac31695a4e82e225d7 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 17:47:01 +0800 Subject: [PATCH 05/37] update ci/travis/travis_build.sh --- ci/travis/travis_build.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 ci/travis/travis_build.sh diff --git a/ci/travis/travis_build.sh b/ci/travis/travis_build.sh old mode 100644 new mode 100755 From be384f22f9e6d61fc113d1fb925705ce84d2ebcb Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 17:55:30 +0800 Subject: [PATCH 06/37] update ci/scripts/build.sh --- ci/scripts/build.sh | 39 ++++----------------------------- ci/travis/install_dependency.sh | 4 ++-- 2 files changed, 6 insertions(+), 37 deletions(-) diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh index fb6f94f670..6276359fae 100755 --- a/ci/scripts/build.sh +++ b/ci/scripts/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -ex +set -e SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink @@ -76,10 +76,6 @@ fi pushd ${CORE_BUILD_DIR} -# remove make cache since build.sh -l use default variables -# force update the variables each time -make rebuild_cache - CMAKE_CMD="cmake \ -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ @@ -91,33 +87,6 @@ ${MILVUS_CORE_DIR}" echo ${CMAKE_CMD} ${CMAKE_CMD} -if [[ ${RUN_CPPLINT} == "ON" ]]; then - # cpplint check - make lint - if [ $? -ne 0 ]; then - echo "ERROR! cpplint check failed" - exit 1 - fi - echo "cpplint check passed!" - - # clang-format check - make check-clang-format - if [ $? -ne 0 ]; then - echo "ERROR! clang-format check failed" - exit 1 - fi - echo "clang-format check passed!" - -# # clang-tidy check -# make check-clang-tidy -# if [ $? -ne 0 ]; then -# echo "ERROR! clang-tidy check failed" -# rm -f CMakeCache.txt -# exit 1 -# fi -# echo "clang-tidy check passed!" -else - # compile and build - make -j8 || exit 1 - make install || exit 1 -fi +# compile and build +make -j8 || exit 1 +make install || exit 1 diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index bc4a972b8f..cec4e9c30f 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -ex +set -e wget -P /tmp https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB @@ -32,4 +32,4 @@ sudo apt-get install -y -q --no-install-recommends \ sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so \ /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so -export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/lib/intel64 \ No newline at end of file +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/lib/intel64 From 6809839ffc4d8d0dc59f78f208296bf4d72522a2 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 18:02:33 +0800 Subject: [PATCH 07/37] Install cmake-3.14 on Travis CI --- ci/travis/install_dependency.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index cec4e9c30f..df4752b2ef 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -2,6 +2,9 @@ set -e +wget -qO- "https://cmake.org/files/v3.14/cmake-3.14.3-Linux-x86_64.tar.gz" | + sudo tar --strip-components=1 -xz -C /usr/local + wget -P /tmp https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB sudo apt-key add /tmp/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB From 84c47daf866a4e64e68d599e33a32d84c8403fed Mon Sep 17 00:00:00 2001 From: quicksilver Date: Wed, 6 Nov 2019 18:13:53 +0800 Subject: [PATCH 08/37] add before_install stage in .travis.yml --- .travis.yml | 2 ++ ci/travis/install_dependency.sh | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ec3b1c41fa..2f9462e261 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,8 @@ dist: bionic addons: apt: update: true +before_install: + - wget -qO- "https://cmake.org/files/v3.14/cmake-3.14.3-Linux-x86_64.tar.gz" | sudo tar --strip-components=1 -xz -C /usr/local install: - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh script: diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index df4752b2ef..cec4e9c30f 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -2,9 +2,6 @@ set -e -wget -qO- "https://cmake.org/files/v3.14/cmake-3.14.3-Linux-x86_64.tar.gz" | - sudo tar --strip-components=1 -xz -C /usr/local - wget -P /tmp https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB sudo apt-key add /tmp/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB From 81dc258a07ba9e3db341fd8f9b2029d7f1216c45 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Thu, 7 Nov 2019 10:03:55 +0800 Subject: [PATCH 09/37] add before_install stage in .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2f9462e261..760d2d8ace 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,8 @@ addons: apt: update: true before_install: - - wget -qO- "https://cmake.org/files/v3.14/cmake-3.14.3-Linux-x86_64.tar.gz" | sudo tar --strip-components=1 -xz -C /usr/local + - wget -O cmake.sh https://cmake.org/files/v3.14/cmake-3.14.0-Linux-x86_64.sh + - sudo sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local install: - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh script: From e7994a7c00629181ca133385ff1f10fe01dcce0a Mon Sep 17 00:00:00 2001 From: quicksilver Date: Thu, 7 Nov 2019 10:16:15 +0800 Subject: [PATCH 10/37] update cmake version --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 760d2d8ace..1f98f4ab83 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ addons: before_install: - wget -O cmake.sh https://cmake.org/files/v3.14/cmake-3.14.0-Linux-x86_64.sh - sudo sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local + - export PATH="/usr/local:$PATH" install: - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh script: From 35264a1f85da02f44ba22dd01362f2d7db54869e Mon Sep 17 00:00:00 2001 From: quicksilver Date: Thu, 7 Nov 2019 10:22:25 +0800 Subject: [PATCH 11/37] update cmake version --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1f98f4ab83..df573e74f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ addons: before_install: - wget -O cmake.sh https://cmake.org/files/v3.14/cmake-3.14.0-Linux-x86_64.sh - sudo sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local - - export PATH="/usr/local:$PATH" + - export PATH="$PATH:/usr/local" install: - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh script: From 32b29fe7b893b397c978ccc649348115087a8eb7 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Thu, 7 Nov 2019 10:29:00 +0800 Subject: [PATCH 12/37] update cmake version --- .travis.yml | 4 ---- core/CMakeLists.txt | 4 ++-- core/src/index/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index df573e74f7..ec3b1c41fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,10 +4,6 @@ dist: bionic addons: apt: update: true -before_install: - - wget -O cmake.sh https://cmake.org/files/v3.14/cmake-3.14.0-Linux-x86_64.sh - - sudo sh cmake.sh --skip-license --exclude-subdir --prefix=/usr/local - - export PATH="$PATH:/usr/local" install: - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh script: diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index a59e80a6e8..800993e1ce 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -18,7 +18,7 @@ #------------------------------------------------------------------------------- -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.12) message(STATUS "Building using CMake version: ${CMAKE_VERSION}") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") @@ -273,4 +273,4 @@ if (${CLANG_TIDY_FOUND}) --source_dir ${CMAKE_CURRENT_SOURCE_DIR}/src ${MILVUS_LINT_QUIET}) -endif () \ No newline at end of file +endif () diff --git a/core/src/index/CMakeLists.txt b/core/src/index/CMakeLists.txt index fcb291eda2..560a73ea16 100644 --- a/core/src/index/CMakeLists.txt +++ b/core/src/index/CMakeLists.txt @@ -18,7 +18,7 @@ #------------------------------------------------------------------------------- -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.12) message(STATUS "------------------------------KNOWHERE-----------------------------------") message(STATUS "Building using CMake version: ${CMAKE_VERSION}") From 6e8f397a69c07cc62932d63664e1edd9cee7d9b5 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Thu, 7 Nov 2019 10:58:00 +0800 Subject: [PATCH 13/37] cpu version for default setting --- ci/scripts/build.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh index 6276359fae..253ee5893d 100755 --- a/ci/scripts/build.sh +++ b/ci/scripts/build.sh @@ -18,9 +18,10 @@ INSTALL_PREFIX="/opt/milvus" BUILD_COVERAGE="OFF" USE_JFROG_CACHE="OFF" RUN_CPPLINT="OFF" +CPU_VERSION="ON" CUDA_COMPILER=/usr/local/cuda/bin/nvcc -while getopts "o:t:b:ulcjh" arg +while getopts "o:t:b:gulcjh" arg do case $arg in o) @@ -32,6 +33,9 @@ do b) CORE_BUILD_DIR=$OPTARG # CORE_BUILD_DIR ;; + g) + CPU_VERSION="OFF"; + ;; u) echo "Build and run unittest cases" ; BUILD_UNITTEST="ON"; @@ -52,6 +56,7 @@ parameter: -o: install prefix(default: /opt/milvus) -t: build type(default: Debug) -b: core code build directory +-g: gpu version -u: building unit test options(default: OFF) -l: run cpplint, clang-format and clang-tidy(default: OFF) -c: code coverage(default: OFF) @@ -80,6 +85,7 @@ CMAKE_CMD="cmake \ -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \ +-DMILVUS_CPU_VERSION=${CPU_VERSION} \ -DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ -DBUILD_COVERAGE=${BUILD_COVERAGE} \ -DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ From d4372d28b709956b0f736bb22943cae4e2e7ff70 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 11:12:59 +0800 Subject: [PATCH 14/37] use ccache when compiling (if available) --- core/CMakeLists.txt | 12 ++++++++++++ core/cmake/DefineOptions.cmake | 2 ++ 2 files changed, 14 insertions(+) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 7b6a115527..65094b19a3 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -118,6 +118,18 @@ include(DefineOptions) include(BuildUtils) include(ThirdPartyPackages) +if(MILVUS_USE_CCACHE) + find_program(CCACHE_FOUND ccache) + if(CCACHE_FOUND) + message(STATUS "Using ccache: ${CCACHE_FOUND}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND}) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_FOUND}) + # let ccache preserve C++ comments, because some of them may be + # meaningful to the compiler + set(ENV{CCACHE_COMMENTS} "1") + endif(CCACHE_FOUND) +endif() + set(MILVUS_CPU_VERSION false) if (MILVUS_GPU_VERSION) message(STATUS "Building Milvus GPU version") diff --git a/core/cmake/DefineOptions.cmake b/core/cmake/DefineOptions.cmake index 6e05a12dd2..0050de75eb 100644 --- a/core/cmake/DefineOptions.cmake +++ b/core/cmake/DefineOptions.cmake @@ -57,6 +57,8 @@ define_option_string(MILVUS_DEPENDENCY_SOURCE "BUNDLED" "SYSTEM") +define_option(MILVUS_USE_CCACHE "Use ccache when compiling (if available)" ON) + define_option(MILVUS_VERBOSE_THIRDPARTY_BUILD "Show output from ExternalProjects rather than just logging to files" ON) From 57768e77249f28f6d4a93220b34460b0d657da07 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 11:28:57 +0800 Subject: [PATCH 15/37] add ccache cache in .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ec3b1c41fa..ee21c874dd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: cpp +cache: ccache sudo: required dist: bionic addons: From d94ebbca97ebc1b456f86a38b9aef2455498d04f Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 11:51:06 +0800 Subject: [PATCH 16/37] add before-install.sh in travis --- .travis.yml | 6 ++++++ ci/travis/before-install.sh | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100755 ci/travis/before-install.sh diff --git a/.travis.yml b/.travis.yml index ee21c874dd..aaa390620f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,16 @@ language: cpp cache: ccache sudo: required dist: bionic + addons: apt: update: true + +before_install: + - source ci/travis/before-install.sh + install: - source $TRAVIS_BUILD_DIR/ci/travis/install_dependency.sh + script: - $TRAVIS_BUILD_DIR/ci/travis/travis_build.sh diff --git a/ci/travis/before-install.sh b/ci/travis/before-install.sh new file mode 100755 index 0000000000..4ded8b8e38 --- /dev/null +++ b/ci/travis/before-install.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -ex + +if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then + export CCACHE_COMPRESS=1 + export CCACHE_COMPRESSLEVEL=5 + export CCACHE_COMPILERCHECK=content + ccache --show-stats +fi + +set +ex From b837d135550b409751ac47ceed1d72710129efc0 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 14:12:37 +0800 Subject: [PATCH 17/37] update .travis.yml --- .travis.yml | 5 ++++- ci/travis/before-install.sh | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index aaa390620f..c4729a2555 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,11 @@ language: cpp -cache: ccache sudo: required dist: bionic +cache: + directories: + - $HOME/.ccache + addons: apt: update: true diff --git a/ci/travis/before-install.sh b/ci/travis/before-install.sh index 4ded8b8e38..70133cfe1d 100755 --- a/ci/travis/before-install.sh +++ b/ci/travis/before-install.sh @@ -6,6 +6,7 @@ if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then export CCACHE_COMPRESS=1 export CCACHE_COMPRESSLEVEL=5 export CCACHE_COMPILERCHECK=content + export PATH=/usr/lib/ccache/:$PATH ccache --show-stats fi From ac61309c649a39031e9b08ceb1ccccf6a68701de Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 14:15:34 +0800 Subject: [PATCH 18/37] update ci/travis/install_dependency.sh --- ci/travis/install_dependency.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index cec4e9c30f..54e2f41ab5 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -18,6 +18,7 @@ sudo apt-get install -y -q --no-install-recommends \ lsb-core \ libtool \ automake \ + ccache \ pkg-config \ libboost-filesystem-dev \ libboost-system-dev \ From ba2548a93638f8d413c5fbaf8ac0a841911ac496 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 16:44:31 +0800 Subject: [PATCH 19/37] add FindArrow.cmake --- core/src/index/cmake/FindArrow.cmake | 431 ++++++++++++++++++ .../index/cmake/ThirdPartyPackagesCore.cmake | 24 +- 2 files changed, 440 insertions(+), 15 deletions(-) create mode 100644 core/src/index/cmake/FindArrow.cmake diff --git a/core/src/index/cmake/FindArrow.cmake b/core/src/index/cmake/FindArrow.cmake new file mode 100644 index 0000000000..fdf7c1437f --- /dev/null +++ b/core/src/index/cmake/FindArrow.cmake @@ -0,0 +1,431 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# - Find Arrow (arrow/api.h, libarrow.a, libarrow.so) +# This module defines +# ARROW_FOUND, whether Arrow has been found +# ARROW_FULL_SO_VERSION, full shared object version of found Arrow "100.0.0" +# ARROW_IMPORT_LIB, path to libarrow's import library (Windows only) +# ARROW_INCLUDE_DIR, directory containing headers +# ARROW_LIBS, deprecated. Use ARROW_LIB_DIR instead +# ARROW_LIB_DIR, directory containing Arrow libraries +# ARROW_SHARED_IMP_LIB, deprecated. Use ARROW_IMPORT_LIB instead +# ARROW_SHARED_LIB, path to libarrow's shared library +# ARROW_SO_VERSION, shared object version of found Arrow such as "100" +# ARROW_STATIC_LIB, path to libarrow.a +# ARROW_VERSION, version of found Arrow +# ARROW_VERSION_MAJOR, major version of found Arrow +# ARROW_VERSION_MINOR, minor version of found Arrow +# ARROW_VERSION_PATCH, patch version of found Arrow + +include(FindPkgConfig) +include(FindPackageHandleStandardArgs) + +set(ARROW_SEARCH_LIB_PATH_SUFFIXES) +if(CMAKE_LIBRARY_ARCHITECTURE) + list(APPEND ARROW_SEARCH_LIB_PATH_SUFFIXES "lib/${CMAKE_LIBRARY_ARCHITECTURE}") +endif() +list(APPEND ARROW_SEARCH_LIB_PATH_SUFFIXES + "lib64" + "lib32" + "lib" + "bin") +set(ARROW_CONFIG_SUFFIXES + "_RELEASE" + "_RELWITHDEBINFO" + "_MINSIZEREL" + "_DEBUG" + "") +if(CMAKE_BUILD_TYPE) + string(TOUPPER ${CMAKE_BUILD_TYPE} ARROW_CONFIG_SUFFIX_PREFERRED) + set(ARROW_CONFIG_SUFFIX_PREFERRED "_${ARROW_CONFIG_SUFFIX_PREFERRED}") + list(INSERT ARROW_CONFIG_SUFFIXES 0 "${ARROW_CONFIG_SUFFIX_PREFERRED}") +endif() + +if(NOT DEFINED ARROW_MSVC_STATIC_LIB_SUFFIX) + if(MSVC) + set(ARROW_MSVC_STATIC_LIB_SUFFIX "_static") + else() + set(ARROW_MSVC_STATIC_LIB_SUFFIX "") + endif() +endif() + +# Internal function. +# +# Set shared library name for ${base_name} to ${output_variable}. +# +# Example: +# arrow_build_shared_library_name(ARROW_SHARED_LIBRARY_NAME arrow) +# # -> ARROW_SHARED_LIBRARY_NAME=libarrow.so on Linux +# # -> ARROW_SHARED_LIBRARY_NAME=libarrow.dylib on macOS +# # -> ARROW_SHARED_LIBRARY_NAME=arrow.dll with MSVC on Windows +# # -> ARROW_SHARED_LIBRARY_NAME=libarrow.dll with MinGW on Windows +function(arrow_build_shared_library_name output_variable base_name) + set(${output_variable} + "${CMAKE_SHARED_LIBRARY_PREFIX}${base_name}${CMAKE_SHARED_LIBRARY_SUFFIX}" + PARENT_SCOPE) +endfunction() + +# Internal function. +# +# Set import library name for ${base_name} to ${output_variable}. +# This is useful only for MSVC build. Import library is used only +# with MSVC build. +# +# Example: +# arrow_build_import_library_name(ARROW_IMPORT_LIBRARY_NAME arrow) +# # -> ARROW_IMPORT_LIBRARY_NAME=arrow on Linux (meaningless) +# # -> ARROW_IMPORT_LIBRARY_NAME=arrow on macOS (meaningless) +# # -> ARROW_IMPORT_LIBRARY_NAME=arrow.lib with MSVC on Windows +# # -> ARROW_IMPORT_LIBRARY_NAME=libarrow.dll.a with MinGW on Windows +function(arrow_build_import_library_name output_variable base_name) + set(${output_variable} + "${CMAKE_IMPORT_LIBRARY_PREFIX}${base_name}${CMAKE_IMPORT_LIBRARY_SUFFIX}" + PARENT_SCOPE) +endfunction() + +# Internal function. +# +# Set static library name for ${base_name} to ${output_variable}. +# +# Example: +# arrow_build_static_library_name(ARROW_STATIC_LIBRARY_NAME arrow) +# # -> ARROW_STATIC_LIBRARY_NAME=libarrow.a on Linux +# # -> ARROW_STATIC_LIBRARY_NAME=libarrow.a on macOS +# # -> ARROW_STATIC_LIBRARY_NAME=arrow.lib with MSVC on Windows +# # -> ARROW_STATIC_LIBRARY_NAME=libarrow.dll.a with MinGW on Windows +function(arrow_build_static_library_name output_variable base_name) + set( + ${output_variable} + "${CMAKE_STATIC_LIBRARY_PREFIX}${base_name}${ARROW_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" + PARENT_SCOPE) +endfunction() + +# Internal function. +# +# Set macro value for ${macro_name} in ${header_content} to ${output_variable}. +# +# Example: +# arrow_extract_macro_value(version_major +# "ARROW_VERSION_MAJOR" +# "#define ARROW_VERSION_MAJOR 1.0.0") +# # -> version_major=1.0.0 +function(arrow_extract_macro_value output_variable macro_name header_content) + string(REGEX MATCH "#define +${macro_name} +[^\r\n]+" macro_definition + "${header_content}") + string(REGEX + REPLACE "^#define +${macro_name} +(.+)$" "\\1" macro_value "${macro_definition}") + set(${output_variable} "${macro_value}" PARENT_SCOPE) +endfunction() + +# Internal macro only for arrow_find_package. +# +# Find package in HOME. +macro(arrow_find_package_home) + find_path(${prefix}_include_dir "${header_path}" + PATHS "${home}" + PATH_SUFFIXES "include" + NO_DEFAULT_PATH) + set(include_dir "${${prefix}_include_dir}") + set(${prefix}_INCLUDE_DIR "${include_dir}" PARENT_SCOPE) + + if(MSVC) + set(CMAKE_SHARED_LIBRARY_SUFFIXES_ORIGINAL ${CMAKE_FIND_LIBRARY_SUFFIXES}) + # .dll isn't found by find_library with MSVC because .dll isn't included in + # CMAKE_FIND_LIBRARY_SUFFIXES. + list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_SHARED_LIBRARY_SUFFIX}") + endif() + find_library(${prefix}_shared_lib + NAMES "${shared_lib_name}" + PATHS "${home}" + PATH_SUFFIXES ${ARROW_SEARCH_LIB_PATH_SUFFIXES} + NO_DEFAULT_PATH) + if(MSVC) + set(CMAKE_SHARED_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_ORIGINAL}) + endif() + set(shared_lib "${${prefix}_shared_lib}") + set(${prefix}_SHARED_LIB "${shared_lib}" PARENT_SCOPE) + if(shared_lib) + add_library(${target_shared} SHARED IMPORTED) + set_target_properties(${target_shared} PROPERTIES IMPORTED_LOCATION "${shared_lib}") + if(include_dir) + set_target_properties(${target_shared} + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${include_dir}") + endif() + find_library(${prefix}_import_lib + NAMES "${import_lib_name}" + PATHS "${home}" + PATH_SUFFIXES ${ARROW_SEARCH_LIB_PATH_SUFFIXES} + NO_DEFAULT_PATH) + set(import_lib "${${prefix}_import_lib}") + set(${prefix}_IMPORT_LIB "${import_lib}" PARENT_SCOPE) + if(import_lib) + set_target_properties(${target_shared} PROPERTIES IMPORTED_IMPLIB "${import_lib}") + endif() + endif() + + find_library(${prefix}_static_lib + NAMES "${static_lib_name}" + PATHS "${home}" + PATH_SUFFIXES ${ARROW_SEARCH_LIB_PATH_SUFFIXES} + NO_DEFAULT_PATH) + set(static_lib "${${prefix}_static_lib}") + set(${prefix}_STATIC_LIB "${static_lib}" PARENT_SCOPE) + if(static_lib) + add_library(${target_static} STATIC IMPORTED) + set_target_properties(${target_static} PROPERTIES IMPORTED_LOCATION "${static_lib}") + if(include_dir) + set_target_properties(${target_static} + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${include_dir}") + endif() + endif() +endmacro() + +# Internal macro only for arrow_find_package. +# +# Find package by CMake package configuration. +macro(arrow_find_package_cmake_package_configuration) + # ARROW-5575: We need to split target files for each component + if(TARGET ${target_shared} OR TARGET ${target_static}) + set(${cmake_package_name}_FOUND TRUE) + else() + find_package(${cmake_package_name} CONFIG) + endif() + if(${cmake_package_name}_FOUND) + set(${prefix}_USE_CMAKE_PACKAGE_CONFIG TRUE PARENT_SCOPE) + if(TARGET ${target_shared}) + foreach(suffix ${ARROW_CONFIG_SUFFIXES}) + get_target_property(shared_lib ${target_shared} IMPORTED_LOCATION${suffix}) + if(shared_lib) + # Remove shared library version: + # libarrow.so.100.0.0 -> libarrow.so + # Because ARROW_HOME and pkg-config approaches don't add + # shared library version. + string(REGEX + REPLACE "(${CMAKE_SHARED_LIBRARY_SUFFIX})[.0-9]+$" "\\1" shared_lib + "${shared_lib}") + set(${prefix}_SHARED_LIB "${shared_lib}" PARENT_SCOPE) + break() + endif() + endforeach() + endif() + if(TARGET ${target_static}) + foreach(suffix ${ARROW_CONFIG_SUFFIXES}) + get_target_property(static_lib ${target_static} IMPORTED_LOCATION${suffix}) + if(static_lib) + set(${prefix}_STATIC_LIB "${static_lib}" PARENT_SCOPE) + break() + endif() + endforeach() + endif() + endif() +endmacro() + +# Internal macro only for arrow_find_package. +# +# Find package by pkg-config. +macro(arrow_find_package_pkg_config) + pkg_check_modules(${prefix}_PC ${pkg_config_name}) + if(${prefix}_PC_FOUND) + set(${prefix}_USE_PKG_CONFIG TRUE PARENT_SCOPE) + + set(include_dir "${${prefix}_PC_INCLUDEDIR}") + set(lib_dir "${${prefix}_PC_LIBDIR}") + set(shared_lib_paths "${${prefix}_PC_LINK_LIBRARIES}") + # Use the first shared library path as the IMPORTED_LOCATION + # for ${target_shared}. This assumes that the first shared library + # path is the shared library path for this module. + list(GET shared_lib_paths 0 first_shared_lib_path) + # Use the rest shared library paths as the INTERFACE_LINK_LIBRARIES + # for ${target_shared}. This assumes that the rest shared library + # paths are dependency library paths for this module. + list(LENGTH shared_lib_paths n_shared_lib_paths) + if(n_shared_lib_paths LESS_EQUAL 1) + set(rest_shared_lib_paths) + else() + list(SUBLIST + shared_lib_paths + 1 + -1 + rest_shared_lib_paths) + endif() + + set(${prefix}_VERSION "${${prefix}_PC_VERSION}" PARENT_SCOPE) + set(${prefix}_INCLUDE_DIR "${include_dir}" PARENT_SCOPE) + set(${prefix}_SHARED_LIB "${first_shared_lib_path}" PARENT_SCOPE) + + add_library(${target_shared} SHARED IMPORTED) + set_target_properties(${target_shared} + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${include_dir}" + INTERFACE_LINK_LIBRARIES + "${rest_shared_lib_paths}" + IMPORTED_LOCATION + "${first_shared_lib_path}") + + find_library(${prefix}_static_lib + NAMES "${static_lib_name}" + PATHS "${lib_dir}" + NO_DEFAULT_PATH) + set(static_lib "${${prefix}_static_lib}") + set(${prefix}_STATIC_LIB "${static_lib}" PARENT_SCOPE) + if(static_lib) + add_library(${target_static} STATIC IMPORTED) + set_target_properties(${target_static} + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${include_dir}" + IMPORTED_LOCATION "${static_lib}") + endif() + endif() +endmacro() + +function(arrow_find_package + prefix + home + base_name + header_path + cmake_package_name + pkg_config_name) + arrow_build_shared_library_name(shared_lib_name ${base_name}) + arrow_build_import_library_name(import_lib_name ${base_name}) + arrow_build_static_library_name(static_lib_name ${base_name}) + + set(target_shared ${base_name}_shared) + set(target_static ${base_name}_static) + + if(home) + arrow_find_package_home() + set(${prefix}_FIND_APPROACH "HOME: ${home}" PARENT_SCOPE) + else() + arrow_find_package_cmake_package_configuration() + if(${cmake_package_name}_FOUND) + set(${prefix}_FIND_APPROACH + "CMake package configuration: ${cmake_package_name}" + PARENT_SCOPE) + else() + arrow_find_package_pkg_config() + set(${prefix}_FIND_APPROACH "pkg-config: ${pkg_config_name}" PARENT_SCOPE) + endif() + endif() + + if(NOT include_dir) + if(TARGET ${target_shared}) + get_target_property(include_dir ${target_shared} INTERFACE_INCLUDE_DIRECTORIES) + elseif(TARGET ${target_static}) + get_target_property(include_dir ${target_static} INTERFACE_INCLUDE_DIRECTORIES) + endif() + endif() + if(include_dir) + set(${prefix}_INCLUDE_DIR "${include_dir}" PARENT_SCOPE) + endif() + + if(shared_lib) + get_filename_component(lib_dir "${shared_lib}" DIRECTORY) + elseif(static_lib) + get_filename_component(lib_dir "${static_lib}" DIRECTORY) + else() + set(lib_dir NOTFOUND) + endif() + set(${prefix}_LIB_DIR "${lib_dir}" PARENT_SCOPE) + # For backward compatibility + set(${prefix}_LIBS "${lib_dir}" PARENT_SCOPE) +endfunction() + +if(NOT "$ENV{ARROW_HOME}" STREQUAL "") + file(TO_CMAKE_PATH "$ENV{ARROW_HOME}" ARROW_HOME) +endif() +arrow_find_package(ARROW + "${ARROW_HOME}" + arrow + arrow/api.h + Arrow + arrow) + +if(ARROW_HOME) + if(ARROW_INCLUDE_DIR) + file(READ "${ARROW_INCLUDE_DIR}/arrow/util/config.h" ARROW_CONFIG_H_CONTENT) + arrow_extract_macro_value(ARROW_VERSION_MAJOR "ARROW_VERSION_MAJOR" + "${ARROW_CONFIG_H_CONTENT}") + arrow_extract_macro_value(ARROW_VERSION_MINOR "ARROW_VERSION_MINOR" + "${ARROW_CONFIG_H_CONTENT}") + arrow_extract_macro_value(ARROW_VERSION_PATCH "ARROW_VERSION_PATCH" + "${ARROW_CONFIG_H_CONTENT}") + if("${ARROW_VERSION_MAJOR}" STREQUAL "" + OR "${ARROW_VERSION_MINOR}" STREQUAL "" + OR "${ARROW_VERSION_PATCH}" STREQUAL "") + set(ARROW_VERSION "0.0.0") + else() + set(ARROW_VERSION + "${ARROW_VERSION_MAJOR}.${ARROW_VERSION_MINOR}.${ARROW_VERSION_PATCH}") + endif() + + arrow_extract_macro_value(ARROW_SO_VERSION_QUOTED "ARROW_SO_VERSION" + "${ARROW_CONFIG_H_CONTENT}") + string(REGEX REPLACE "^\"(.+)\"$" "\\1" ARROW_SO_VERSION "${ARROW_SO_VERSION_QUOTED}") + arrow_extract_macro_value(ARROW_FULL_SO_VERSION_QUOTED "ARROW_FULL_SO_VERSION" + "${ARROW_CONFIG_H_CONTENT}") + string(REGEX + REPLACE "^\"(.+)\"$" "\\1" ARROW_FULL_SO_VERSION + "${ARROW_FULL_SO_VERSION_QUOTED}") + endif() +else() + if(ARROW_USE_CMAKE_PACKAGE_CONFIG) + find_package(Arrow CONFIG) + elseif(ARROW_USE_PKG_CONFIG) + pkg_get_variable(ARROW_SO_VERSION arrow so_version) + pkg_get_variable(ARROW_FULL_SO_VERSION arrow full_so_version) + endif() +endif() + +set(ARROW_ABI_VERSION ${ARROW_SO_VERSION}) + +mark_as_advanced(ARROW_ABI_VERSION + ARROW_CONFIG_SUFFIXES + ARROW_FULL_SO_VERSION + ARROW_IMPORT_LIB + ARROW_INCLUDE_DIR + ARROW_LIBS + ARROW_LIB_DIR + ARROW_SEARCH_LIB_PATH_SUFFIXES + ARROW_SHARED_IMP_LIB + ARROW_SHARED_LIB + ARROW_SO_VERSION + ARROW_STATIC_LIB + ARROW_VERSION + ARROW_VERSION_MAJOR + ARROW_VERSION_MINOR + ARROW_VERSION_PATCH) + +find_package_handle_standard_args(Arrow REQUIRED_VARS + # The first required variable is shown + # in the found message. So this list is + # not sorted alphabetically. + ARROW_INCLUDE_DIR + ARROW_LIB_DIR + ARROW_FULL_SO_VERSION + ARROW_SO_VERSION + VERSION_VAR + ARROW_VERSION) +set(ARROW_FOUND ${Arrow_FOUND}) + +if(Arrow_FOUND AND NOT Arrow_FIND_QUIETLY) + message(STATUS "Arrow version: ${ARROW_VERSION} (${ARROW_FIND_APPROACH})") + message(STATUS "Arrow SO and ABI version: ${ARROW_SO_VERSION}") + message(STATUS "Arrow full SO version: ${ARROW_FULL_SO_VERSION}") + message(STATUS "Found the Arrow core shared library: ${ARROW_SHARED_LIB}") + message(STATUS "Found the Arrow core import library: ${ARROW_IMPORT_LIB}") + message(STATUS "Found the Arrow core static library: ${ARROW_STATIC_LIB}") +endif() diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index 625fc0d6e2..ac3eb672e2 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -50,9 +50,14 @@ endmacro() macro(resolve_dependency DEPENDENCY_NAME) if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO") - #message(STATUS "Finding ${DEPENDENCY_NAME} package") - #message(STATUS "${DEPENDENCY_NAME} package not found") - build_dependency(${DEPENDENCY_NAME}) + if (${DEPENDENCY_NAME} STREQUAL "ARROW") + find_package(${DEPENDENCY_NAME} MODULE) + if (NOT ${${DEPENDENCY_NAME}_FOUND}) + build_dependency(${DEPENDENCY_NAME}) + endif () + else() + build_dependency(${DEPENDENCY_NAME}) + endif() elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "BUNDLED") build_dependency(${DEPENDENCY_NAME}) elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "SYSTEM") @@ -131,17 +136,6 @@ if (USE_JFROG_CACHE STREQUAL "ON") endif () endif () -macro(resolve_dependency DEPENDENCY_NAME) - if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO") - #disable find_package for now - build_dependency(${DEPENDENCY_NAME}) - elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "BUNDLED") - build_dependency(${DEPENDENCY_NAME}) - elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "SYSTEM") - find_package(${DEPENDENCY_NAME} REQUIRED) - endif () -endmacro() - # ---------------------------------------------------------------------- # ExternalProject options @@ -412,7 +406,7 @@ if (KNOWHERE_WITH_ARROW AND NOT TARGET arrow_ep) resolve_dependency(ARROW) - link_directories(SYSTEM ${ARROW_PREFIX}/lib/) + link_directories(SYSTEM ${ARROW_LIBRARY_DIRS}) include_directories(SYSTEM ${ARROW_INCLUDE_DIR}) endif () From 8ba423db030d47ea4f5d25925dffc18cdc366ccd Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 16:55:02 +0800 Subject: [PATCH 20/37] update Index ThirdPartyPackagesCore.cmake --- core/src/index/cmake/ThirdPartyPackagesCore.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index ac3eb672e2..e23d101128 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -51,7 +51,7 @@ endmacro() macro(resolve_dependency DEPENDENCY_NAME) if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO") if (${DEPENDENCY_NAME} STREQUAL "ARROW") - find_package(${DEPENDENCY_NAME} MODULE) + find_package(Arrow MODULE) if (NOT ${${DEPENDENCY_NAME}_FOUND}) build_dependency(${DEPENDENCY_NAME}) endif () From e29cf5a0fe158394ebfb6376ed0a6fb9b98e90f0 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 17:00:29 +0800 Subject: [PATCH 21/37] Install libarrow-dev on System --- ci/scripts/build.sh | 1 + ci/travis/install_dependency.sh | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh index 253ee5893d..118d6a4785 100755 --- a/ci/scripts/build.sh +++ b/ci/scripts/build.sh @@ -89,6 +89,7 @@ CMAKE_CMD="cmake \ -DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ -DBUILD_COVERAGE=${BUILD_COVERAGE} \ -DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ +-DARROW_SOURCE=AUTO \ ${MILVUS_CORE_DIR}" echo ${CMAKE_CMD} ${CMAKE_CMD} diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index 54e2f41ab5..627da9e38a 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -9,6 +9,13 @@ sudo apt-key add /tmp/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB echo "deb https://apt.repos.intel.com/mkl all main" | \ sudo tee /etc/apt/sources.list.d/intel-mkl.list +sudo wget -O /usr/share/keyrings/apache-arrow-keyring.gpg https://dl.bintray.com/apache/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-keyring.gpg + +sudo tee /etc/apt/sources.list.d/apache-arrow.list < Date: Mon, 11 Nov 2019 17:26:05 +0800 Subject: [PATCH 22/37] fix link arrow library path --- core/src/index/knowhere/CMakeLists.txt | 2 +- core/src/index/unittest/CMakeLists.txt | 2 +- core/src/index/unittest/faiss_benchmark/CMakeLists.txt | 2 +- core/src/index/unittest/faiss_ori/CMakeLists.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/index/knowhere/CMakeLists.txt b/core/src/index/knowhere/CMakeLists.txt index 11c79e5466..373965acf0 100644 --- a/core/src/index/knowhere/CMakeLists.txt +++ b/core/src/index/knowhere/CMakeLists.txt @@ -49,7 +49,7 @@ set(depend_libs SPTAGLibStatic faiss arrow - ${ARROW_PREFIX}/lib/libjemalloc_pic.a + ${ARROW_LIB_DIR}/libjemalloc_pic.a gomp gfortran pthread diff --git a/core/src/index/unittest/CMakeLists.txt b/core/src/index/unittest/CMakeLists.txt index 145278a636..13277aa40e 100644 --- a/core/src/index/unittest/CMakeLists.txt +++ b/core/src/index/unittest/CMakeLists.txt @@ -6,7 +6,7 @@ include_directories(${INDEX_SOURCE_DIR}) set(depend_libs gtest gmock gtest_main gmock_main faiss - arrow "${ARROW_PREFIX}/lib/libjemalloc_pic.a" + arrow "${ARROW_LIB_DIR}/libjemalloc_pic.a" ) if (BUILD_FAISS_WITH_MKL) set(depend_libs ${depend_libs} diff --git a/core/src/index/unittest/faiss_benchmark/CMakeLists.txt b/core/src/index/unittest/faiss_benchmark/CMakeLists.txt index 72eb7e7a7e..6cad5abda5 100644 --- a/core/src/index/unittest/faiss_benchmark/CMakeLists.txt +++ b/core/src/index/unittest/faiss_benchmark/CMakeLists.txt @@ -13,7 +13,7 @@ if (KNOWHERE_GPU_VERSION) set(depend_libs faiss hdf5 - arrow ${ARROW_PREFIX}/lib/libjemalloc_pic.a + arrow ${ARROW_LIB_DIR}/libjemalloc_pic.a ) if (BUILD_FAISS_WITH_MKL) set(depend_libs ${depend_libs} diff --git a/core/src/index/unittest/faiss_ori/CMakeLists.txt b/core/src/index/unittest/faiss_ori/CMakeLists.txt index 8216764ab7..829a27fd87 100644 --- a/core/src/index/unittest/faiss_ori/CMakeLists.txt +++ b/core/src/index/unittest/faiss_ori/CMakeLists.txt @@ -8,7 +8,7 @@ if (KNOWHERE_GPU_VERSION) set(depend_libs faiss - arrow ${ARROW_PREFIX}/lib/libjemalloc_pic.a + arrow ${ARROW_LIB_DIR}/libjemalloc_pic.a ) if (BUILD_FAISS_WITH_MKL) set(depend_libs ${depend_libs} From 77dd0ad9af7051be82ee83b6fdf39eaef5e97c9f Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 17:39:01 +0800 Subject: [PATCH 23/37] update ci/travis/install_dependency.sh --- ci/travis/install_dependency.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index 627da9e38a..a2424727f8 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -28,6 +28,7 @@ sudo apt-get install -y -q --no-install-recommends \ ccache \ pkg-config \ libarrow-dev \ + libjemalloc-dev \ libboost-filesystem-dev \ libboost-system-dev \ libboost-regex-dev \ From 439456f8cddb952825c8736c6daec57e3918680e Mon Sep 17 00:00:00 2001 From: quicksilver Date: Mon, 11 Nov 2019 19:48:29 +0800 Subject: [PATCH 24/37] add build with mkl option in build.sh --- ci/scripts/build.sh | 10 ++++++++-- ci/travis/travis_build.sh | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh index 118d6a4785..d077325fa8 100755 --- a/ci/scripts/build.sh +++ b/ci/scripts/build.sh @@ -19,9 +19,10 @@ BUILD_COVERAGE="OFF" USE_JFROG_CACHE="OFF" RUN_CPPLINT="OFF" CPU_VERSION="ON" +WITH_MKL="OFF" CUDA_COMPILER=/usr/local/cuda/bin/nvcc -while getopts "o:t:b:gulcjh" arg +while getopts "o:t:b:gulcjmh" arg do case $arg in o) @@ -49,6 +50,9 @@ do j) USE_JFROG_CACHE="ON" ;; + m) + WITH_MKL="ON" + ;; h) # help echo " @@ -61,10 +65,11 @@ parameter: -l: run cpplint, clang-format and clang-tidy(default: OFF) -c: code coverage(default: OFF) -j: use jfrog cache build directory(default: OFF) +-m: build with MKL(default: OFF) -h: help usage: -./build.sh -o \${INSTALL_PREFIX} -t \${BUILD_TYPE} -b \${CORE_BUILD_DIR} [-u] [-l] [-c] [-j] [-h] +./build.sh -o \${INSTALL_PREFIX} -t \${BUILD_TYPE} -b \${CORE_BUILD_DIR} [-u] [-l] [-c] [-j] [-m] [-h] " exit 0 ;; @@ -89,6 +94,7 @@ CMAKE_CMD="cmake \ -DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ -DBUILD_COVERAGE=${BUILD_COVERAGE} \ -DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ +-DBUILD_FAISS_WITH_MKL=${WITH_MKL} \ -DARROW_SOURCE=AUTO \ ${MILVUS_CORE_DIR}" echo ${CMAKE_CMD} diff --git a/ci/travis/travis_build.sh b/ci/travis/travis_build.sh index 3cde1d5a4d..3f49750b6d 100755 --- a/ci/travis/travis_build.sh +++ b/ci/travis/travis_build.sh @@ -18,7 +18,7 @@ done BUILD_COMMON_FLAGS="-t ${MILVUS_BUILD_TYPE} -o ${MILVUS_INSTALL_PREFIX} -b ${MILVUS_BUILD_DIR}" if [ $only_library_mode == "yes" ]; then - ${TRAVIS_BUILD_DIR}/ci/scripts/build.sh ${BUILD_COMMON_FLAGS} + ${TRAVIS_BUILD_DIR}/ci/scripts/build.sh ${BUILD_COMMON_FLAGS} -m else - ${TRAVIS_BUILD_DIR}/ci/scripts/build.sh ${BUILD_COMMON_FLAGS} -u -c + ${TRAVIS_BUILD_DIR}/ci/scripts/build.sh ${BUILD_COMMON_FLAGS} -m -u -c fi \ No newline at end of file From 89f094f7cb00000f46d0ef6ce1df55e5479badb1 Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Mon, 11 Nov 2019 21:35:45 +0800 Subject: [PATCH 25/37] fix mkl library path error --- core/src/index/cmake/ThirdPartyPackagesCore.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index e23d101128..8840db7621 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -716,6 +716,7 @@ macro(build_faiss) find_path(MKL_LIB_PATH NAMES "libmkl_intel_ilp64.a" "libmkl_gnu_thread.a" "libmkl_core.a" + PATHS /opt PATH_SUFFIXES "intel/compilers_and_libraries_${MKL_VERSION}/linux/mkl/lib/intel64/") if (${MKL_LIB_PATH} STREQUAL "MKL_LIB_PATH-NOTFOUND") message(FATAL_ERROR "Could not find MKL libraries") From af68a2f4d3b7e98ed45353b057d208704a16f1bf Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Mon, 11 Nov 2019 21:58:22 +0800 Subject: [PATCH 26/37] fix mkl library path error --- ci/travis/install_dependency.sh | 6 +++--- core/src/index/cmake/ThirdPartyPackagesCore.cmake | 3 +-- core/src/index/thirdparty/versions.txt | 3 ++- core/thirdparty/versions.txt | 1 - 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index a2424727f8..6120fccda9 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -32,8 +32,8 @@ sudo apt-get install -y -q --no-install-recommends \ libboost-filesystem-dev \ libboost-system-dev \ libboost-regex-dev \ - intel-mkl-gnu-2019.4-243 \ - intel-mkl-core-2019.4-243 \ + intel-mkl-gnu-2019.5-281 \ + intel-mkl-core-2019.5-281 \ libmysqlclient-dev \ clang-format-6.0 \ clang-tidy-6.0 \ @@ -42,4 +42,4 @@ sudo apt-get install -y -q --no-install-recommends \ sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so \ /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so -export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/lib/intel64 +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/intel/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64 diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index 8840db7621..3173a37d34 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -714,9 +714,8 @@ macro(build_faiss) if (BUILD_FAISS_WITH_MKL) - find_path(MKL_LIB_PATH + find_library(MKL_LIB_PATH NAMES "libmkl_intel_ilp64.a" "libmkl_gnu_thread.a" "libmkl_core.a" - PATHS /opt PATH_SUFFIXES "intel/compilers_and_libraries_${MKL_VERSION}/linux/mkl/lib/intel64/") if (${MKL_LIB_PATH} STREQUAL "MKL_LIB_PATH-NOTFOUND") message(FATAL_ERROR "Could not find MKL libraries") diff --git a/core/src/index/thirdparty/versions.txt b/core/src/index/thirdparty/versions.txt index a2b16414c2..f328ec437a 100644 --- a/core/src/index/thirdparty/versions.txt +++ b/core/src/index/thirdparty/versions.txt @@ -3,4 +3,5 @@ BOOST_VERSION=1.70.0 GTEST_VERSION=1.8.1 LAPACK_VERSION=v3.8.0 OPENBLAS_VERSION=v0.3.6 -FAISS_VERSION=branch-0.3.0 \ No newline at end of file +FAISS_VERSION=branch-0.3.0 +MKL_VERSION=2019.5.281 diff --git a/core/thirdparty/versions.txt b/core/thirdparty/versions.txt index 68023d4072..4faaf119e4 100644 --- a/core/thirdparty/versions.txt +++ b/core/thirdparty/versions.txt @@ -9,6 +9,5 @@ LIBUNWIND_VERSION=1.3.1 GPERFTOOLS_VERSION=2.7 GRPC_VERSION=master ZLIB_VERSION=v1.2.11 -MKL_VERSION=2019.5.281 # vim: set filetype=sh: From ce0d32fb53f8bfb0391fa682d31b73459c68842d Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Mon, 11 Nov 2019 22:38:41 +0800 Subject: [PATCH 27/37] fix mkl library path error --- core/src/index/cmake/ThirdPartyPackagesCore.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index 3173a37d34..e23d101128 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -714,7 +714,7 @@ macro(build_faiss) if (BUILD_FAISS_WITH_MKL) - find_library(MKL_LIB_PATH + find_path(MKL_LIB_PATH NAMES "libmkl_intel_ilp64.a" "libmkl_gnu_thread.a" "libmkl_core.a" PATH_SUFFIXES "intel/compilers_and_libraries_${MKL_VERSION}/linux/mkl/lib/intel64/") if (${MKL_LIB_PATH} STREQUAL "MKL_LIB_PATH-NOTFOUND") From f8e66f12a9f4246ee59b2a6e273d8f116760f83d Mon Sep 17 00:00:00 2001 From: quicksilver Date: Tue, 12 Nov 2019 11:12:03 +0800 Subject: [PATCH 28/37] add FindGTest.cmake --- ci/scripts/build.sh | 3 +- ci/travis/install_dependency.sh | 1 + core/cmake/DefineOptions.cmake | 2 +- core/cmake/FindGTest.cmake | 278 ++++++++++++++++++ core/cmake/ThirdPartyPackages.cmake | 6 +- core/src/index/cmake/DefineOptionsCore.cmake | 2 +- core/src/index/cmake/FindGTest.cmake | 278 ++++++++++++++++++ .../index/cmake/ThirdPartyPackagesCore.cmake | 14 +- 8 files changed, 570 insertions(+), 14 deletions(-) create mode 100644 core/cmake/FindGTest.cmake create mode 100644 core/src/index/cmake/FindGTest.cmake diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh index d077325fa8..0875ac1dd1 100755 --- a/ci/scripts/build.sh +++ b/ci/scripts/build.sh @@ -95,7 +95,8 @@ CMAKE_CMD="cmake \ -DBUILD_COVERAGE=${BUILD_COVERAGE} \ -DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ -DBUILD_FAISS_WITH_MKL=${WITH_MKL} \ --DARROW_SOURCE=AUTO \ +-DArrow_SOURCE=AUTO \ +-DGTest_SOURCE=AUTO \ ${MILVUS_CORE_DIR}" echo ${CMAKE_CMD} ${CMAKE_CMD} diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index 6120fccda9..694d78b8f7 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -27,6 +27,7 @@ sudo apt-get install -y -q --no-install-recommends \ automake \ ccache \ pkg-config \ + libgtest-dev \ libarrow-dev \ libjemalloc-dev \ libboost-filesystem-dev \ diff --git a/core/cmake/DefineOptions.cmake b/core/cmake/DefineOptions.cmake index 0050de75eb..4f4c8b17b5 100644 --- a/core/cmake/DefineOptions.cmake +++ b/core/cmake/DefineOptions.cmake @@ -48,7 +48,7 @@ define_option(MILVUS_GPU_VERSION "Build GPU version" OFF) #---------------------------------------------------------------------- set_option_category("Thirdparty") -set(MILVUS_DEPENDENCY_SOURCE_DEFAULT "AUTO") +set(MILVUS_DEPENDENCY_SOURCE_DEFAULT "BUNDLED") define_option_string(MILVUS_DEPENDENCY_SOURCE "Method to use for acquiring MILVUS's build dependencies" diff --git a/core/cmake/FindGTest.cmake b/core/cmake/FindGTest.cmake new file mode 100644 index 0000000000..d746e40b05 --- /dev/null +++ b/core/cmake/FindGTest.cmake @@ -0,0 +1,278 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Originally imported from the CMake project at commit +# df4ed1e9ffcdb6b99ccff9e6f44808fdd2abda56 with the following license header: +# +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + + +#[=======================================================================[.rst: +FindGTest +--------- + +Locate the Google C++ Testing Framework. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``GTest::GTest`` + The Google Test ``gtest`` library, if found; adds Thread::Thread + automatically +``GTest::Main`` + The Google Test ``gtest_main`` library, if found +``GMock::GMock`` + The Google Mock ``gmock`` library, if found + + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``GTEST_FOUND`` + Found the Google Testing framework +``GTEST_INCLUDE_DIRS`` + the directory containing the Google Test headers + +The library variables below are set as normal variables. These +contain debug/optimized keywords when a debugging library is found. + +``GTEST_LIBRARIES`` + The Google Test ``gtest`` library; note it also requires linking + with an appropriate thread library +``GTEST_MAIN_LIBRARIES`` + The Google Test ``gtest_main`` library +``GTEST_BOTH_LIBRARIES`` + Both ``gtest`` and ``gtest_main`` + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``GTEST_ROOT`` + The root directory of the Google Test installation (may also be + set as an environment variable) +``GTEST_MSVC_SEARCH`` + If compiling with MSVC, this variable can be set to ``MT`` or + ``MD`` (the default) to enable searching a GTest build tree + + +Example usage +^^^^^^^^^^^^^ + +:: + + enable_testing() + find_package(GTest REQUIRED) + + add_executable(foo foo.cc) + target_link_libraries(foo GTest::GTest GTest::Main) + + add_test(AllTestsInFoo foo) + + +Deeper integration with CTest +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +See :module:`GoogleTest` for information on the :command:`gtest_add_tests` +and :command:`gtest_discover_tests` commands. +#]=======================================================================] + +# include(${CMAKE_CURRENT_LIST_DIR}/GoogleTest.cmake) + +function(__gtest_append_debugs _endvar _library) + if(${_library} AND ${_library}_DEBUG) + set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) + else() + set(_output ${${_library}}) + endif() + set(${_endvar} ${_output} PARENT_SCOPE) +endfunction() + +function(__gtest_find_library _name) + find_library(${_name} + NAMES ${ARGN} + HINTS + ENV GTEST_ROOT + ${GTEST_ROOT} + PATH_SUFFIXES ${_gtest_libpath_suffixes} + ) + mark_as_advanced(${_name}) +endfunction() + +macro(__gtest_determine_windows_library_type _var) + if(EXISTS "${${_var}}") + file(TO_NATIVE_PATH "${${_var}}" _lib_path) + get_filename_component(_name "${${_var}}" NAME_WE) + file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1) + if(NOT _match STREQUAL "") + set(${_var}_TYPE SHARED PARENT_SCOPE) + else() + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) + endif() + return() + endif() +endmacro() + +function(__gtest_determine_library_type _var) + if(WIN32) + # For now, at least, only Windows really needs to know the library type + __gtest_determine_windows_library_type(${_var}) + __gtest_determine_windows_library_type(${_var}_RELEASE) + __gtest_determine_windows_library_type(${_var}_DEBUG) + endif() + # If we get here, no determination was made from the above checks + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) +endfunction() + +function(__gtest_import_library _target _var _config) + if(_config) + set(_config_suffix "_${_config}") + else() + set(_config_suffix "") + endif() + + set(_lib "${${_var}${_config_suffix}}") + if(EXISTS "${_lib}") + if(_config) + set_property(TARGET ${_target} APPEND PROPERTY + IMPORTED_CONFIGURATIONS ${_config}) + endif() + set_target_properties(${_target} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX") + if(WIN32 AND ${_var}_TYPE STREQUAL SHARED) + set_target_properties(${_target} PROPERTIES + IMPORTED_IMPLIB${_config_suffix} "${_lib}") + else() + set_target_properties(${_target} PROPERTIES + IMPORTED_LOCATION${_config_suffix} "${_lib}") + endif() + endif() +endfunction() + +# + +if(NOT DEFINED GTEST_MSVC_SEARCH) + set(GTEST_MSVC_SEARCH MD) +endif() + +set(_gtest_libpath_suffixes lib) +if(MSVC) + if(GTEST_MSVC_SEARCH STREQUAL "MD") + list(APPEND _gtest_libpath_suffixes + msvc/gtest-md/Debug + msvc/gtest-md/Release + msvc/x64/Debug + msvc/x64/Release + ) + elseif(GTEST_MSVC_SEARCH STREQUAL "MT") + list(APPEND _gtest_libpath_suffixes + msvc/gtest/Debug + msvc/gtest/Release + msvc/x64/Debug + msvc/x64/Release + ) + endif() +endif() + + +find_path(GTEST_INCLUDE_DIR gtest/gtest.h + HINTS + $ENV{GTEST_ROOT}/include + ${GTEST_ROOT}/include + PATH_SUFFIXES ${LIB_PATH_SUFFIXES} +) +mark_as_advanced(GTEST_INCLUDE_DIR) + +if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") + # The provided /MD project files for Google Test add -md suffixes to the + # library names. + __gtest_find_library(GTEST_LIBRARY gtest-md gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) + __gtest_find_library(GMOCK_LIBRARY gmock-md gmock) + __gtest_find_library(GMOCK_LIBRARY_DEBUG gmock-mdd gmockd) +else() + __gtest_find_library(GTEST_LIBRARY gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) + __gtest_find_library(GMOCK_LIBRARY gmock) + __gtest_find_library(GMOCK_LIBRARY_DEBUG gtestd) +endif() + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY GMOCK_LIBRARY) + +if(GTEST_FOUND) + set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) + __gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) + __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) + __gtest_append_debugs(GMOCK_LIBRARIES GMOCK_LIBRARY) + set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) + + find_package(Threads QUIET) + + if(NOT TARGET GTest::GTest) + __gtest_determine_library_type(GTEST_LIBRARY) + add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GTEST_INCLUDE_DIRS) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") + endif() + __gtest_import_library(GTest::GTest GTEST_LIBRARY "") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG") + endif() + if(NOT TARGET GTest::Main) + __gtest_determine_library_type(GTEST_MAIN_LIBRARY) + add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(GTest::Main PROPERTIES + INTERFACE_LINK_LIBRARIES "GTest::GTest") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG") + endif() + if(NOT TARGET GTest::GMock) + __gtest_determine_library_type(GMOCK_LIBRARY) + add_library(GTest::GMock ${GMOCK_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GTest::GMock PROPERTIES + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GTest::GMock PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GTEST_INCLUDE_DIRS) + set_target_properties(GTest::GMock PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") + endif() + __gtest_import_library(GTest::GMock GMOCK_LIBRARY "") + __gtest_import_library(GTest::GMock GMOCK_LIBRARY "RELEASE") + __gtest_import_library(GTest::GMock GMOCK_LIBRARY "DEBUG") + endif() +endif() diff --git a/core/cmake/ThirdPartyPackages.cmake b/core/cmake/ThirdPartyPackages.cmake index 657efa2eef..2092879b17 100644 --- a/core/cmake/ThirdPartyPackages.cmake +++ b/core/cmake/ThirdPartyPackages.cmake @@ -164,8 +164,10 @@ endif () macro(resolve_dependency DEPENDENCY_NAME) if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO") - #disable find_package for now - build_dependency(${DEPENDENCY_NAME}) + find_package(${DEPENDENCY_NAME} MODULE) + if(NOT ${${DEPENDENCY_NAME}_FOUND}) + build_dependency(${DEPENDENCY_NAME}) + endif() elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "BUNDLED") build_dependency(${DEPENDENCY_NAME}) elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "SYSTEM") diff --git a/core/src/index/cmake/DefineOptionsCore.cmake b/core/src/index/cmake/DefineOptionsCore.cmake index e49b3a779a..2f050cdf4e 100644 --- a/core/src/index/cmake/DefineOptionsCore.cmake +++ b/core/src/index/cmake/DefineOptionsCore.cmake @@ -52,7 +52,7 @@ endif () #---------------------------------------------------------------------- set_option_category("Thirdparty") -set(KNOWHERE_DEPENDENCY_SOURCE_DEFAULT "AUTO") +set(KNOWHERE_DEPENDENCY_SOURCE_DEFAULT "BUNDLED") define_option_string(KNOWHERE_DEPENDENCY_SOURCE "Method to use for acquiring KNOWHERE's build dependencies" diff --git a/core/src/index/cmake/FindGTest.cmake b/core/src/index/cmake/FindGTest.cmake new file mode 100644 index 0000000000..d746e40b05 --- /dev/null +++ b/core/src/index/cmake/FindGTest.cmake @@ -0,0 +1,278 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Originally imported from the CMake project at commit +# df4ed1e9ffcdb6b99ccff9e6f44808fdd2abda56 with the following license header: +# +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + + +#[=======================================================================[.rst: +FindGTest +--------- + +Locate the Google C++ Testing Framework. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``GTest::GTest`` + The Google Test ``gtest`` library, if found; adds Thread::Thread + automatically +``GTest::Main`` + The Google Test ``gtest_main`` library, if found +``GMock::GMock`` + The Google Mock ``gmock`` library, if found + + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``GTEST_FOUND`` + Found the Google Testing framework +``GTEST_INCLUDE_DIRS`` + the directory containing the Google Test headers + +The library variables below are set as normal variables. These +contain debug/optimized keywords when a debugging library is found. + +``GTEST_LIBRARIES`` + The Google Test ``gtest`` library; note it also requires linking + with an appropriate thread library +``GTEST_MAIN_LIBRARIES`` + The Google Test ``gtest_main`` library +``GTEST_BOTH_LIBRARIES`` + Both ``gtest`` and ``gtest_main`` + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``GTEST_ROOT`` + The root directory of the Google Test installation (may also be + set as an environment variable) +``GTEST_MSVC_SEARCH`` + If compiling with MSVC, this variable can be set to ``MT`` or + ``MD`` (the default) to enable searching a GTest build tree + + +Example usage +^^^^^^^^^^^^^ + +:: + + enable_testing() + find_package(GTest REQUIRED) + + add_executable(foo foo.cc) + target_link_libraries(foo GTest::GTest GTest::Main) + + add_test(AllTestsInFoo foo) + + +Deeper integration with CTest +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +See :module:`GoogleTest` for information on the :command:`gtest_add_tests` +and :command:`gtest_discover_tests` commands. +#]=======================================================================] + +# include(${CMAKE_CURRENT_LIST_DIR}/GoogleTest.cmake) + +function(__gtest_append_debugs _endvar _library) + if(${_library} AND ${_library}_DEBUG) + set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) + else() + set(_output ${${_library}}) + endif() + set(${_endvar} ${_output} PARENT_SCOPE) +endfunction() + +function(__gtest_find_library _name) + find_library(${_name} + NAMES ${ARGN} + HINTS + ENV GTEST_ROOT + ${GTEST_ROOT} + PATH_SUFFIXES ${_gtest_libpath_suffixes} + ) + mark_as_advanced(${_name}) +endfunction() + +macro(__gtest_determine_windows_library_type _var) + if(EXISTS "${${_var}}") + file(TO_NATIVE_PATH "${${_var}}" _lib_path) + get_filename_component(_name "${${_var}}" NAME_WE) + file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1) + if(NOT _match STREQUAL "") + set(${_var}_TYPE SHARED PARENT_SCOPE) + else() + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) + endif() + return() + endif() +endmacro() + +function(__gtest_determine_library_type _var) + if(WIN32) + # For now, at least, only Windows really needs to know the library type + __gtest_determine_windows_library_type(${_var}) + __gtest_determine_windows_library_type(${_var}_RELEASE) + __gtest_determine_windows_library_type(${_var}_DEBUG) + endif() + # If we get here, no determination was made from the above checks + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) +endfunction() + +function(__gtest_import_library _target _var _config) + if(_config) + set(_config_suffix "_${_config}") + else() + set(_config_suffix "") + endif() + + set(_lib "${${_var}${_config_suffix}}") + if(EXISTS "${_lib}") + if(_config) + set_property(TARGET ${_target} APPEND PROPERTY + IMPORTED_CONFIGURATIONS ${_config}) + endif() + set_target_properties(${_target} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX") + if(WIN32 AND ${_var}_TYPE STREQUAL SHARED) + set_target_properties(${_target} PROPERTIES + IMPORTED_IMPLIB${_config_suffix} "${_lib}") + else() + set_target_properties(${_target} PROPERTIES + IMPORTED_LOCATION${_config_suffix} "${_lib}") + endif() + endif() +endfunction() + +# + +if(NOT DEFINED GTEST_MSVC_SEARCH) + set(GTEST_MSVC_SEARCH MD) +endif() + +set(_gtest_libpath_suffixes lib) +if(MSVC) + if(GTEST_MSVC_SEARCH STREQUAL "MD") + list(APPEND _gtest_libpath_suffixes + msvc/gtest-md/Debug + msvc/gtest-md/Release + msvc/x64/Debug + msvc/x64/Release + ) + elseif(GTEST_MSVC_SEARCH STREQUAL "MT") + list(APPEND _gtest_libpath_suffixes + msvc/gtest/Debug + msvc/gtest/Release + msvc/x64/Debug + msvc/x64/Release + ) + endif() +endif() + + +find_path(GTEST_INCLUDE_DIR gtest/gtest.h + HINTS + $ENV{GTEST_ROOT}/include + ${GTEST_ROOT}/include + PATH_SUFFIXES ${LIB_PATH_SUFFIXES} +) +mark_as_advanced(GTEST_INCLUDE_DIR) + +if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") + # The provided /MD project files for Google Test add -md suffixes to the + # library names. + __gtest_find_library(GTEST_LIBRARY gtest-md gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) + __gtest_find_library(GMOCK_LIBRARY gmock-md gmock) + __gtest_find_library(GMOCK_LIBRARY_DEBUG gmock-mdd gmockd) +else() + __gtest_find_library(GTEST_LIBRARY gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) + __gtest_find_library(GMOCK_LIBRARY gmock) + __gtest_find_library(GMOCK_LIBRARY_DEBUG gtestd) +endif() + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY GMOCK_LIBRARY) + +if(GTEST_FOUND) + set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) + __gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) + __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) + __gtest_append_debugs(GMOCK_LIBRARIES GMOCK_LIBRARY) + set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) + + find_package(Threads QUIET) + + if(NOT TARGET GTest::GTest) + __gtest_determine_library_type(GTEST_LIBRARY) + add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GTEST_INCLUDE_DIRS) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") + endif() + __gtest_import_library(GTest::GTest GTEST_LIBRARY "") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG") + endif() + if(NOT TARGET GTest::Main) + __gtest_determine_library_type(GTEST_MAIN_LIBRARY) + add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(GTest::Main PROPERTIES + INTERFACE_LINK_LIBRARIES "GTest::GTest") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG") + endif() + if(NOT TARGET GTest::GMock) + __gtest_determine_library_type(GMOCK_LIBRARY) + add_library(GTest::GMock ${GMOCK_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GTest::GMock PROPERTIES + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GTest::GMock PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GTEST_INCLUDE_DIRS) + set_target_properties(GTest::GMock PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") + endif() + __gtest_import_library(GTest::GMock GMOCK_LIBRARY "") + __gtest_import_library(GTest::GMock GMOCK_LIBRARY "RELEASE") + __gtest_import_library(GTest::GMock GMOCK_LIBRARY "DEBUG") + endif() +endif() diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index e23d101128..65615e885e 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -16,7 +16,7 @@ set(KNOWHERE_THIRDPARTY_DEPENDENCIES - ARROW + Arrow FAISS GTest LAPACK @@ -33,7 +33,7 @@ foreach (DEPENDENCY ${KNOWHERE_THIRDPARTY_DEPENDENCIES}) endforeach () macro(build_dependency DEPENDENCY_NAME) - if ("${DEPENDENCY_NAME}" STREQUAL "ARROW") + if ("${DEPENDENCY_NAME}" STREQUAL "Arrow") build_arrow() elseif ("${DEPENDENCY_NAME}" STREQUAL "LAPACK") build_lapack() @@ -50,13 +50,9 @@ endmacro() macro(resolve_dependency DEPENDENCY_NAME) if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO") - if (${DEPENDENCY_NAME} STREQUAL "ARROW") - find_package(Arrow MODULE) - if (NOT ${${DEPENDENCY_NAME}_FOUND}) - build_dependency(${DEPENDENCY_NAME}) - endif () - else() - build_dependency(${DEPENDENCY_NAME}) + find_package(${DEPENDENCY_NAME} MODULE) + if(NOT ${${DEPENDENCY_NAME}_FOUND}) + build_dependency(${DEPENDENCY_NAME}) endif() elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "BUNDLED") build_dependency(${DEPENDENCY_NAME}) From 583ec7a2b2012c5c8f3fb20dd4712bc9cab5310c Mon Sep 17 00:00:00 2001 From: quicksilver Date: Tue, 12 Nov 2019 11:34:21 +0800 Subject: [PATCH 29/37] format ARROW_LIB_DIR --- core/src/index/cmake/ThirdPartyPackagesCore.cmake | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index 65615e885e..2fcc7d1001 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -286,6 +286,7 @@ macro(build_arrow) set(ARROW_STATIC_LIB "${ARROW_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${ARROW_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}" ) + set(ARROW_LIB_DIR "${ARROW_PREFIX}/lib") set(ARROW_INCLUDE_DIR "${ARROW_PREFIX}/include") set(ARROW_CMAKE_ARGS @@ -382,7 +383,7 @@ macro(build_arrow) ) endif () - file(MAKE_DIRECTORY "${ARROW_PREFIX}/include") + file(MAKE_DIRECTORY "${ARROW_INCLUDE_DIR}") add_library(arrow STATIC IMPORTED) set_target_properties(arrow PROPERTIES IMPORTED_LOCATION "${ARROW_STATIC_LIB}" @@ -392,8 +393,8 @@ macro(build_arrow) set(JEMALLOC_PREFIX "${INDEX_BINARY_DIR}/arrow_ep-prefix/src/arrow_ep-build/jemalloc_ep-prefix/src/jemalloc_ep") add_custom_command(TARGET arrow_ep POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${ARROW_PREFIX}/lib/ - COMMAND ${CMAKE_COMMAND} -E copy ${JEMALLOC_PREFIX}/lib/libjemalloc_pic.a ${ARROW_PREFIX}/lib/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${ARROW_LIB_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${JEMALLOC_PREFIX}/lib/libjemalloc_pic.a ${ARROW_LIB_DIR} DEPENDS ${JEMALLOC_PREFIX}/lib/libjemalloc_pic.a) endmacro() @@ -402,7 +403,7 @@ if (KNOWHERE_WITH_ARROW AND NOT TARGET arrow_ep) resolve_dependency(ARROW) - link_directories(SYSTEM ${ARROW_LIBRARY_DIRS}) + link_directories(SYSTEM ${ARROW_LIB_DIR}) include_directories(SYSTEM ${ARROW_INCLUDE_DIR}) endif () From d6fe3c468fe763dc18d2808b186e010c55ed75e2 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Tue, 12 Nov 2019 11:56:42 +0800 Subject: [PATCH 30/37] fix bug --- core/src/index/cmake/ThirdPartyPackagesCore.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/index/cmake/ThirdPartyPackagesCore.cmake b/core/src/index/cmake/ThirdPartyPackagesCore.cmake index 2fcc7d1001..60ac4b9eac 100644 --- a/core/src/index/cmake/ThirdPartyPackagesCore.cmake +++ b/core/src/index/cmake/ThirdPartyPackagesCore.cmake @@ -401,7 +401,7 @@ endmacro() if (KNOWHERE_WITH_ARROW AND NOT TARGET arrow_ep) - resolve_dependency(ARROW) + resolve_dependency(Arrow) link_directories(SYSTEM ${ARROW_LIB_DIR}) include_directories(SYSTEM ${ARROW_INCLUDE_DIR}) From 1a02484b21717cac956ea43822a9fd944f95ec17 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Tue, 12 Nov 2019 14:45:29 +0800 Subject: [PATCH 31/37] update arrow version to 0.15.1 --- core/src/index/thirdparty/versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/index/thirdparty/versions.txt b/core/src/index/thirdparty/versions.txt index f328ec437a..380c9dedad 100644 --- a/core/src/index/thirdparty/versions.txt +++ b/core/src/index/thirdparty/versions.txt @@ -1,4 +1,4 @@ -ARROW_VERSION=apache-arrow-0.14.0 +ARROW_VERSION=apache-arrow-0.15.1 BOOST_VERSION=1.70.0 GTEST_VERSION=1.8.1 LAPACK_VERSION=v3.8.0 From d82826965881cab66f1d75429f90a676d5911454 Mon Sep 17 00:00:00 2001 From: quicksilver Date: Tue, 12 Nov 2019 14:49:49 +0800 Subject: [PATCH 32/37] update travis install_dependency.sh --- ci/travis/install_dependency.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index 694d78b8f7..5b4a5e1482 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -19,8 +19,6 @@ APT_LINE sudo apt-get update -qq sudo apt-get install -y -q --no-install-recommends \ - flex \ - bison \ gfortran \ lsb-core \ libtool \ From 4d6f69927a5b575bf80321092b00f97fd84206f9 Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Tue, 12 Nov 2019 15:38:32 +0800 Subject: [PATCH 33/37] update travis install_dependency.sh --- ci/travis/install_dependency.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index 5b4a5e1482..a1bff278a0 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -28,6 +28,7 @@ sudo apt-get install -y -q --no-install-recommends \ libgtest-dev \ libarrow-dev \ libjemalloc-dev \ + libboost_serialization-dev \ libboost-filesystem-dev \ libboost-system-dev \ libboost-regex-dev \ From ff406d0300c23bf6f70b42b4b6ecd723d576c2b6 Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Tue, 12 Nov 2019 16:45:27 +0800 Subject: [PATCH 34/37] update travis install_dependency.sh --- ci/travis/install_dependency.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index a1bff278a0..95d7a698db 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -28,7 +28,7 @@ sudo apt-get install -y -q --no-install-recommends \ libgtest-dev \ libarrow-dev \ libjemalloc-dev \ - libboost_serialization-dev \ + libboost-serialization-dev \ libboost-filesystem-dev \ libboost-system-dev \ libboost-regex-dev \ From 636313622c3186b195129d8aeefe42033239d9c7 Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Tue, 12 Nov 2019 16:50:22 +0800 Subject: [PATCH 35/37] update travis travis_env_common.sh --- ci/travis/travis_env_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/travis/travis_env_common.sh b/ci/travis/travis_env_common.sh index ac63d2950b..f5f9cbbcf7 100644 --- a/ci/travis/travis_env_common.sh +++ b/ci/travis/travis_env_common.sh @@ -3,7 +3,7 @@ export MILVUS_BUILD_DIR=${TRAVIS_BUILD_DIR}/core/cmake_build export MILVUS_INSTALL_PREFIX=/opt/milvus export MILVUS_TRAVIS_COVERAGE=${MILVUS_TRAVIS_COVERAGE:=0} -if ["$MILVUS_TRAVIS_COVERAGE" == "1"]; then +if [ "${MILVUS_TRAVIS_COVERAGE}" == "1" ]; then export MILVUS_CPP_COVERAGE_FILE=${TRAVIS_BUILD_DIR}/output_new.info fi From d04f7b56a2de36fad250a5aa599ce9bd696bc5f6 Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Tue, 12 Nov 2019 17:11:32 +0800 Subject: [PATCH 36/37] update FindGTest.cmake --- core/cmake/FindGTest.cmake | 52 ++++++++++++++-------------- core/src/index/cmake/FindGTest.cmake | 52 ++++++++++++++-------------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/core/cmake/FindGTest.cmake b/core/cmake/FindGTest.cmake index d746e40b05..3e14b49b0e 100644 --- a/core/cmake/FindGTest.cmake +++ b/core/cmake/FindGTest.cmake @@ -28,10 +28,10 @@ Imported targets This module defines the following :prop_tgt:`IMPORTED` targets: -``GTest::GTest`` +``gtest`` The Google Test ``gtest`` library, if found; adds Thread::Thread automatically -``GTest::Main`` +``gtest_main`` The Google Test ``gtest_main`` library, if found ``GMock::GMock`` The Google Mock ``gmock`` library, if found @@ -80,7 +80,7 @@ Example usage find_package(GTest REQUIRED) add_executable(foo foo.cc) - target_link_libraries(foo GTest::GTest GTest::Main) + target_link_libraries(foo gtest gtest_main) add_test(AllTestsInFoo foo) @@ -228,51 +228,51 @@ if(GTEST_FOUND) find_package(Threads QUIET) - if(NOT TARGET GTest::GTest) + if(NOT TARGET gtest) __gtest_determine_library_type(GTEST_LIBRARY) - add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED) + add_library(gtest ${GTEST_LIBRARY_TYPE} IMPORTED) if(TARGET Threads::Threads) - set_target_properties(GTest::GTest PROPERTIES + set_target_properties(gtest PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads) endif() if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(GTest::GTest PROPERTIES + set_target_properties(gtest PROPERTIES INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") endif() if(GTEST_INCLUDE_DIRS) - set_target_properties(GTest::GTest PROPERTIES + set_target_properties(gtest PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") endif() - __gtest_import_library(GTest::GTest GTEST_LIBRARY "") - __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE") - __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG") + __gtest_import_library(gtest GTEST_LIBRARY "") + __gtest_import_library(gtest GTEST_LIBRARY "RELEASE") + __gtest_import_library(gtest GTEST_LIBRARY "DEBUG") endif() - if(NOT TARGET GTest::Main) + if(NOT TARGET gtest_main) __gtest_determine_library_type(GTEST_MAIN_LIBRARY) - add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) - set_target_properties(GTest::Main PROPERTIES - INTERFACE_LINK_LIBRARIES "GTest::GTest") - __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "") - __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE") - __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG") + add_library(gtest_main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(gtest_main PROPERTIES + INTERFACE_LINK_LIBRARIES "gtest") + __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "") + __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "RELEASE") + __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "DEBUG") endif() - if(NOT TARGET GTest::GMock) + if(NOT TARGET gmock) __gtest_determine_library_type(GMOCK_LIBRARY) - add_library(GTest::GMock ${GMOCK_LIBRARY_TYPE} IMPORTED) + add_library(gmock ${GMOCK_LIBRARY_TYPE} IMPORTED) if(TARGET Threads::Threads) - set_target_properties(GTest::GMock PROPERTIES + set_target_properties(gmock PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads) endif() if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(GTest::GMock PROPERTIES + set_target_properties(gmock PROPERTIES INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") endif() if(GTEST_INCLUDE_DIRS) - set_target_properties(GTest::GMock PROPERTIES + set_target_properties(gmock PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") endif() - __gtest_import_library(GTest::GMock GMOCK_LIBRARY "") - __gtest_import_library(GTest::GMock GMOCK_LIBRARY "RELEASE") - __gtest_import_library(GTest::GMock GMOCK_LIBRARY "DEBUG") + __gtest_import_library(gmock GMOCK_LIBRARY "") + __gtest_import_library(gmock GMOCK_LIBRARY "RELEASE") + __gtest_import_library(gmock GMOCK_LIBRARY "DEBUG") endif() endif() diff --git a/core/src/index/cmake/FindGTest.cmake b/core/src/index/cmake/FindGTest.cmake index d746e40b05..3e14b49b0e 100644 --- a/core/src/index/cmake/FindGTest.cmake +++ b/core/src/index/cmake/FindGTest.cmake @@ -28,10 +28,10 @@ Imported targets This module defines the following :prop_tgt:`IMPORTED` targets: -``GTest::GTest`` +``gtest`` The Google Test ``gtest`` library, if found; adds Thread::Thread automatically -``GTest::Main`` +``gtest_main`` The Google Test ``gtest_main`` library, if found ``GMock::GMock`` The Google Mock ``gmock`` library, if found @@ -80,7 +80,7 @@ Example usage find_package(GTest REQUIRED) add_executable(foo foo.cc) - target_link_libraries(foo GTest::GTest GTest::Main) + target_link_libraries(foo gtest gtest_main) add_test(AllTestsInFoo foo) @@ -228,51 +228,51 @@ if(GTEST_FOUND) find_package(Threads QUIET) - if(NOT TARGET GTest::GTest) + if(NOT TARGET gtest) __gtest_determine_library_type(GTEST_LIBRARY) - add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED) + add_library(gtest ${GTEST_LIBRARY_TYPE} IMPORTED) if(TARGET Threads::Threads) - set_target_properties(GTest::GTest PROPERTIES + set_target_properties(gtest PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads) endif() if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(GTest::GTest PROPERTIES + set_target_properties(gtest PROPERTIES INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") endif() if(GTEST_INCLUDE_DIRS) - set_target_properties(GTest::GTest PROPERTIES + set_target_properties(gtest PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") endif() - __gtest_import_library(GTest::GTest GTEST_LIBRARY "") - __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE") - __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG") + __gtest_import_library(gtest GTEST_LIBRARY "") + __gtest_import_library(gtest GTEST_LIBRARY "RELEASE") + __gtest_import_library(gtest GTEST_LIBRARY "DEBUG") endif() - if(NOT TARGET GTest::Main) + if(NOT TARGET gtest_main) __gtest_determine_library_type(GTEST_MAIN_LIBRARY) - add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) - set_target_properties(GTest::Main PROPERTIES - INTERFACE_LINK_LIBRARIES "GTest::GTest") - __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "") - __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE") - __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG") + add_library(gtest_main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(gtest_main PROPERTIES + INTERFACE_LINK_LIBRARIES "gtest") + __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "") + __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "RELEASE") + __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "DEBUG") endif() - if(NOT TARGET GTest::GMock) + if(NOT TARGET gmock) __gtest_determine_library_type(GMOCK_LIBRARY) - add_library(GTest::GMock ${GMOCK_LIBRARY_TYPE} IMPORTED) + add_library(gmock ${GMOCK_LIBRARY_TYPE} IMPORTED) if(TARGET Threads::Threads) - set_target_properties(GTest::GMock PROPERTIES + set_target_properties(gmock PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads) endif() if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(GTest::GMock PROPERTIES + set_target_properties(gmock PROPERTIES INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") endif() if(GTEST_INCLUDE_DIRS) - set_target_properties(GTest::GMock PROPERTIES + set_target_properties(gmock PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") endif() - __gtest_import_library(GTest::GMock GMOCK_LIBRARY "") - __gtest_import_library(GTest::GMock GMOCK_LIBRARY "RELEASE") - __gtest_import_library(GTest::GMock GMOCK_LIBRARY "DEBUG") + __gtest_import_library(gmock GMOCK_LIBRARY "") + __gtest_import_library(gmock GMOCK_LIBRARY "RELEASE") + __gtest_import_library(gmock GMOCK_LIBRARY "DEBUG") endif() endif() From 9c954b562ab8c8f3204235ee03e589f8874b0ac4 Mon Sep 17 00:00:00 2001 From: ZhifengZhang-CN Date: Tue, 12 Nov 2019 17:30:19 +0800 Subject: [PATCH 37/37] delete FindGTest.cmake --- ci/scripts/build.sh | 1 - ci/travis/install_dependency.sh | 1 - core/cmake/FindGTest.cmake | 278 --------------------------- core/src/index/cmake/FindGTest.cmake | 278 --------------------------- 4 files changed, 558 deletions(-) delete mode 100644 core/cmake/FindGTest.cmake delete mode 100644 core/src/index/cmake/FindGTest.cmake diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh index 0875ac1dd1..a8bd339ff5 100755 --- a/ci/scripts/build.sh +++ b/ci/scripts/build.sh @@ -96,7 +96,6 @@ CMAKE_CMD="cmake \ -DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ -DBUILD_FAISS_WITH_MKL=${WITH_MKL} \ -DArrow_SOURCE=AUTO \ --DGTest_SOURCE=AUTO \ ${MILVUS_CORE_DIR}" echo ${CMAKE_CMD} ${CMAKE_CMD} diff --git a/ci/travis/install_dependency.sh b/ci/travis/install_dependency.sh index 95d7a698db..e9efd1f441 100755 --- a/ci/travis/install_dependency.sh +++ b/ci/travis/install_dependency.sh @@ -25,7 +25,6 @@ sudo apt-get install -y -q --no-install-recommends \ automake \ ccache \ pkg-config \ - libgtest-dev \ libarrow-dev \ libjemalloc-dev \ libboost-serialization-dev \ diff --git a/core/cmake/FindGTest.cmake b/core/cmake/FindGTest.cmake deleted file mode 100644 index 3e14b49b0e..0000000000 --- a/core/cmake/FindGTest.cmake +++ /dev/null @@ -1,278 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# Originally imported from the CMake project at commit -# df4ed1e9ffcdb6b99ccff9e6f44808fdd2abda56 with the following license header: -# -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - - -#[=======================================================================[.rst: -FindGTest ---------- - -Locate the Google C++ Testing Framework. - -Imported targets -^^^^^^^^^^^^^^^^ - -This module defines the following :prop_tgt:`IMPORTED` targets: - -``gtest`` - The Google Test ``gtest`` library, if found; adds Thread::Thread - automatically -``gtest_main`` - The Google Test ``gtest_main`` library, if found -``GMock::GMock`` - The Google Mock ``gmock`` library, if found - - -Result variables -^^^^^^^^^^^^^^^^ - -This module will set the following variables in your project: - -``GTEST_FOUND`` - Found the Google Testing framework -``GTEST_INCLUDE_DIRS`` - the directory containing the Google Test headers - -The library variables below are set as normal variables. These -contain debug/optimized keywords when a debugging library is found. - -``GTEST_LIBRARIES`` - The Google Test ``gtest`` library; note it also requires linking - with an appropriate thread library -``GTEST_MAIN_LIBRARIES`` - The Google Test ``gtest_main`` library -``GTEST_BOTH_LIBRARIES`` - Both ``gtest`` and ``gtest_main`` - -Cache variables -^^^^^^^^^^^^^^^ - -The following cache variables may also be set: - -``GTEST_ROOT`` - The root directory of the Google Test installation (may also be - set as an environment variable) -``GTEST_MSVC_SEARCH`` - If compiling with MSVC, this variable can be set to ``MT`` or - ``MD`` (the default) to enable searching a GTest build tree - - -Example usage -^^^^^^^^^^^^^ - -:: - - enable_testing() - find_package(GTest REQUIRED) - - add_executable(foo foo.cc) - target_link_libraries(foo gtest gtest_main) - - add_test(AllTestsInFoo foo) - - -Deeper integration with CTest -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -See :module:`GoogleTest` for information on the :command:`gtest_add_tests` -and :command:`gtest_discover_tests` commands. -#]=======================================================================] - -# include(${CMAKE_CURRENT_LIST_DIR}/GoogleTest.cmake) - -function(__gtest_append_debugs _endvar _library) - if(${_library} AND ${_library}_DEBUG) - set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) - else() - set(_output ${${_library}}) - endif() - set(${_endvar} ${_output} PARENT_SCOPE) -endfunction() - -function(__gtest_find_library _name) - find_library(${_name} - NAMES ${ARGN} - HINTS - ENV GTEST_ROOT - ${GTEST_ROOT} - PATH_SUFFIXES ${_gtest_libpath_suffixes} - ) - mark_as_advanced(${_name}) -endfunction() - -macro(__gtest_determine_windows_library_type _var) - if(EXISTS "${${_var}}") - file(TO_NATIVE_PATH "${${_var}}" _lib_path) - get_filename_component(_name "${${_var}}" NAME_WE) - file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1) - if(NOT _match STREQUAL "") - set(${_var}_TYPE SHARED PARENT_SCOPE) - else() - set(${_var}_TYPE UNKNOWN PARENT_SCOPE) - endif() - return() - endif() -endmacro() - -function(__gtest_determine_library_type _var) - if(WIN32) - # For now, at least, only Windows really needs to know the library type - __gtest_determine_windows_library_type(${_var}) - __gtest_determine_windows_library_type(${_var}_RELEASE) - __gtest_determine_windows_library_type(${_var}_DEBUG) - endif() - # If we get here, no determination was made from the above checks - set(${_var}_TYPE UNKNOWN PARENT_SCOPE) -endfunction() - -function(__gtest_import_library _target _var _config) - if(_config) - set(_config_suffix "_${_config}") - else() - set(_config_suffix "") - endif() - - set(_lib "${${_var}${_config_suffix}}") - if(EXISTS "${_lib}") - if(_config) - set_property(TARGET ${_target} APPEND PROPERTY - IMPORTED_CONFIGURATIONS ${_config}) - endif() - set_target_properties(${_target} PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX") - if(WIN32 AND ${_var}_TYPE STREQUAL SHARED) - set_target_properties(${_target} PROPERTIES - IMPORTED_IMPLIB${_config_suffix} "${_lib}") - else() - set_target_properties(${_target} PROPERTIES - IMPORTED_LOCATION${_config_suffix} "${_lib}") - endif() - endif() -endfunction() - -# - -if(NOT DEFINED GTEST_MSVC_SEARCH) - set(GTEST_MSVC_SEARCH MD) -endif() - -set(_gtest_libpath_suffixes lib) -if(MSVC) - if(GTEST_MSVC_SEARCH STREQUAL "MD") - list(APPEND _gtest_libpath_suffixes - msvc/gtest-md/Debug - msvc/gtest-md/Release - msvc/x64/Debug - msvc/x64/Release - ) - elseif(GTEST_MSVC_SEARCH STREQUAL "MT") - list(APPEND _gtest_libpath_suffixes - msvc/gtest/Debug - msvc/gtest/Release - msvc/x64/Debug - msvc/x64/Release - ) - endif() -endif() - - -find_path(GTEST_INCLUDE_DIR gtest/gtest.h - HINTS - $ENV{GTEST_ROOT}/include - ${GTEST_ROOT}/include - PATH_SUFFIXES ${LIB_PATH_SUFFIXES} -) -mark_as_advanced(GTEST_INCLUDE_DIR) - -if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") - # The provided /MD project files for Google Test add -md suffixes to the - # library names. - __gtest_find_library(GTEST_LIBRARY gtest-md gtest) - __gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) - __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) - __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) - __gtest_find_library(GMOCK_LIBRARY gmock-md gmock) - __gtest_find_library(GMOCK_LIBRARY_DEBUG gmock-mdd gmockd) -else() - __gtest_find_library(GTEST_LIBRARY gtest) - __gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) - __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) - __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) - __gtest_find_library(GMOCK_LIBRARY gmock) - __gtest_find_library(GMOCK_LIBRARY_DEBUG gtestd) -endif() - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY GMOCK_LIBRARY) - -if(GTEST_FOUND) - set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) - __gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) - __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) - __gtest_append_debugs(GMOCK_LIBRARIES GMOCK_LIBRARY) - set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) - - find_package(Threads QUIET) - - if(NOT TARGET gtest) - __gtest_determine_library_type(GTEST_LIBRARY) - add_library(gtest ${GTEST_LIBRARY_TYPE} IMPORTED) - if(TARGET Threads::Threads) - set_target_properties(gtest PROPERTIES - INTERFACE_LINK_LIBRARIES Threads::Threads) - endif() - if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(gtest PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - endif() - if(GTEST_INCLUDE_DIRS) - set_target_properties(gtest PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") - endif() - __gtest_import_library(gtest GTEST_LIBRARY "") - __gtest_import_library(gtest GTEST_LIBRARY "RELEASE") - __gtest_import_library(gtest GTEST_LIBRARY "DEBUG") - endif() - if(NOT TARGET gtest_main) - __gtest_determine_library_type(GTEST_MAIN_LIBRARY) - add_library(gtest_main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) - set_target_properties(gtest_main PROPERTIES - INTERFACE_LINK_LIBRARIES "gtest") - __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "") - __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "RELEASE") - __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "DEBUG") - endif() - if(NOT TARGET gmock) - __gtest_determine_library_type(GMOCK_LIBRARY) - add_library(gmock ${GMOCK_LIBRARY_TYPE} IMPORTED) - if(TARGET Threads::Threads) - set_target_properties(gmock PROPERTIES - INTERFACE_LINK_LIBRARIES Threads::Threads) - endif() - if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(gmock PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - endif() - if(GTEST_INCLUDE_DIRS) - set_target_properties(gmock PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") - endif() - __gtest_import_library(gmock GMOCK_LIBRARY "") - __gtest_import_library(gmock GMOCK_LIBRARY "RELEASE") - __gtest_import_library(gmock GMOCK_LIBRARY "DEBUG") - endif() -endif() diff --git a/core/src/index/cmake/FindGTest.cmake b/core/src/index/cmake/FindGTest.cmake deleted file mode 100644 index 3e14b49b0e..0000000000 --- a/core/src/index/cmake/FindGTest.cmake +++ /dev/null @@ -1,278 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# Originally imported from the CMake project at commit -# df4ed1e9ffcdb6b99ccff9e6f44808fdd2abda56 with the following license header: -# -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - - -#[=======================================================================[.rst: -FindGTest ---------- - -Locate the Google C++ Testing Framework. - -Imported targets -^^^^^^^^^^^^^^^^ - -This module defines the following :prop_tgt:`IMPORTED` targets: - -``gtest`` - The Google Test ``gtest`` library, if found; adds Thread::Thread - automatically -``gtest_main`` - The Google Test ``gtest_main`` library, if found -``GMock::GMock`` - The Google Mock ``gmock`` library, if found - - -Result variables -^^^^^^^^^^^^^^^^ - -This module will set the following variables in your project: - -``GTEST_FOUND`` - Found the Google Testing framework -``GTEST_INCLUDE_DIRS`` - the directory containing the Google Test headers - -The library variables below are set as normal variables. These -contain debug/optimized keywords when a debugging library is found. - -``GTEST_LIBRARIES`` - The Google Test ``gtest`` library; note it also requires linking - with an appropriate thread library -``GTEST_MAIN_LIBRARIES`` - The Google Test ``gtest_main`` library -``GTEST_BOTH_LIBRARIES`` - Both ``gtest`` and ``gtest_main`` - -Cache variables -^^^^^^^^^^^^^^^ - -The following cache variables may also be set: - -``GTEST_ROOT`` - The root directory of the Google Test installation (may also be - set as an environment variable) -``GTEST_MSVC_SEARCH`` - If compiling with MSVC, this variable can be set to ``MT`` or - ``MD`` (the default) to enable searching a GTest build tree - - -Example usage -^^^^^^^^^^^^^ - -:: - - enable_testing() - find_package(GTest REQUIRED) - - add_executable(foo foo.cc) - target_link_libraries(foo gtest gtest_main) - - add_test(AllTestsInFoo foo) - - -Deeper integration with CTest -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -See :module:`GoogleTest` for information on the :command:`gtest_add_tests` -and :command:`gtest_discover_tests` commands. -#]=======================================================================] - -# include(${CMAKE_CURRENT_LIST_DIR}/GoogleTest.cmake) - -function(__gtest_append_debugs _endvar _library) - if(${_library} AND ${_library}_DEBUG) - set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) - else() - set(_output ${${_library}}) - endif() - set(${_endvar} ${_output} PARENT_SCOPE) -endfunction() - -function(__gtest_find_library _name) - find_library(${_name} - NAMES ${ARGN} - HINTS - ENV GTEST_ROOT - ${GTEST_ROOT} - PATH_SUFFIXES ${_gtest_libpath_suffixes} - ) - mark_as_advanced(${_name}) -endfunction() - -macro(__gtest_determine_windows_library_type _var) - if(EXISTS "${${_var}}") - file(TO_NATIVE_PATH "${${_var}}" _lib_path) - get_filename_component(_name "${${_var}}" NAME_WE) - file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1) - if(NOT _match STREQUAL "") - set(${_var}_TYPE SHARED PARENT_SCOPE) - else() - set(${_var}_TYPE UNKNOWN PARENT_SCOPE) - endif() - return() - endif() -endmacro() - -function(__gtest_determine_library_type _var) - if(WIN32) - # For now, at least, only Windows really needs to know the library type - __gtest_determine_windows_library_type(${_var}) - __gtest_determine_windows_library_type(${_var}_RELEASE) - __gtest_determine_windows_library_type(${_var}_DEBUG) - endif() - # If we get here, no determination was made from the above checks - set(${_var}_TYPE UNKNOWN PARENT_SCOPE) -endfunction() - -function(__gtest_import_library _target _var _config) - if(_config) - set(_config_suffix "_${_config}") - else() - set(_config_suffix "") - endif() - - set(_lib "${${_var}${_config_suffix}}") - if(EXISTS "${_lib}") - if(_config) - set_property(TARGET ${_target} APPEND PROPERTY - IMPORTED_CONFIGURATIONS ${_config}) - endif() - set_target_properties(${_target} PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX") - if(WIN32 AND ${_var}_TYPE STREQUAL SHARED) - set_target_properties(${_target} PROPERTIES - IMPORTED_IMPLIB${_config_suffix} "${_lib}") - else() - set_target_properties(${_target} PROPERTIES - IMPORTED_LOCATION${_config_suffix} "${_lib}") - endif() - endif() -endfunction() - -# - -if(NOT DEFINED GTEST_MSVC_SEARCH) - set(GTEST_MSVC_SEARCH MD) -endif() - -set(_gtest_libpath_suffixes lib) -if(MSVC) - if(GTEST_MSVC_SEARCH STREQUAL "MD") - list(APPEND _gtest_libpath_suffixes - msvc/gtest-md/Debug - msvc/gtest-md/Release - msvc/x64/Debug - msvc/x64/Release - ) - elseif(GTEST_MSVC_SEARCH STREQUAL "MT") - list(APPEND _gtest_libpath_suffixes - msvc/gtest/Debug - msvc/gtest/Release - msvc/x64/Debug - msvc/x64/Release - ) - endif() -endif() - - -find_path(GTEST_INCLUDE_DIR gtest/gtest.h - HINTS - $ENV{GTEST_ROOT}/include - ${GTEST_ROOT}/include - PATH_SUFFIXES ${LIB_PATH_SUFFIXES} -) -mark_as_advanced(GTEST_INCLUDE_DIR) - -if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") - # The provided /MD project files for Google Test add -md suffixes to the - # library names. - __gtest_find_library(GTEST_LIBRARY gtest-md gtest) - __gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) - __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) - __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) - __gtest_find_library(GMOCK_LIBRARY gmock-md gmock) - __gtest_find_library(GMOCK_LIBRARY_DEBUG gmock-mdd gmockd) -else() - __gtest_find_library(GTEST_LIBRARY gtest) - __gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) - __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) - __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) - __gtest_find_library(GMOCK_LIBRARY gmock) - __gtest_find_library(GMOCK_LIBRARY_DEBUG gtestd) -endif() - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY GMOCK_LIBRARY) - -if(GTEST_FOUND) - set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) - __gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) - __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) - __gtest_append_debugs(GMOCK_LIBRARIES GMOCK_LIBRARY) - set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) - - find_package(Threads QUIET) - - if(NOT TARGET gtest) - __gtest_determine_library_type(GTEST_LIBRARY) - add_library(gtest ${GTEST_LIBRARY_TYPE} IMPORTED) - if(TARGET Threads::Threads) - set_target_properties(gtest PROPERTIES - INTERFACE_LINK_LIBRARIES Threads::Threads) - endif() - if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(gtest PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - endif() - if(GTEST_INCLUDE_DIRS) - set_target_properties(gtest PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") - endif() - __gtest_import_library(gtest GTEST_LIBRARY "") - __gtest_import_library(gtest GTEST_LIBRARY "RELEASE") - __gtest_import_library(gtest GTEST_LIBRARY "DEBUG") - endif() - if(NOT TARGET gtest_main) - __gtest_determine_library_type(GTEST_MAIN_LIBRARY) - add_library(gtest_main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) - set_target_properties(gtest_main PROPERTIES - INTERFACE_LINK_LIBRARIES "gtest") - __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "") - __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "RELEASE") - __gtest_import_library(gtest_main GTEST_MAIN_LIBRARY "DEBUG") - endif() - if(NOT TARGET gmock) - __gtest_determine_library_type(GMOCK_LIBRARY) - add_library(gmock ${GMOCK_LIBRARY_TYPE} IMPORTED) - if(TARGET Threads::Threads) - set_target_properties(gmock PROPERTIES - INTERFACE_LINK_LIBRARIES Threads::Threads) - endif() - if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED") - set_target_properties(gmock PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - endif() - if(GTEST_INCLUDE_DIRS) - set_target_properties(gmock PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") - endif() - __gtest_import_library(gmock GMOCK_LIBRARY "") - __gtest_import_library(gmock GMOCK_LIBRARY "RELEASE") - __gtest_import_library(gmock GMOCK_LIBRARY "DEBUG") - endif() -endif()