ThirdPartyPackages.cmake 39.8 KB
Newer Older
1
# Copyright (C) 2019-2020 Zilliz. All rights reserved.
J
jinhai 已提交
2
#
3 4 5 6 7 8 9 10
# 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.
J
jinhai 已提交
11

G
groot 已提交
12
set(MILVUS_THIRDPARTY_DEPENDENCIES
J
jinhai 已提交
13

Z
zhiru 已提交
14
        GTest
Z
zhiru 已提交
15
        MySQLPP
Z
zhiru 已提交
16
        Prometheus
Z
zhiru 已提交
17 18
        SQLite
        yaml-cpp
Y
yudong.cai 已提交
19
        libunwind
Z
zhiru 已提交
20
        gperftools
Z
Zhiru Zhu 已提交
21
        GRPC
Z
Zhiru Zhu 已提交
22
        ZLIB
23
        Opentracing
C
Cai Yudong 已提交
24
        fiu
B
BossZou 已提交
25 26
        AWS
        oatpp)
J
jinhai 已提交
27

G
groot 已提交
28
message(STATUS "Using ${MILVUS_DEPENDENCY_SOURCE} approach to find dependencies")
J
jinhai 已提交
29

Z
zhiru 已提交
30
# For each dependency, set dependency source to global default, if unset
Z
Zhiru Zhu 已提交
31 32
foreach (DEPENDENCY ${MILVUS_THIRDPARTY_DEPENDENCIES})
    if ("${${DEPENDENCY}_SOURCE}" STREQUAL "")
G
groot 已提交
33
        set(${DEPENDENCY}_SOURCE ${MILVUS_DEPENDENCY_SOURCE})
Z
Zhiru Zhu 已提交
34 35
    endif ()
endforeach ()
Z
zhiru 已提交
36 37

macro(build_dependency DEPENDENCY_NAME)
Z
Zhiru Zhu 已提交
38
    if ("${DEPENDENCY_NAME}" STREQUAL "GTest")
Z
zhiru 已提交
39 40 41
        build_gtest()
    elseif ("${DEPENDENCY_NAME}" STREQUAL "MySQLPP")
        build_mysqlpp()
Z
zhiru 已提交
42 43
    elseif ("${DEPENDENCY_NAME}" STREQUAL "Prometheus")
        build_prometheus()
Z
zhiru 已提交
44 45
    elseif ("${DEPENDENCY_NAME}" STREQUAL "SQLite")
        build_sqlite()
Z
Zhiru Zhu 已提交
46
    elseif ("${DEPENDENCY_NAME}" STREQUAL "yaml-cpp")
Z
zhiru 已提交
47
        build_yamlcpp()
Z
Zhiru Zhu 已提交
48
    elseif ("${DEPENDENCY_NAME}" STREQUAL "libunwind")
Y
yudong.cai 已提交
49
        build_libunwind()
Z
Zhiru Zhu 已提交
50
    elseif ("${DEPENDENCY_NAME}" STREQUAL "gperftools")
Y
yudong.cai 已提交
51
        build_gperftools()
Z
Zhiru Zhu 已提交
52
    elseif ("${DEPENDENCY_NAME}" STREQUAL "GRPC")
Z
zhiru 已提交
53
        build_grpc()
Z
Zhiru Zhu 已提交
54
    elseif ("${DEPENDENCY_NAME}" STREQUAL "ZLIB")
Z
Zhiru Zhu 已提交
55
        build_zlib()
Z
Zhiru Zhu 已提交
56 57
    elseif ("${DEPENDENCY_NAME}" STREQUAL "Opentracing")
        build_opentracing()
58 59
    elseif ("${DEPENDENCY_NAME}" STREQUAL "fiu")
        build_fiu()
B
BossZou 已提交
60 61
    elseif ("${DEPENDENCY_NAME}" STREQUAL "oatpp")
        build_oatpp()
C
Cai Yudong 已提交
62 63
    elseif("${DEPENDENCY_NAME}" STREQUAL "AWS")
        build_aws()
Z
Zhiru Zhu 已提交
64
    else ()
Z
zhiru 已提交
65 66 67
        message(FATAL_ERROR "Unknown thirdparty dependency to build: ${DEPENDENCY_NAME}")
    endif ()
endmacro()
J
jinhai 已提交
68

Q
quicksilver 已提交
69 70 71 72
# ----------------------------------------------------------------------
# Identify OS
if (UNIX)
    if (APPLE)
Z
Zhiru Zhu 已提交
73
        set(CMAKE_OS_NAME "osx" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
74 75
    else (APPLE)
        ## Check for Debian GNU/Linux ________________
Z
Zhiru Zhu 已提交
76 77 78
        find_file(DEBIAN_FOUND debian_version debconf.conf
                PATHS /etc
                )
Q
quicksilver 已提交
79
        if (DEBIAN_FOUND)
Z
Zhiru Zhu 已提交
80
            set(CMAKE_OS_NAME "debian" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
81 82
        endif (DEBIAN_FOUND)
        ##  Check for Fedora _________________________
Z
Zhiru Zhu 已提交
83 84 85
        find_file(FEDORA_FOUND fedora-release
                PATHS /etc
                )
Q
quicksilver 已提交
86
        if (FEDORA_FOUND)
Z
Zhiru Zhu 已提交
87
            set(CMAKE_OS_NAME "fedora" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
88 89
        endif (FEDORA_FOUND)
        ##  Check for RedHat _________________________
Z
Zhiru Zhu 已提交
90 91 92
        find_file(REDHAT_FOUND redhat-release inittab.RH
                PATHS /etc
                )
Q
quicksilver 已提交
93
        if (REDHAT_FOUND)
Z
Zhiru Zhu 已提交
94
            set(CMAKE_OS_NAME "redhat" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
95 96 97 98 99 100 101 102
        endif (REDHAT_FOUND)
        ## Extra check for Ubuntu ____________________
        if (DEBIAN_FOUND)
            ## At its core Ubuntu is a Debian system, with
            ## a slightly altered configuration; hence from
            ## a first superficial inspection a system will
            ## be considered as Debian, which signifies an
            ## extra check is required.
Z
Zhiru Zhu 已提交
103 104 105
            find_file(UBUNTU_EXTRA legal issue
                    PATHS /etc
                    )
Q
quicksilver 已提交
106 107
            if (UBUNTU_EXTRA)
                ## Scan contents of file
Z
Zhiru Zhu 已提交
108 109 110
                file(STRINGS ${UBUNTU_EXTRA} UBUNTU_FOUND
                        REGEX Ubuntu
                        )
Q
quicksilver 已提交
111 112
                ## Check result of string search
                if (UBUNTU_FOUND)
Z
Zhiru Zhu 已提交
113 114 115 116 117 118 119 120
                    set(CMAKE_OS_NAME "ubuntu" CACHE STRING "Operating system name" FORCE)
                    set(DEBIAN_FOUND FALSE)

                    find_program(LSB_RELEASE_EXEC lsb_release)
                    execute_process(COMMAND ${LSB_RELEASE_EXEC} -rs
                            OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT
                            OUTPUT_STRIP_TRAILING_WHITESPACE
                            )
121
                    STRING(REGEX REPLACE "\\." "_" UBUNTU_VERSION "${LSB_RELEASE_ID_SHORT}")
Q
quicksilver 已提交
122 123 124 125 126
                endif (UBUNTU_FOUND)
            endif (UBUNTU_EXTRA)
        endif (DEBIAN_FOUND)
    endif (APPLE)
endif (UNIX)
Q
quicksilver 已提交
127

Q
quicksilver 已提交
128 129 130 131
# ----------------------------------------------------------------------
# thirdparty directory
set(THIRDPARTY_DIR "${MILVUS_SOURCE_DIR}/thirdparty")

Z
zhiru 已提交
132 133
macro(resolve_dependency DEPENDENCY_NAME)
    if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO")
Q
quicksilver 已提交
134
        find_package(${DEPENDENCY_NAME} MODULE)
Z
Zhiru Zhu 已提交
135 136 137
        if (NOT ${${DEPENDENCY_NAME}_FOUND})
            build_dependency(${DEPENDENCY_NAME})
        endif ()
Z
zhiru 已提交
138 139 140 141 142 143
    elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "BUNDLED")
        build_dependency(${DEPENDENCY_NAME})
    elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "SYSTEM")
        find_package(${DEPENDENCY_NAME} REQUIRED)
    endif ()
endmacro()
J
jinhai 已提交
144

Z
zhiru 已提交
145 146
# ----------------------------------------------------------------------
# ExternalProject options
J
jinhai 已提交
147

Z
zhiru 已提交
148 149 150 151 152
string(TOUPPER ${CMAKE_BUILD_TYPE} UPPERCASE_BUILD_TYPE)

set(EP_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}}")
set(EP_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${UPPERCASE_BUILD_TYPE}}")

Z
zhiru 已提交
153 154 155
# Set -fPIC on all external projects
set(EP_CXX_FLAGS "${EP_CXX_FLAGS} -fPIC")
set(EP_C_FLAGS "${EP_C_FLAGS} -fPIC")
Z
zhiru 已提交
156 157 158 159 160 161 162 163 164

# CC/CXX environment variables are captured on the first invocation of the
# builder (e.g make or ninja) instead of when CMake is invoked into to build
# directory. This leads to issues if the variables are exported in a subshell
# and the invocation of make/ninja is in distinct subshell without the same
# environment (CC/CXX).
set(EP_COMMON_TOOLCHAIN -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})

Z
Zhiru Zhu 已提交
165
if (CMAKE_AR)
Z
zhiru 已提交
166
    set(EP_COMMON_TOOLCHAIN ${EP_COMMON_TOOLCHAIN} -DCMAKE_AR=${CMAKE_AR})
Z
Zhiru Zhu 已提交
167
endif ()
Z
zhiru 已提交
168

Z
Zhiru Zhu 已提交
169
if (CMAKE_RANLIB)
Z
zhiru 已提交
170
    set(EP_COMMON_TOOLCHAIN ${EP_COMMON_TOOLCHAIN} -DCMAKE_RANLIB=${CMAKE_RANLIB})
Z
Zhiru Zhu 已提交
171
endif ()
Z
zhiru 已提交
172 173 174 175 176 177 178 179 180 181 182 183 184

# External projects are still able to override the following declarations.
# cmake command line will favor the last defined variable when a duplicate is
# encountered. This requires that `EP_COMMON_CMAKE_ARGS` is always the first
# argument.
set(EP_COMMON_CMAKE_ARGS
        ${EP_COMMON_TOOLCHAIN}
        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
        -DCMAKE_C_FLAGS=${EP_C_FLAGS}
        -DCMAKE_C_FLAGS_${UPPERCASE_BUILD_TYPE}=${EP_C_FLAGS}
        -DCMAKE_CXX_FLAGS=${EP_CXX_FLAGS}
        -DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${EP_CXX_FLAGS})

Z
Zhiru Zhu 已提交
185
if (NOT MILVUS_VERBOSE_THIRDPARTY_BUILD)
Z
zhiru 已提交
186
    set(EP_LOG_OPTIONS LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_DOWNLOAD 1)
Z
Zhiru Zhu 已提交
187
else ()
Z
zhiru 已提交
188
    set(EP_LOG_OPTIONS)
Z
Zhiru Zhu 已提交
189
endif ()
Z
zhiru 已提交
190 191

# Ensure that a default make is set
Z
Zhiru Zhu 已提交
192
if ("${MAKE}" STREQUAL "")
Z
zhiru 已提交
193
    find_program(MAKE make)
Z
Zhiru Zhu 已提交
194
endif ()
Z
zhiru 已提交
195

Z
zhiru 已提交
196 197
if (NOT DEFINED MAKE_BUILD_ARGS)
    set(MAKE_BUILD_ARGS "-j8")
Z
Zhiru Zhu 已提交
198
endif ()
Z
zhiru 已提交
199
message(STATUS "Third Party MAKE_BUILD_ARGS = ${MAKE_BUILD_ARGS}")
Z
zhiru 已提交
200 201 202 203 204 205 206 207 208 209 210 211 212

# ----------------------------------------------------------------------
# Find pthreads

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

# ----------------------------------------------------------------------
# Versions and URLs for toolchain builds, which also can be used to configure
# offline builds

# Read toolchain versions from cpp/thirdparty/versions.txt
file(STRINGS "${THIRDPARTY_DIR}/versions.txt" TOOLCHAIN_VERSIONS_TXT)
Z
Zhiru Zhu 已提交
213
foreach (_VERSION_ENTRY ${TOOLCHAIN_VERSIONS_TXT})
Z
zhiru 已提交
214
    # Exclude comments
Z
Zhiru Zhu 已提交
215
    if (NOT _VERSION_ENTRY MATCHES "^[^#][A-Za-z0-9-_]+_VERSION=")
Z
zhiru 已提交
216
        continue()
Z
Zhiru Zhu 已提交
217
    endif ()
Z
zhiru 已提交
218 219 220 221 222

    string(REGEX MATCH "^[^=]*" _LIB_NAME ${_VERSION_ENTRY})
    string(REPLACE "${_LIB_NAME}=" "" _LIB_VERSION ${_VERSION_ENTRY})

    # Skip blank or malformed lines
Z
Zhiru Zhu 已提交
223
    if (${_LIB_VERSION} STREQUAL "")
Z
zhiru 已提交
224
        continue()
Z
Zhiru Zhu 已提交
225
    endif ()
Z
zhiru 已提交
226 227 228 229 230

    # For debugging
    #message(STATUS "${_LIB_NAME}: ${_LIB_VERSION}")

    set(${_LIB_NAME} "${_LIB_VERSION}")
Z
Zhiru Zhu 已提交
231
endforeach ()
Z
zhiru 已提交
232

G
groot 已提交
233 234
if (DEFINED ENV{MILVUS_GTEST_URL})
    set(GTEST_SOURCE_URL "$ENV{MILVUS_GTEST_URL}")
Z
zhiru 已提交
235 236
else ()
    set(GTEST_SOURCE_URL
237 238
            "https://github.com/google/googletest/archive/release-${GTEST_VERSION}.tar.gz"
            "https://gitee.com/quicksilver/googletest/repository/archive/release-${GTEST_VERSION}.zip")
Z
Zhiru Zhu 已提交
239
endif ()
Z
zhiru 已提交
240

Z
Zhiru Zhu 已提交
241
if (DEFINED ENV{MILVUS_MYSQLPP_URL})
Z
zhiru 已提交
242
    set(MYSQLPP_SOURCE_URL "$ENV{MILVUS_MYSQLPP_URL}")
Z
Zhiru Zhu 已提交
243
else ()
244
    set(MYSQLPP_SOURCE_URL "https://tangentsoft.com/mysqlpp/releases/mysql++-${MYSQLPP_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
245
endif ()
Z
zhiru 已提交
246

G
groot 已提交
247
if (DEFINED ENV{MILVUS_PROMETHEUS_URL})
Z
zhiru 已提交
248 249 250
    set(PROMETHEUS_SOURCE_URL "$ENV{PROMETHEUS_OPENBLAS_URL}")
else ()
    set(PROMETHEUS_SOURCE_URL
251
        "https://github.com/milvus-io/prometheus-cpp/archive/${PROMETHEUS_VERSION}.zip")
Z
Zhiru Zhu 已提交
252
endif ()
Z
zhiru 已提交
253

Z
Zhiru Zhu 已提交
254
if (DEFINED ENV{MILVUS_SQLITE_URL})
G
groot 已提交
255
    set(SQLITE_SOURCE_URL "$ENV{MILVUS_SQLITE_URL}")
Z
Zhiru Zhu 已提交
256
else ()
Z
zhiru 已提交
257 258
    set(SQLITE_SOURCE_URL
            "https://www.sqlite.org/2019/sqlite-autoconf-${SQLITE_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
259
endif ()
Z
zhiru 已提交
260

Z
Zhiru Zhu 已提交
261
if (DEFINED ENV{MILVUS_YAMLCPP_URL})
G
groot 已提交
262
    set(YAMLCPP_SOURCE_URL "$ENV{MILVUS_YAMLCPP_URL}")
Z
Zhiru Zhu 已提交
263
else ()
264 265
    set(YAMLCPP_SOURCE_URL "https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-${YAMLCPP_VERSION}.tar.gz"
                           "https://gitee.com/quicksilver/yaml-cpp/repository/archive/yaml-cpp-${YAMLCPP_VERSION}.zip")
Z
Zhiru Zhu 已提交
266
endif ()
Z
zhiru 已提交
267

Z
Zhiru Zhu 已提交
268
if (DEFINED ENV{MILVUS_LIBUNWIND_URL})
Y
yudong.cai 已提交
269
    set(LIBUNWIND_SOURCE_URL "$ENV{MILVUS_LIBUNWIND_URL}")
Z
Zhiru Zhu 已提交
270
else ()
Y
yudong.cai 已提交
271 272
    set(LIBUNWIND_SOURCE_URL
            "https://github.com/libunwind/libunwind/releases/download/v${LIBUNWIND_VERSION}/libunwind-${LIBUNWIND_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
273
endif ()
Y
yudong.cai 已提交
274

Z
Zhiru Zhu 已提交
275
if (DEFINED ENV{MILVUS_GPERFTOOLS_URL})
Y
yudong.cai 已提交
276
    set(GPERFTOOLS_SOURCE_URL "$ENV{MILVUS_GPERFTOOLS_URL}")
Z
Zhiru Zhu 已提交
277
else ()
Y
yudong.cai 已提交
278 279
    set(GPERFTOOLS_SOURCE_URL
            "https://github.com/gperftools/gperftools/releases/download/gperftools-${GPERFTOOLS_VERSION}/gperftools-${GPERFTOOLS_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
280
endif ()
Y
yudong.cai 已提交
281

Z
Zhiru Zhu 已提交
282
if (DEFINED ENV{MILVUS_GRPC_URL})
Z
zhiru 已提交
283
    set(GRPC_SOURCE_URL "$ENV{MILVUS_GRPC_URL}")
Z
Zhiru Zhu 已提交
284
else ()
Z
zhiru 已提交
285
    set(GRPC_SOURCE_URL
286
            "https://github.com/milvus-io/grpc-milvus/archive/${GRPC_VERSION}.zip"
J
Jin Hai 已提交
287 288 289
            #"https://github.com/youny626/grpc-milvus/archive/${GRPC_VERSION}.zip"
            #"https://gitee.com/quicksilver/grpc-milvus/repository/archive/${GRPC_VERSION}.zip"
            )
Z
Zhiru Zhu 已提交
290
endif ()
Z
zhiru 已提交
291

Z
Zhiru Zhu 已提交
292
if (DEFINED ENV{MILVUS_ZLIB_URL})
Z
Zhiru Zhu 已提交
293
    set(ZLIB_SOURCE_URL "$ENV{MILVUS_ZLIB_URL}")
Z
Zhiru Zhu 已提交
294
else ()
295 296
    set(ZLIB_SOURCE_URL "https://github.com/madler/zlib/archive/${ZLIB_VERSION}.tar.gz"
                        "https://gitee.com/quicksilver/zlib/repository/archive/${ZLIB_VERSION}.zip")
Z
Zhiru Zhu 已提交
297
endif ()
Z
zhiru 已提交
298

Z
Zhiru Zhu 已提交
299 300 301
if (DEFINED ENV{MILVUS_OPENTRACING_URL})
    set(OPENTRACING_SOURCE_URL "$ENV{MILVUS_OPENTRACING_URL}")
else ()
302 303
    set(OPENTRACING_SOURCE_URL "https://github.com/opentracing/opentracing-cpp/archive/${OPENTRACING_VERSION}.tar.gz"
          "https://gitee.com/quicksilver/opentracing-cpp/repository/archive/${OPENTRACING_VERSION}.zip")
Z
Zhiru Zhu 已提交
304 305
endif ()

306
if (DEFINED ENV{MILVUS_FIU_URL})
307
    set(FIU_SOURCE_URL "$ENV{MILVUS_FIU_URL}")
308
else ()
309 310
    set(FIU_SOURCE_URL "https://github.com/albertito/libfiu/archive/${FIU_VERSION}.tar.gz"
                       "https://gitee.com/quicksilver/libfiu/repository/archive/${FIU_VERSION}.zip")
311 312
endif ()

B
BossZou 已提交
313
if (DEFINED ENV{MILVUS_OATPP_URL})
314
    set(OATPP_SOURCE_URL "$ENV{MILVUS_OATPP_URL}")
B
BossZou 已提交
315
else ()
316
    # set(OATPP_SOURCE_URL "https://github.com/oatpp/oatpp/archive/${OATPP_VERSION}.tar.gz")
317
    set(OATPP_SOURCE_URL "https://github.com/BossZou/oatpp/archive/${OATPP_VERSION}.zip")
B
BossZou 已提交
318 319
endif ()

C
Cai Yudong 已提交
320 321 322 323 324
if (DEFINED ENV{MILVUS_AWS_URL})
    set(AWS_SOURCE_URL "$ENV{MILVUS_AWS_URL}")
else ()
    set(AWS_SOURCE_URL "https://github.com/aws/aws-sdk-cpp/archive/${AWS_VERSION}.tar.gz")
endif ()
Z
Zhiru Zhu 已提交
325

Z
zhiru 已提交
326 327 328 329 330 331 332 333
# ----------------------------------------------------------------------
# Google gtest

macro(build_gtest)
    message(STATUS "Building gtest-${GTEST_VERSION} from source")
    set(GTEST_VENDORED TRUE)
    set(GTEST_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS}")

Z
Zhiru Zhu 已提交
334
    if (APPLE)
Z
zhiru 已提交
335 336 337 338 339
        set(GTEST_CMAKE_CXX_FLAGS
                ${GTEST_CMAKE_CXX_FLAGS}
                -DGTEST_USE_OWN_TR1_TUPLE=1
                -Wno-unused-value
                -Wno-ignored-attributes)
Z
Zhiru Zhu 已提交
340
    endif ()
Z
zhiru 已提交
341 342 343 344 345 346 347 348 349 350 351 352

    set(GTEST_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/googletest_ep-prefix/src/googletest_ep")
    set(GTEST_INCLUDE_DIR "${GTEST_PREFIX}/include")
    set(GTEST_STATIC_LIB
            "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(GTEST_MAIN_STATIC_LIB
            "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}")

    set(GTEST_CMAKE_ARGS
            ${EP_COMMON_CMAKE_ARGS}
            "-DCMAKE_INSTALL_PREFIX=${GTEST_PREFIX}"
            "-DCMAKE_INSTALL_LIBDIR=lib"
Z
zhiru 已提交
353 354 355 356 357 358
            -DCMAKE_CXX_FLAGS=${GTEST_CMAKE_CXX_FLAGS}
            -DCMAKE_BUILD_TYPE=Release)

    set(GMOCK_INCLUDE_DIR "${GTEST_PREFIX}/include")
    set(GMOCK_STATIC_LIB
            "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}"
Z
Zhiru Zhu 已提交
359
            )
Q
quicksilver 已提交
360

361 362 363
    ExternalProject_Add(googletest_ep
            URL
            ${GTEST_SOURCE_URL}
364 365
            URL_MD5
            "2e6fbeb6a91310a16efe181886c59596"
366 367 368 369 370 371 372 373 374 375
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            BUILD_BYPRODUCTS
            ${GTEST_STATIC_LIB}
            ${GTEST_MAIN_STATIC_LIB}
            ${GMOCK_STATIC_LIB}
            CMAKE_ARGS
            ${GTEST_CMAKE_ARGS}
            ${EP_LOG_OPTIONS})
Z
zhiru 已提交
376 377 378

    # The include directory must exist before it is referenced by a target.
    file(MAKE_DIRECTORY "${GTEST_INCLUDE_DIR}")
J
jinhai 已提交
379 380

    add_library(gtest STATIC IMPORTED)
Z
zhiru 已提交
381
    set_target_properties(gtest
Z
Zhiru Zhu 已提交
382 383
            PROPERTIES IMPORTED_LOCATION "${GTEST_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
J
jinhai 已提交
384 385

    add_library(gtest_main STATIC IMPORTED)
Z
zhiru 已提交
386
    set_target_properties(gtest_main
Z
Zhiru Zhu 已提交
387 388
            PROPERTIES IMPORTED_LOCATION "${GTEST_MAIN_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
Z
zhiru 已提交
389

Z
zhiru 已提交
390 391 392 393 394
    add_library(gmock STATIC IMPORTED)
    set_target_properties(gmock
            PROPERTIES IMPORTED_LOCATION "${GMOCK_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")

Z
zhiru 已提交
395 396
    add_dependencies(gtest googletest_ep)
    add_dependencies(gtest_main googletest_ep)
Z
zhiru 已提交
397
    add_dependencies(gmock googletest_ep)
Z
zhiru 已提交
398 399 400

endmacro()

G
groot 已提交
401
if (MILVUS_BUILD_TESTS)
Z
zhiru 已提交
402 403
    resolve_dependency(GTest)

Z
Zhiru Zhu 已提交
404 405
    if (NOT GTEST_VENDORED)
    endif ()
S
starlord 已提交
406

Z
zhiru 已提交
407
    get_target_property(GTEST_INCLUDE_DIR gtest INTERFACE_INCLUDE_DIRECTORIES)
Z
zhiru 已提交
408
    link_directories(SYSTEM "${GTEST_PREFIX}/lib")
Z
zhiru 已提交
409
    include_directories(SYSTEM ${GTEST_INCLUDE_DIR})
Z
Zhiru Zhu 已提交
410
endif ()
Z
zhiru 已提交
411

Z
zhiru 已提交
412
# ----------------------------------------------------------------------
Z
zhiru 已提交
413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428
# MySQL++

macro(build_mysqlpp)
    message(STATUS "Building MySQL++-${MYSQLPP_VERSION} from source")
    set(MYSQLPP_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/mysqlpp_ep-prefix/src/mysqlpp_ep")
    set(MYSQLPP_INCLUDE_DIR "${MYSQLPP_PREFIX}/include")
    set(MYSQLPP_SHARED_LIB
            "${MYSQLPP_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}mysqlpp${CMAKE_SHARED_LIBRARY_SUFFIX}")

    set(MYSQLPP_CONFIGURE_ARGS
            "--prefix=${MYSQLPP_PREFIX}"
            "--enable-thread-check"
            "CFLAGS=${EP_C_FLAGS}"
            "CXXFLAGS=${EP_CXX_FLAGS}"
            "LDFLAGS=-pthread")

429
    ExternalProject_Add(mysqlpp_ep
430 431 432
            URL
            ${MYSQLPP_SOURCE_URL}
            ${EP_LOG_OPTIONS}
433 434
            URL_MD5
            "cda38b5ecc0117de91f7c42292dd1e79"
435 436 437 438 439 440 441 442 443
            CONFIGURE_COMMAND
            "./configure"
            ${MYSQLPP_CONFIGURE_ARGS}
            BUILD_COMMAND
            ${MAKE} ${MAKE_BUILD_ARGS}
            BUILD_IN_SOURCE
            1
            BUILD_BYPRODUCTS
            ${MYSQLPP_SHARED_LIB})
Z
zhiru 已提交
444

Q
quicksilver 已提交
445
    file(MAKE_DIRECTORY "${MYSQLPP_INCLUDE_DIR}")
Z
zhiru 已提交
446 447 448 449 450 451 452 453 454 455 456
    add_library(mysqlpp SHARED IMPORTED)
    set_target_properties(
            mysqlpp
            PROPERTIES
            IMPORTED_LOCATION "${MYSQLPP_SHARED_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${MYSQLPP_INCLUDE_DIR}")

    add_dependencies(mysqlpp mysqlpp_ep)

endmacro()

Z
Zhiru Zhu 已提交
457
if (MILVUS_WITH_MYSQLPP)
Z
zhiru 已提交
458 459 460 461 462

    resolve_dependency(MySQLPP)
    get_target_property(MYSQLPP_INCLUDE_DIR mysqlpp INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM "${MYSQLPP_INCLUDE_DIR}")
    link_directories(SYSTEM ${MYSQLPP_PREFIX}/lib)
Z
Zhiru Zhu 已提交
463
endif ()
Z
zhiru 已提交
464 465

# ----------------------------------------------------------------------
Z
zhiru 已提交
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485
# Prometheus

macro(build_prometheus)
    message(STATUS "Building Prometheus-${PROMETHEUS_VERSION} from source")
    set(PROMETHEUS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/prometheus_ep-prefix/src/prometheus_ep")
    set(PROMETHEUS_STATIC_LIB_NAME prometheus-cpp)
    set(PROMETHEUS_CORE_STATIC_LIB
            "${PROMETHEUS_PREFIX}/core/${CMAKE_STATIC_LIBRARY_PREFIX}${PROMETHEUS_STATIC_LIB_NAME}-core${CMAKE_STATIC_LIBRARY_SUFFIX}"
            )
    set(PROMETHEUS_PUSH_STATIC_LIB
            "${PROMETHEUS_PREFIX}/push/${CMAKE_STATIC_LIBRARY_PREFIX}${PROMETHEUS_STATIC_LIB_NAME}-push${CMAKE_STATIC_LIBRARY_SUFFIX}"
            )
    set(PROMETHEUS_PULL_STATIC_LIB
            "${PROMETHEUS_PREFIX}/pull/${CMAKE_STATIC_LIBRARY_PREFIX}${PROMETHEUS_STATIC_LIB_NAME}-pull${CMAKE_STATIC_LIBRARY_SUFFIX}"
            )

    set(PROMETHEUS_CMAKE_ARGS
            ${EP_COMMON_CMAKE_ARGS}
            -DCMAKE_INSTALL_LIBDIR=lib
            -DBUILD_SHARED_LIBS=OFF
Z
zhiru 已提交
486 487
            "-DCMAKE_INSTALL_PREFIX=${PROMETHEUS_PREFIX}"
            -DCMAKE_BUILD_TYPE=Release)
Z
zhiru 已提交
488

489
    ExternalProject_Add(prometheus_ep
490
            URL
491 492
            ${PROMETHEUS_SOURCE_URL}
            ${EP_LOG_OPTIONS}
493 494
            URL_MD5
            "6550819ae4d61c480a55a69f08159413"
495 496
            CMAKE_ARGS
            ${PROMETHEUS_CMAKE_ARGS}
W
Wang XiangYu 已提交
497 498
            UPDATE_COMMAND
            ""
499 500 501
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
502 503 504
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
505 506 507 508 509 510 511 512 513 514
            BUILD_IN_SOURCE
            1
            INSTALL_COMMAND
            ${MAKE}
            "DESTDIR=${PROMETHEUS_PREFIX}"
            install
            BUILD_BYPRODUCTS
            "${PROMETHEUS_CORE_STATIC_LIB}"
            "${PROMETHEUS_PUSH_STATIC_LIB}"
            "${PROMETHEUS_PULL_STATIC_LIB}")
Z
zhiru 已提交
515

516
    file(MAKE_DIRECTORY "${PROMETHEUS_PREFIX}/push/include")
Z
zhiru 已提交
517 518
    add_library(prometheus-cpp-push STATIC IMPORTED)
    set_target_properties(prometheus-cpp-push
519 520
            PROPERTIES IMPORTED_LOCATION "${PROMETHEUS_PUSH_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${PROMETHEUS_PREFIX}/push/include")
Z
zhiru 已提交
521 522
    add_dependencies(prometheus-cpp-push prometheus_ep)

523
    file(MAKE_DIRECTORY "${PROMETHEUS_PREFIX}/pull/include")
Z
zhiru 已提交
524 525
    add_library(prometheus-cpp-pull STATIC IMPORTED)
    set_target_properties(prometheus-cpp-pull
526 527
            PROPERTIES IMPORTED_LOCATION "${PROMETHEUS_PULL_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${PROMETHEUS_PREFIX}/pull/include")
Z
zhiru 已提交
528 529
    add_dependencies(prometheus-cpp-pull prometheus_ep)

530
    file(MAKE_DIRECTORY "${PROMETHEUS_PREFIX}/core/include")
Z
zhiru 已提交
531 532
    add_library(prometheus-cpp-core STATIC IMPORTED)
    set_target_properties(prometheus-cpp-core
533 534
            PROPERTIES IMPORTED_LOCATION "${PROMETHEUS_CORE_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${PROMETHEUS_PREFIX}/core/include")
Z
zhiru 已提交
535 536 537
    add_dependencies(prometheus-cpp-core prometheus_ep)
endmacro()

Z
Zhiru Zhu 已提交
538
if (MILVUS_WITH_PROMETHEUS)
Z
zhiru 已提交
539 540 541 542 543 544 545 546 547 548 549

    resolve_dependency(Prometheus)

    link_directories(SYSTEM ${PROMETHEUS_PREFIX}/push/)
    include_directories(SYSTEM ${PROMETHEUS_PREFIX}/push/include)

    link_directories(SYSTEM ${PROMETHEUS_PREFIX}/pull/)
    include_directories(SYSTEM ${PROMETHEUS_PREFIX}/pull/include)

    link_directories(SYSTEM ${PROMETHEUS_PREFIX}/core/)
    include_directories(SYSTEM ${PROMETHEUS_PREFIX}/core/include)
Y
yu yunfeng 已提交
550

Z
Zhiru Zhu 已提交
551
endif ()
Z
zhiru 已提交
552

Z
zhiru 已提交
553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569
# ----------------------------------------------------------------------
# SQLite

macro(build_sqlite)
    message(STATUS "Building SQLITE-${SQLITE_VERSION} from source")
    set(SQLITE_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/sqlite_ep-prefix/src/sqlite_ep")
    set(SQLITE_INCLUDE_DIR "${SQLITE_PREFIX}/include")
    set(SQLITE_STATIC_LIB
            "${SQLITE_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}sqlite3${CMAKE_STATIC_LIBRARY_SUFFIX}")

    set(SQLITE_CONFIGURE_ARGS
            "--prefix=${SQLITE_PREFIX}"
            "CC=${CMAKE_C_COMPILER}"
            "CXX=${CMAKE_CXX_COMPILER}"
            "CFLAGS=${EP_C_FLAGS}"
            "CXXFLAGS=${EP_CXX_FLAGS}")

570
    ExternalProject_Add(sqlite_ep
571 572 573
            URL
            ${SQLITE_SOURCE_URL}
            ${EP_LOG_OPTIONS}
574 575
            URL_MD5
            "3c68eb400f8354605736cd55400e1572"
576 577 578 579 580 581 582 583 584 585
            CONFIGURE_COMMAND
            "./configure"
            ${SQLITE_CONFIGURE_ARGS}
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            BUILD_IN_SOURCE
            1
            BUILD_BYPRODUCTS
            "${SQLITE_STATIC_LIB}")
Z
zhiru 已提交
586

Q
quicksilver 已提交
587
    file(MAKE_DIRECTORY "${SQLITE_INCLUDE_DIR}")
Z
zhiru 已提交
588 589 590 591 592 593 594 595 596
    add_library(sqlite STATIC IMPORTED)
    set_target_properties(
            sqlite
            PROPERTIES IMPORTED_LOCATION "${SQLITE_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${SQLITE_INCLUDE_DIR}")

    add_dependencies(sqlite sqlite_ep)
endmacro()

Z
Zhiru Zhu 已提交
597
if (MILVUS_WITH_SQLITE)
Z
zhiru 已提交
598 599 600
    resolve_dependency(SQLite)
    include_directories(SYSTEM "${SQLITE_INCLUDE_DIR}")
    link_directories(SYSTEM ${SQLITE_PREFIX}/lib/)
Z
Zhiru Zhu 已提交
601
endif ()
Z
zhiru 已提交
602 603 604 605 606 607 608 609

# ----------------------------------------------------------------------
# yaml-cpp

macro(build_yamlcpp)
    message(STATUS "Building yaml-cpp-${YAMLCPP_VERSION} from source")
    set(YAMLCPP_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/yaml-cpp_ep-prefix/src/yaml-cpp_ep")
    set(YAMLCPP_STATIC_LIB "${YAMLCPP_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}yaml-cpp${CMAKE_STATIC_LIBRARY_SUFFIX}")
Q
quicksilver 已提交
610
    set(YAMLCPP_INCLUDE_DIR "${YAMLCPP_PREFIX}/include")
Z
zhiru 已提交
611 612 613 614 615 616 617
    set(YAMLCPP_CMAKE_ARGS
            ${EP_COMMON_CMAKE_ARGS}
            "-DCMAKE_INSTALL_PREFIX=${YAMLCPP_PREFIX}"
            -DCMAKE_INSTALL_LIBDIR=lib
            -DYAML_CPP_BUILD_TESTS=OFF
            -DYAML_CPP_BUILD_TOOLS=OFF)

618
    ExternalProject_Add(yaml-cpp_ep
619 620 621
            URL
            ${YAMLCPP_SOURCE_URL}
            ${EP_LOG_OPTIONS}
622 623
            URL_MD5
            "5b943e9af0060d0811148b037449ef82"
624 625 626 627 628 629 630
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            BUILD_BYPRODUCTS
            "${YAMLCPP_STATIC_LIB}"
            CMAKE_ARGS
            ${YAMLCPP_CMAKE_ARGS})
Z
zhiru 已提交
631

Q
quicksilver 已提交
632
    file(MAKE_DIRECTORY "${YAMLCPP_INCLUDE_DIR}")
Z
zhiru 已提交
633 634 635
    add_library(yaml-cpp STATIC IMPORTED)
    set_target_properties(yaml-cpp
            PROPERTIES IMPORTED_LOCATION "${YAMLCPP_STATIC_LIB}"
Q
quicksilver 已提交
636
            INTERFACE_INCLUDE_DIRECTORIES "${YAMLCPP_INCLUDE_DIR}")
Z
zhiru 已提交
637 638 639 640

    add_dependencies(yaml-cpp yaml-cpp_ep)
endmacro()

Z
Zhiru Zhu 已提交
641
if (MILVUS_WITH_YAMLCPP)
Z
zhiru 已提交
642
    resolve_dependency(yaml-cpp)
S
starlord 已提交
643

Z
zhiru 已提交
644 645 646
    get_target_property(YAMLCPP_INCLUDE_DIR yaml-cpp INTERFACE_INCLUDE_DIRECTORIES)
    link_directories(SYSTEM ${YAMLCPP_PREFIX}/lib/)
    include_directories(SYSTEM ${YAMLCPP_INCLUDE_DIR})
Z
Zhiru Zhu 已提交
647
endif ()
Z
zhiru 已提交
648

Y
yudong.cai 已提交
649 650 651 652 653 654 655 656 657 658
# ----------------------------------------------------------------------
# libunwind

macro(build_libunwind)
    message(STATUS "Building libunwind-${LIBUNWIND_VERSION} from source")
    set(LIBUNWIND_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/libunwind_ep-prefix/src/libunwind_ep/install")
    set(LIBUNWIND_INCLUDE_DIR "${LIBUNWIND_PREFIX}/include")
    set(LIBUNWIND_SHARED_LIB "${LIBUNWIND_PREFIX}/lib/libunwind${CMAKE_SHARED_LIBRARY_SUFFIX}")
    set(LIBUNWIND_CONFIGURE_ARGS "--prefix=${LIBUNWIND_PREFIX}")

659
    ExternalProject_Add(libunwind_ep
660 661 662 663 664 665 666 667 668 669 670 671 672 673
            URL
            ${LIBUNWIND_SOURCE_URL}
            ${EP_LOG_OPTIONS}
            CONFIGURE_COMMAND
            "./configure"
            ${LIBUNWIND_CONFIGURE_ARGS}
            BUILD_COMMAND
            ${MAKE} ${MAKE_BUILD_ARGS}
            BUILD_IN_SOURCE
            1
            INSTALL_COMMAND
            ${MAKE} install
            BUILD_BYPRODUCTS
            ${LIBUNWIND_SHARED_LIB})
Y
yudong.cai 已提交
674 675 676 677 678 679 680 681 682 683 684

    file(MAKE_DIRECTORY "${LIBUNWIND_INCLUDE_DIR}")

    add_library(libunwind SHARED IMPORTED)
    set_target_properties(libunwind
            PROPERTIES IMPORTED_LOCATION "${LIBUNWIND_SHARED_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${LIBUNWIND_INCLUDE_DIR}")

    add_dependencies(libunwind libunwind_ep)
endmacro()

Z
Zhiru Zhu 已提交
685
if (MILVUS_WITH_LIBUNWIND)
Y
yudong.cai 已提交
686 687 688 689
    resolve_dependency(libunwind)

    get_target_property(LIBUNWIND_INCLUDE_DIR libunwind INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${LIBUNWIND_INCLUDE_DIR})
Z
Zhiru Zhu 已提交
690
endif ()
Y
yudong.cai 已提交
691 692 693 694 695 696 697 698 699 700 701

# ----------------------------------------------------------------------
# gperftools

macro(build_gperftools)
    message(STATUS "Building gperftools-${GPERFTOOLS_VERSION} from source")
    set(GPERFTOOLS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/gperftools_ep-prefix/src/gperftools_ep")
    set(GPERFTOOLS_INCLUDE_DIR "${GPERFTOOLS_PREFIX}/include")
    set(GPERFTOOLS_STATIC_LIB "${GPERFTOOLS_PREFIX}/lib/libprofiler${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(GPERFTOOLS_CONFIGURE_ARGS "--prefix=${GPERFTOOLS_PREFIX}")

702
    ExternalProject_Add(gperftools_ep
703 704 705 706 707 708 709 710 711 712 713 714 715 716
            URL
            ${GPERFTOOLS_SOURCE_URL}
            ${EP_LOG_OPTIONS}
            CONFIGURE_COMMAND
            "./configure"
            ${GPERFTOOLS_CONFIGURE_ARGS}
            BUILD_COMMAND
            ${MAKE} ${MAKE_BUILD_ARGS}
            BUILD_IN_SOURCE
            1
            INSTALL_COMMAND
            ${MAKE} install
            BUILD_BYPRODUCTS
            ${GPERFTOOLS_STATIC_LIB})
Y
yudong.cai 已提交
717

Q
quicksilver 已提交
718 719
    ExternalProject_Add_StepDependencies(gperftools_ep build libunwind_ep)

Y
yudong.cai 已提交
720 721
    file(MAKE_DIRECTORY "${GPERFTOOLS_INCLUDE_DIR}")

Y
yudong.cai 已提交
722
    add_library(gperftools STATIC IMPORTED)
Y
yudong.cai 已提交
723 724
    set_target_properties(gperftools
            PROPERTIES IMPORTED_LOCATION "${GPERFTOOLS_STATIC_LIB}"
Y
yudong.cai 已提交
725 726
            INTERFACE_INCLUDE_DIRECTORIES "${GPERFTOOLS_INCLUDE_DIR}"
            INTERFACE_LINK_LIBRARIES libunwind)
Y
yudong.cai 已提交
727 728

    add_dependencies(gperftools gperftools_ep)
Y
yudong.cai 已提交
729
    add_dependencies(gperftools libunwind_ep)
Y
yudong.cai 已提交
730 731
endmacro()

Z
Zhiru Zhu 已提交
732
if (MILVUS_WITH_GPERFTOOLS)
Y
yudong.cai 已提交
733 734 735 736
    resolve_dependency(gperftools)

    get_target_property(GPERFTOOLS_INCLUDE_DIR gperftools INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${GPERFTOOLS_INCLUDE_DIR})
Y
yudong.cai 已提交
737
    link_directories(SYSTEM ${GPERFTOOLS_PREFIX}/lib)
Z
Zhiru Zhu 已提交
738
endif ()
Z
zhiru 已提交
739 740 741 742 743 744 745 746 747 748 749 750 751 752 753

# ----------------------------------------------------------------------
# GRPC

macro(build_grpc)
    message(STATUS "Building GRPC-${GRPC_VERSION} from source")
    set(GRPC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/grpc_ep-prefix/src/grpc_ep/install")
    set(GRPC_INCLUDE_DIR "${GRPC_PREFIX}/include")
    set(GRPC_STATIC_LIB "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(GRPC++_STATIC_LIB "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpc++${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(GRPCPP_CHANNELZ_STATIC_LIB "${GRPC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}grpcpp_channelz${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(GRPC_PROTOBUF_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/grpc_ep-prefix/src/grpc_ep/libs/opt/protobuf")
    set(GRPC_PROTOBUF_STATIC_LIB "${GRPC_PROTOBUF_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(GRPC_PROTOC_STATIC_LIB "${GRPC_PROTOBUF_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}protoc${CMAKE_STATIC_LIBRARY_SUFFIX}")

754
    ExternalProject_Add(grpc_ep
755 756 757
            URL
            ${GRPC_SOURCE_URL}
            ${EP_LOG_OPTIONS}
758
            URL_MD5
759
            "6c7ba1c3097a6fa377e9804f7b087abe"
760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775
            CONFIGURE_COMMAND
            ""
            BUILD_IN_SOURCE
            1
            BUILD_COMMAND
            ${MAKE} ${MAKE_BUILD_ARGS} prefix=${GRPC_PREFIX}
            INSTALL_COMMAND
            ${MAKE} install prefix=${GRPC_PREFIX}
            BUILD_BYPRODUCTS
            ${GRPC_STATIC_LIB}
            ${GRPC++_STATIC_LIB}
            ${GRPCPP_CHANNELZ_STATIC_LIB}
            ${GRPC_PROTOBUF_STATIC_LIB}
            ${GRPC_PROTOC_STATIC_LIB})

    ExternalProject_Add_StepDependencies(grpc_ep build zlib_ep)
Z
zhiru 已提交
776 777 778 779 780 781

    file(MAKE_DIRECTORY "${GRPC_INCLUDE_DIR}")

    add_library(grpc STATIC IMPORTED)
    set_target_properties(grpc
            PROPERTIES IMPORTED_LOCATION "${GRPC_STATIC_LIB}"
Z
Zhiru Zhu 已提交
782
            INTERFACE_INCLUDE_DIRECTORIES "${GRPC_INCLUDE_DIR}"
Z
Zhiru Zhu 已提交
783
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
784 785 786 787

    add_library(grpc++ STATIC IMPORTED)
    set_target_properties(grpc++
            PROPERTIES IMPORTED_LOCATION "${GRPC++_STATIC_LIB}"
Z
Zhiru Zhu 已提交
788
            INTERFACE_INCLUDE_DIRECTORIES "${GRPC_INCLUDE_DIR}"
Z
Zhiru Zhu 已提交
789
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
790 791 792 793

    add_library(grpcpp_channelz STATIC IMPORTED)
    set_target_properties(grpcpp_channelz
            PROPERTIES IMPORTED_LOCATION "${GRPCPP_CHANNELZ_STATIC_LIB}"
Z
Zhiru Zhu 已提交
794
            INTERFACE_INCLUDE_DIRECTORIES "${GRPC_INCLUDE_DIR}"
Z
Zhiru Zhu 已提交
795
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
796 797 798

    add_library(grpc_protobuf STATIC IMPORTED)
    set_target_properties(grpc_protobuf
Z
Zhiru Zhu 已提交
799
            PROPERTIES IMPORTED_LOCATION "${GRPC_PROTOBUF_STATIC_LIB}"
Z
Zhiru Zhu 已提交
800
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
801 802 803

    add_library(grpc_protoc STATIC IMPORTED)
    set_target_properties(grpc_protoc
Z
Zhiru Zhu 已提交
804
            PROPERTIES IMPORTED_LOCATION "${GRPC_PROTOC_STATIC_LIB}"
Z
Zhiru Zhu 已提交
805
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
806 807 808 809 810 811 812 813

    add_dependencies(grpc grpc_ep)
    add_dependencies(grpc++ grpc_ep)
    add_dependencies(grpcpp_channelz grpc_ep)
    add_dependencies(grpc_protobuf grpc_ep)
    add_dependencies(grpc_protoc grpc_ep)
endmacro()

Z
Zhiru Zhu 已提交
814
if (MILVUS_WITH_GRPC)
Z
zhiru 已提交
815
    resolve_dependency(GRPC)
Z
zhiru 已提交
816

Z
zhiru 已提交
817 818 819
    get_target_property(GRPC_INCLUDE_DIR grpc INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${GRPC_INCLUDE_DIR})
    link_directories(SYSTEM ${GRPC_PREFIX}/lib)
Z
zhiru 已提交
820

Z
zhiru 已提交
821 822 823
    set(GRPC_THIRD_PARTY_DIR ${CMAKE_CURRENT_BINARY_DIR}/grpc_ep-prefix/src/grpc_ep/third_party)
    include_directories(SYSTEM ${GRPC_THIRD_PARTY_DIR}/protobuf/src)
    link_directories(SYSTEM ${GRPC_PROTOBUF_LIB_DIR})
Z
Zhiru Zhu 已提交
824
endif ()
Z
Zhiru Zhu 已提交
825 826 827 828 829 830 831 832 833 834 835 836 837

# ----------------------------------------------------------------------
# zlib

macro(build_zlib)
    message(STATUS "Building ZLIB-${ZLIB_VERSION} from source")
    set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep-prefix/src/zlib_ep")
    set(ZLIB_STATIC_LIB_NAME libz.a)
    set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}")
    set(ZLIB_INCLUDE_DIR "${ZLIB_PREFIX}/include")
    set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}"
            -DBUILD_SHARED_LIBS=OFF)

838
    ExternalProject_Add(zlib_ep
839 840 841
            URL
            ${ZLIB_SOURCE_URL}
            ${EP_LOG_OPTIONS}
842 843
            URL_MD5
            "0095d2d2d1f3442ce1318336637b695f"
844 845 846 847 848 849 850
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            BUILD_BYPRODUCTS
            "${ZLIB_STATIC_LIB}"
            CMAKE_ARGS
            ${ZLIB_CMAKE_ARGS})
Z
Zhiru Zhu 已提交
851 852 853 854 855 856 857 858 859 860

    file(MAKE_DIRECTORY "${ZLIB_INCLUDE_DIR}")
    add_library(zlib STATIC IMPORTED)
    set_target_properties(zlib
            PROPERTIES IMPORTED_LOCATION "${ZLIB_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIR}")

    add_dependencies(zlib zlib_ep)
endmacro()

Z
Zhiru Zhu 已提交
861
if (MILVUS_WITH_ZLIB)
Z
Zhiru Zhu 已提交
862 863 864 865
    resolve_dependency(ZLIB)

    get_target_property(ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
Z
Zhiru Zhu 已提交
866
endif ()
Z
Zhiru Zhu 已提交
867 868 869 870 871 872 873 874 875 876 877 878 879 880 881

# ----------------------------------------------------------------------
# opentracing

macro(build_opentracing)
    message(STATUS "Building OPENTRACING-${OPENTRACING_VERSION} from source")
    set(OPENTRACING_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/opentracing_ep-prefix/src/opentracing_ep")
    set(OPENTRACING_STATIC_LIB "${OPENTRACING_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentracing${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(OPENTRACING_MOCK_TRACER_STATIC_LIB "${OPENTRACING_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentracing_mocktracer${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(OPENTRACING_INCLUDE_DIR "${OPENTRACING_PREFIX}/include")
    set(OPENTRACING_CMAKE_ARGS
            ${EP_COMMON_CMAKE_ARGS}
            "-DCMAKE_INSTALL_PREFIX=${OPENTRACING_PREFIX}"
            -DBUILD_SHARED_LIBS=OFF)

882
    ExternalProject_Add(opentracing_ep
Z
Zhiru Zhu 已提交
883 884 885
            URL
            ${OPENTRACING_SOURCE_URL}
            ${EP_LOG_OPTIONS}
886 887
            URL_MD5
            "e598ba4b81ae8e1ceed8cd8bbf86f2fd"
Z
Zhiru Zhu 已提交
888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918
            CMAKE_ARGS
            ${OPENTRACING_CMAKE_ARGS}
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            BUILD_BYPRODUCTS
            ${OPENTRACING_STATIC_LIB}
            ${OPENTRACING_MOCK_TRACER_STATIC_LIB}
            )

    file(MAKE_DIRECTORY "${OPENTRACING_INCLUDE_DIR}")
    add_library(opentracing STATIC IMPORTED)
    set_target_properties(opentracing
            PROPERTIES IMPORTED_LOCATION "${OPENTRACING_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${OPENTRACING_INCLUDE_DIR}")

    add_library(opentracing_mocktracer STATIC IMPORTED)
    set_target_properties(opentracing_mocktracer
            PROPERTIES IMPORTED_LOCATION "${OPENTRACING_MOCK_TRACER_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${OPENTRACING_INCLUDE_DIR}")

    add_dependencies(opentracing opentracing_ep)
    add_dependencies(opentracing_mocktracer opentracing_ep)
endmacro()

if (MILVUS_WITH_OPENTRACING)
    resolve_dependency(Opentracing)

    get_target_property(OPENTRACING_INCLUDE_DIR opentracing INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${OPENTRACING_INCLUDE_DIR})
endif ()
919 920 921 922 923 924 925 926 927

# ----------------------------------------------------------------------
# fiu
macro(build_fiu)
    message(STATUS "Building FIU-${FIU_VERSION} from source")
    set(FIU_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/fiu_ep-prefix/src/fiu_ep")
    set(FIU_SHARED_LIB "${FIU_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}fiu${CMAKE_SHARED_LIBRARY_SUFFIX}")
    set(FIU_INCLUDE_DIR "${FIU_PREFIX}/include")

928
    ExternalProject_Add(fiu_ep
929 930 931
            URL
            ${FIU_SOURCE_URL}
            ${EP_LOG_OPTIONS}
932 933
            URL_MD5
            "75f9d076daf964c9410611701f07c61b"
934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961
            CONFIGURE_COMMAND
            ""
            BUILD_IN_SOURCE
            1
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            INSTALL_COMMAND
            ${MAKE}
            "PREFIX=${FIU_PREFIX}"
            install
            BUILD_BYPRODUCTS
            ${FIU_SHARED_LIB}
            )

        file(MAKE_DIRECTORY "${FIU_INCLUDE_DIR}")
        add_library(fiu SHARED IMPORTED)
    set_target_properties(fiu
        PROPERTIES IMPORTED_LOCATION "${FIU_SHARED_LIB}"
        INTERFACE_INCLUDE_DIRECTORIES "${FIU_INCLUDE_DIR}")

    add_dependencies(fiu fiu_ep)
endmacro()

resolve_dependency(fiu)

get_target_property(FIU_INCLUDE_DIR fiu INTERFACE_INCLUDE_DIRECTORIES)
include_directories(SYSTEM ${FIU_INCLUDE_DIR})
C
Cai Yudong 已提交
962

B
BossZou 已提交
963 964 965 966 967 968 969 970 971 972 973
# ----------------------------------------------------------------------
# oatpp
macro(build_oatpp)
    message(STATUS "Building oatpp-${OATPP_VERSION} from source")
    set(OATPP_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/oatpp_ep-prefix/src/oatpp_ep")
    set(OATPP_STATIC_LIB "${OATPP_PREFIX}/lib/oatpp-${OATPP_VERSION}/${CMAKE_STATIC_LIBRARY_PREFIX}oatpp${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(OATPP_INCLUDE_DIR "${OATPP_PREFIX}/include/oatpp-${OATPP_VERSION}/oatpp")
    set(OATPP_DIR_SRC "${OATPP_PREFIX}/src")
    set(OATPP_DIR_LIB "${OATPP_PREFIX}/lib")

    set(OATPP_CMAKE_ARGS
974
            ${EP_COMMON_CMAKE_ARGS}
B
BossZou 已提交
975 976 977 978
            "-DCMAKE_INSTALL_PREFIX=${OATPP_PREFIX}"
            -DCMAKE_INSTALL_LIBDIR=lib
            -DBUILD_SHARED_LIBS=OFF
            -DOATPP_BUILD_TESTS=OFF
979 980 981
            -DOATPP_DISABLE_LOGV=ON
            -DOATPP_DISABLE_LOGD=ON
            -DOATPP_DISABLE_LOGI=ON
B
BossZou 已提交
982 983 984
            )


985
    ExternalProject_Add(oatpp_ep
B
BossZou 已提交
986 987 988
            URL
            ${OATPP_SOURCE_URL}
            ${EP_LOG_OPTIONS}
989 990
            URL_MD5
            "ae7143a8014ffed77c5340ac29af29f4"
B
BossZou 已提交
991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015
            CMAKE_ARGS
            ${OATPP_CMAKE_ARGS}
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            BUILD_BYPRODUCTS
            ${OATPP_STATIC_LIB}
            )

    file(MAKE_DIRECTORY "${OATPP_INCLUDE_DIR}")
    add_library(oatpp STATIC IMPORTED)
    set_target_properties(oatpp
            PROPERTIES IMPORTED_LOCATION "${OATPP_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${OATPP_INCLUDE_DIR}")

    add_dependencies(oatpp oatpp_ep)
endmacro()

if (MILVUS_WITH_OATPP)
    resolve_dependency(oatpp)

    get_target_property(OATPP_INCLUDE_DIR oatpp INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${OATPP_INCLUDE_DIR})
endif ()

C
Cai Yudong 已提交
1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044
# ----------------------------------------------------------------------
# aws
macro(build_aws)
    message(STATUS "Building aws-${AWS_VERSION} from source")
    set(AWS_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/aws_ep-prefix/src/aws_ep")

    set(AWS_CMAKE_ARGS
            ${EP_COMMON_TOOLCHAIN}
            "-DCMAKE_INSTALL_PREFIX=${AWS_PREFIX}"
            -DCMAKE_BUILD_TYPE=Release
            -DCMAKE_INSTALL_LIBDIR=lib
            -DBUILD_ONLY=s3
            -DBUILD_SHARED_LIBS=off
            -DENABLE_TESTING=off
            -DENABLE_UNITY_BUILD=on
            -DNO_ENCRYPTION=off)

    set(AWS_CPP_SDK_CORE_STATIC_LIB
            "${AWS_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}aws-cpp-sdk-core${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(AWS_CPP_SDK_S3_STATIC_LIB
            "${AWS_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}aws-cpp-sdk-s3${CMAKE_STATIC_LIBRARY_SUFFIX}")
    set(AWS_INCLUDE_DIR "${AWS_PREFIX}/include")
    set(AWS_CMAKE_ARGS
            ${AWS_CMAKE_ARGS}
            -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
            -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
            -DCMAKE_C_FLAGS=${EP_C_FLAGS}
            -DCMAKE_CXX_FLAGS=${EP_CXX_FLAGS})

1045
    ExternalProject_Add(aws_ep
C
Cai Yudong 已提交
1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112
            ${EP_LOG_OPTIONS}
            CMAKE_ARGS
            ${AWS_CMAKE_ARGS}
            BUILD_COMMAND
            ${MAKE}
            ${MAKE_BUILD_ARGS}
            INSTALL_DIR
            ${AWS_PREFIX}
            URL
            ${AWS_SOURCE_URL}
            BUILD_BYPRODUCTS
            "${AWS_CPP_SDK_S3_STATIC_LIB}"
            "${AWS_CPP_SDK_CORE_STATIC_LIB}")

    file(MAKE_DIRECTORY "${AWS_INCLUDE_DIR}")
    add_library(aws-cpp-sdk-s3 STATIC IMPORTED)
    add_library(aws-cpp-sdk-core STATIC IMPORTED)

    set_target_properties(aws-cpp-sdk-s3
            PROPERTIES
            IMPORTED_LOCATION "${AWS_CPP_SDK_S3_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${AWS_INCLUDE_DIR}"
            )

    set_target_properties(aws-cpp-sdk-core
            PROPERTIES
            IMPORTED_LOCATION "${AWS_CPP_SDK_CORE_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${AWS_INCLUDE_DIR}"
            )

    if(REDHAT_FOUND)
        set_target_properties(aws-cpp-sdk-s3
                PROPERTIES
                INTERFACE_LINK_LIBRARIES
                "${AWS_PREFIX}/lib64/libaws-c-event-stream.a;${AWS_PREFIX}/lib64/libaws-checksums.a;${AWS_PREFIX}/lib64/libaws-c-common.a")
        set_target_properties(aws-cpp-sdk-core
                PROPERTIES
                INTERFACE_LINK_LIBRARIES
                "${AWS_PREFIX}/lib64/libaws-c-event-stream.a;${AWS_PREFIX}/lib64/libaws-checksums.a;${AWS_PREFIX}/lib64/libaws-c-common.a")
    else()
        set_target_properties(aws-cpp-sdk-s3
                PROPERTIES
                INTERFACE_LINK_LIBRARIES
                "${AWS_PREFIX}/lib/libaws-c-event-stream.a;${AWS_PREFIX}/lib/libaws-checksums.a;${AWS_PREFIX}/lib/libaws-c-common.a")
        set_target_properties(aws-cpp-sdk-core
                PROPERTIES
                INTERFACE_LINK_LIBRARIES
                "${AWS_PREFIX}/lib/libaws-c-event-stream.a;${AWS_PREFIX}/lib/libaws-checksums.a;${AWS_PREFIX}/lib/libaws-c-common.a")
    endif()

    add_dependencies(aws-cpp-sdk-s3 aws_ep)
    add_dependencies(aws-cpp-sdk-core aws_ep)

endmacro()

if(MILVUS_WITH_AWS)
    resolve_dependency(AWS)

    link_directories(SYSTEM ${AWS_PREFIX}/lib)

    get_target_property(AWS_CPP_SDK_S3_INCLUDE_DIR aws-cpp-sdk-s3 INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${AWS_CPP_SDK_S3_INCLUDE_DIR})

    get_target_property(AWS_CPP_SDK_CORE_INCLUDE_DIR aws-cpp-sdk-core INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${AWS_CPP_SDK_CORE_INCLUDE_DIR})

endif()