ThirdPartyPackages.cmake 48.4 KB
Newer Older
J
jinhai 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 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.

G
groot 已提交
17
set(MILVUS_THIRDPARTY_DEPENDENCIES
J
jinhai 已提交
18

Z
zhiru 已提交
19
        GTest
Z
zhiru 已提交
20
        MySQLPP
Z
zhiru 已提交
21
        Prometheus
Z
zhiru 已提交
22 23 24
        SQLite
        SQLite_ORM
        yaml-cpp
Y
yudong.cai 已提交
25
        libunwind
Z
zhiru 已提交
26
        gperftools
Z
Zhiru Zhu 已提交
27 28
        GRPC
        ZLIB)
J
jinhai 已提交
29

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

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

macro(build_dependency DEPENDENCY_NAME)
Z
Zhiru Zhu 已提交
40
    if ("${DEPENDENCY_NAME}" STREQUAL "GTest")
Z
zhiru 已提交
41 42 43
        build_gtest()
    elseif ("${DEPENDENCY_NAME}" STREQUAL "MySQLPP")
        build_mysqlpp()
Z
zhiru 已提交
44 45
    elseif ("${DEPENDENCY_NAME}" STREQUAL "Prometheus")
        build_prometheus()
Z
zhiru 已提交
46 47 48 49
    elseif ("${DEPENDENCY_NAME}" STREQUAL "SQLite")
        build_sqlite()
    elseif ("${DEPENDENCY_NAME}" STREQUAL "SQLite_ORM")
        build_sqlite_orm()
Z
Zhiru Zhu 已提交
50
    elseif ("${DEPENDENCY_NAME}" STREQUAL "yaml-cpp")
Z
zhiru 已提交
51
        build_yamlcpp()
Z
Zhiru Zhu 已提交
52
    elseif ("${DEPENDENCY_NAME}" STREQUAL "libunwind")
Y
yudong.cai 已提交
53
        build_libunwind()
Z
Zhiru Zhu 已提交
54
    elseif ("${DEPENDENCY_NAME}" STREQUAL "gperftools")
Y
yudong.cai 已提交
55
        build_gperftools()
Z
Zhiru Zhu 已提交
56
    elseif ("${DEPENDENCY_NAME}" STREQUAL "GRPC")
Z
zhiru 已提交
57
        build_grpc()
Z
Zhiru Zhu 已提交
58
    elseif ("${DEPENDENCY_NAME}" STREQUAL "ZLIB")
Z
Zhiru Zhu 已提交
59
        build_zlib()
Z
Zhiru Zhu 已提交
60
    else ()
Z
zhiru 已提交
61 62 63
        message(FATAL_ERROR "Unknown thirdparty dependency to build: ${DEPENDENCY_NAME}")
    endif ()
endmacro()
J
jinhai 已提交
64

Q
quicksilver 已提交
65 66 67 68
# ----------------------------------------------------------------------
# Identify OS
if (UNIX)
    if (APPLE)
Z
Zhiru Zhu 已提交
69
        set(CMAKE_OS_NAME "osx" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
70 71
    else (APPLE)
        ## Check for Debian GNU/Linux ________________
Z
Zhiru Zhu 已提交
72 73 74
        find_file(DEBIAN_FOUND debian_version debconf.conf
                PATHS /etc
                )
Q
quicksilver 已提交
75
        if (DEBIAN_FOUND)
Z
Zhiru Zhu 已提交
76
            set(CMAKE_OS_NAME "debian" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
77 78
        endif (DEBIAN_FOUND)
        ##  Check for Fedora _________________________
Z
Zhiru Zhu 已提交
79 80 81
        find_file(FEDORA_FOUND fedora-release
                PATHS /etc
                )
Q
quicksilver 已提交
82
        if (FEDORA_FOUND)
Z
Zhiru Zhu 已提交
83
            set(CMAKE_OS_NAME "fedora" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
84 85
        endif (FEDORA_FOUND)
        ##  Check for RedHat _________________________
Z
Zhiru Zhu 已提交
86 87 88
        find_file(REDHAT_FOUND redhat-release inittab.RH
                PATHS /etc
                )
Q
quicksilver 已提交
89
        if (REDHAT_FOUND)
Z
Zhiru Zhu 已提交
90
            set(CMAKE_OS_NAME "redhat" CACHE STRING "Operating system name" FORCE)
Q
quicksilver 已提交
91 92 93 94 95 96 97 98
        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 已提交
99 100 101
            find_file(UBUNTU_EXTRA legal issue
                    PATHS /etc
                    )
Q
quicksilver 已提交
102 103
            if (UBUNTU_EXTRA)
                ## Scan contents of file
Z
Zhiru Zhu 已提交
104 105 106
                file(STRINGS ${UBUNTU_EXTRA} UBUNTU_FOUND
                        REGEX Ubuntu
                        )
Q
quicksilver 已提交
107 108
                ## Check result of string search
                if (UBUNTU_FOUND)
Z
Zhiru Zhu 已提交
109 110 111 112 113 114 115 116
                    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
                            )
117
                    STRING(REGEX REPLACE "\\." "_" UBUNTU_VERSION "${LSB_RELEASE_ID_SHORT}")
Q
quicksilver 已提交
118 119 120 121 122
                endif (UBUNTU_FOUND)
            endif (UBUNTU_EXTRA)
        endif (DEBIAN_FOUND)
    endif (APPLE)
endif (UNIX)
Q
quicksilver 已提交
123

Q
quicksilver 已提交
124 125 126 127
# ----------------------------------------------------------------------
# thirdparty directory
set(THIRDPARTY_DIR "${MILVUS_SOURCE_DIR}/thirdparty")

Q
quicksilver 已提交
128 129
# ----------------------------------------------------------------------
# JFrog
Z
Zhiru Zhu 已提交
130
if (NOT DEFINED USE_JFROG_CACHE)
Q
quicksilver 已提交
131
    set(USE_JFROG_CACHE "OFF")
Z
Zhiru Zhu 已提交
132 133 134
endif ()
if (USE_JFROG_CACHE STREQUAL "ON")
    if (DEFINED ENV{JFROG_ARTFACTORY_URL})
Q
quicksilver 已提交
135
        set(JFROG_ARTFACTORY_URL "$ENV{JFROG_ARTFACTORY_URL}")
Z
Zhiru Zhu 已提交
136 137
    endif ()
    if (NOT DEFINED JFROG_ARTFACTORY_URL)
Q
quicksilver 已提交
138
        message(FATAL_ERROR "JFROG_ARTFACTORY_URL is not set")
Z
Zhiru Zhu 已提交
139 140 141 142 143 144 145
    endif ()
    if (UBUNTU_FOUND)
        set(JFROG_ARTFACTORY_CACHE_URL "${JFROG_ARTFACTORY_URL}/milvus/thirdparty/cache/${CMAKE_OS_NAME}/${UBUNTU_VERSION}/${MILVUS_BUILD_ARCH}/${BUILD_TYPE}")
    else ()
        set(JFROG_ARTFACTORY_CACHE_URL "${JFROG_ARTFACTORY_URL}/milvus/thirdparty/cache/${CMAKE_OS_NAME}/${MILVUS_BUILD_ARCH}/${BUILD_TYPE}")
    endif ()
    if (DEFINED ENV{JFROG_USER_NAME})
Q
quicksilver 已提交
146
        set(JFROG_USER_NAME "$ENV{JFROG_USER_NAME}")
Z
Zhiru Zhu 已提交
147 148
    endif ()
    if (NOT DEFINED JFROG_USER_NAME)
Q
quicksilver 已提交
149
        message(FATAL_ERROR "JFROG_USER_NAME is not set")
Z
Zhiru Zhu 已提交
150 151
    endif ()
    if (DEFINED ENV{JFROG_PASSWORD})
Q
quicksilver 已提交
152
        set(JFROG_PASSWORD "$ENV{JFROG_PASSWORD}")
Z
Zhiru Zhu 已提交
153 154
    endif ()
    if (NOT DEFINED JFROG_PASSWORD)
Q
quicksilver 已提交
155
        message(FATAL_ERROR "JFROG_PASSWORD is not set")
Z
Zhiru Zhu 已提交
156
    endif ()
Q
quicksilver 已提交
157

Q
quicksilver 已提交
158
    set(THIRDPARTY_PACKAGE_CACHE "${THIRDPARTY_DIR}/cache")
Z
Zhiru Zhu 已提交
159
    if (NOT EXISTS ${THIRDPARTY_PACKAGE_CACHE})
160 161
        message(STATUS "Will create cached directory: ${THIRDPARTY_PACKAGE_CACHE}")
        file(MAKE_DIRECTORY ${THIRDPARTY_PACKAGE_CACHE})
Z
Zhiru Zhu 已提交
162 163
    endif ()
endif ()
Q
quicksilver 已提交
164

Z
zhiru 已提交
165 166
macro(resolve_dependency DEPENDENCY_NAME)
    if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO")
Z
zhiru 已提交
167
        #disable find_package for now
Z
zhiru 已提交
168 169 170 171 172 173 174
        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()
J
jinhai 已提交
175

Z
zhiru 已提交
176 177
# ----------------------------------------------------------------------
# ExternalProject options
J
jinhai 已提交
178

Z
zhiru 已提交
179 180 181 182 183
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 已提交
184 185 186
# Set -fPIC on all external projects
set(EP_CXX_FLAGS "${EP_CXX_FLAGS} -fPIC")
set(EP_C_FLAGS "${EP_C_FLAGS} -fPIC")
Z
zhiru 已提交
187 188 189 190 191 192 193 194 195

# 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 已提交
196
if (CMAKE_AR)
Z
zhiru 已提交
197
    set(EP_COMMON_TOOLCHAIN ${EP_COMMON_TOOLCHAIN} -DCMAKE_AR=${CMAKE_AR})
Z
Zhiru Zhu 已提交
198
endif ()
Z
zhiru 已提交
199

Z
Zhiru Zhu 已提交
200
if (CMAKE_RANLIB)
Z
zhiru 已提交
201
    set(EP_COMMON_TOOLCHAIN ${EP_COMMON_TOOLCHAIN} -DCMAKE_RANLIB=${CMAKE_RANLIB})
Z
Zhiru Zhu 已提交
202
endif ()
Z
zhiru 已提交
203 204 205 206 207 208 209 210 211 212 213 214 215

# 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 已提交
216
if (NOT MILVUS_VERBOSE_THIRDPARTY_BUILD)
Z
zhiru 已提交
217
    set(EP_LOG_OPTIONS LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_DOWNLOAD 1)
Z
Zhiru Zhu 已提交
218
else ()
Z
zhiru 已提交
219
    set(EP_LOG_OPTIONS)
Z
Zhiru Zhu 已提交
220
endif ()
Z
zhiru 已提交
221 222

# Ensure that a default make is set
Z
Zhiru Zhu 已提交
223
if ("${MAKE}" STREQUAL "")
Z
zhiru 已提交
224
    find_program(MAKE make)
Z
Zhiru Zhu 已提交
225
endif ()
Z
zhiru 已提交
226

Z
zhiru 已提交
227 228
if (NOT DEFINED MAKE_BUILD_ARGS)
    set(MAKE_BUILD_ARGS "-j8")
Z
Zhiru Zhu 已提交
229
endif ()
Z
zhiru 已提交
230
message(STATUS "Third Party MAKE_BUILD_ARGS = ${MAKE_BUILD_ARGS}")
Z
zhiru 已提交
231 232 233 234 235 236 237 238 239 240 241 242 243

# ----------------------------------------------------------------------
# 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 已提交
244
foreach (_VERSION_ENTRY ${TOOLCHAIN_VERSIONS_TXT})
Z
zhiru 已提交
245
    # Exclude comments
Z
Zhiru Zhu 已提交
246
    if (NOT _VERSION_ENTRY MATCHES "^[^#][A-Za-z0-9-_]+_VERSION=")
Z
zhiru 已提交
247
        continue()
Z
Zhiru Zhu 已提交
248
    endif ()
Z
zhiru 已提交
249 250 251 252 253

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

    # Skip blank or malformed lines
Z
Zhiru Zhu 已提交
254
    if (${_LIB_VERSION} STREQUAL "")
Z
zhiru 已提交
255
        continue()
Z
Zhiru Zhu 已提交
256
    endif ()
Z
zhiru 已提交
257 258 259 260 261

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

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

G
groot 已提交
264 265
if (DEFINED ENV{MILVUS_GTEST_URL})
    set(GTEST_SOURCE_URL "$ENV{MILVUS_GTEST_URL}")
Z
zhiru 已提交
266 267 268
else ()
    set(GTEST_SOURCE_URL
            "https://github.com/google/googletest/archive/release-${GTEST_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
269
endif ()
Q
quicksilver 已提交
270
set(GTEST_MD5 "2e6fbeb6a91310a16efe181886c59596")
Z
zhiru 已提交
271

Z
Zhiru Zhu 已提交
272
if (DEFINED ENV{MILVUS_MYSQLPP_URL})
Z
zhiru 已提交
273
    set(MYSQLPP_SOURCE_URL "$ENV{MILVUS_MYSQLPP_URL}")
Z
Zhiru Zhu 已提交
274
else ()
275
    set(MYSQLPP_SOURCE_URL "https://tangentsoft.com/mysqlpp/releases/mysql++-${MYSQLPP_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
276
endif ()
Q
quicksilver 已提交
277
set(MYSQLPP_MD5 "cda38b5ecc0117de91f7c42292dd1e79")
Z
zhiru 已提交
278

G
groot 已提交
279
if (DEFINED ENV{MILVUS_PROMETHEUS_URL})
Z
zhiru 已提交
280 281 282
    set(PROMETHEUS_SOURCE_URL "$ENV{PROMETHEUS_OPENBLAS_URL}")
else ()
    set(PROMETHEUS_SOURCE_URL
Z
zhiru 已提交
283
            https://github.com/jupp0r/prometheus-cpp.git)
Z
Zhiru Zhu 已提交
284
endif ()
Z
zhiru 已提交
285

Z
Zhiru Zhu 已提交
286
if (DEFINED ENV{MILVUS_SQLITE_URL})
G
groot 已提交
287
    set(SQLITE_SOURCE_URL "$ENV{MILVUS_SQLITE_URL}")
Z
Zhiru Zhu 已提交
288
else ()
Z
zhiru 已提交
289 290
    set(SQLITE_SOURCE_URL
            "https://www.sqlite.org/2019/sqlite-autoconf-${SQLITE_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
291
endif ()
Q
quicksilver 已提交
292
set(SQLITE_MD5 "3c68eb400f8354605736cd55400e1572")
Z
zhiru 已提交
293

Z
Zhiru Zhu 已提交
294
if (DEFINED ENV{MILVUS_SQLITE_ORM_URL})
G
groot 已提交
295
    set(SQLITE_ORM_SOURCE_URL "$ENV{MILVUS_SQLITE_ORM_URL}")
Z
Zhiru Zhu 已提交
296
else ()
Z
zhiru 已提交
297
    set(SQLITE_ORM_SOURCE_URL
Z
zhiru 已提交
298
            "https://github.com/fnc12/sqlite_orm/archive/${SQLITE_ORM_VERSION}.zip")
Z
Zhiru Zhu 已提交
299
endif ()
Q
quicksilver 已提交
300
set(SQLITE_ORM_MD5 "ba9a405a8a1421c093aa8ce988ff8598")
Z
zhiru 已提交
301

Z
Zhiru Zhu 已提交
302
if (DEFINED ENV{MILVUS_YAMLCPP_URL})
G
groot 已提交
303
    set(YAMLCPP_SOURCE_URL "$ENV{MILVUS_YAMLCPP_URL}")
Z
Zhiru Zhu 已提交
304
else ()
Z
zhiru 已提交
305
    set(YAMLCPP_SOURCE_URL "https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-${YAMLCPP_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
306
endif ()
Q
quicksilver 已提交
307
set(YAMLCPP_MD5 "5b943e9af0060d0811148b037449ef82")
Z
zhiru 已提交
308

Z
Zhiru Zhu 已提交
309
if (DEFINED ENV{MILVUS_LIBUNWIND_URL})
Y
yudong.cai 已提交
310
    set(LIBUNWIND_SOURCE_URL "$ENV{MILVUS_LIBUNWIND_URL}")
Z
Zhiru Zhu 已提交
311
else ()
Y
yudong.cai 已提交
312 313
    set(LIBUNWIND_SOURCE_URL
            "https://github.com/libunwind/libunwind/releases/download/v${LIBUNWIND_VERSION}/libunwind-${LIBUNWIND_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
314
endif ()
Q
quicksilver 已提交
315
set(LIBUNWIND_MD5 "a04f69d66d8e16f8bf3ab72a69112cd6")
Y
yudong.cai 已提交
316

Z
Zhiru Zhu 已提交
317
if (DEFINED ENV{MILVUS_GPERFTOOLS_URL})
Y
yudong.cai 已提交
318
    set(GPERFTOOLS_SOURCE_URL "$ENV{MILVUS_GPERFTOOLS_URL}")
Z
Zhiru Zhu 已提交
319
else ()
Y
yudong.cai 已提交
320 321
    set(GPERFTOOLS_SOURCE_URL
            "https://github.com/gperftools/gperftools/releases/download/gperftools-${GPERFTOOLS_VERSION}/gperftools-${GPERFTOOLS_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
322
endif ()
Q
quicksilver 已提交
323
set(GPERFTOOLS_MD5 "c6a852a817e9160c79bdb2d3101b4601")
Y
yudong.cai 已提交
324

Z
Zhiru Zhu 已提交
325
if (DEFINED ENV{MILVUS_GRPC_URL})
Z
zhiru 已提交
326
    set(GRPC_SOURCE_URL "$ENV{MILVUS_GRPC_URL}")
Z
Zhiru Zhu 已提交
327
else ()
Z
zhiru 已提交
328
    set(GRPC_SOURCE_URL
329
            "https://github.com/youny626/grpc-milvus/archive/${GRPC_VERSION}.zip")
Z
Zhiru Zhu 已提交
330
endif ()
Z
zhiru 已提交
331
set(GRPC_MD5 "0362ba219f59432c530070b5f5c3df73")
Z
zhiru 已提交
332

Z
Zhiru Zhu 已提交
333
if (DEFINED ENV{MILVUS_ZLIB_URL})
Z
Zhiru Zhu 已提交
334
    set(ZLIB_SOURCE_URL "$ENV{MILVUS_ZLIB_URL}")
Z
Zhiru Zhu 已提交
335
else ()
Z
Zhiru Zhu 已提交
336
    set(ZLIB_SOURCE_URL "https://github.com/madler/zlib/archive/${ZLIB_VERSION}.tar.gz")
Z
Zhiru Zhu 已提交
337
endif ()
Z
Zhiru Zhu 已提交
338
set(ZLIB_MD5 "0095d2d2d1f3442ce1318336637b695f")
Z
zhiru 已提交
339 340 341 342 343 344 345 346 347

# ----------------------------------------------------------------------
# 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 已提交
348
    if (APPLE)
Z
zhiru 已提交
349 350 351 352 353
        set(GTEST_CMAKE_CXX_FLAGS
                ${GTEST_CMAKE_CXX_FLAGS}
                -DGTEST_USE_OWN_TR1_TUPLE=1
                -Wno-unused-value
                -Wno-ignored-attributes)
Z
Zhiru Zhu 已提交
354
    endif ()
Z
zhiru 已提交
355 356 357 358 359 360 361 362 363 364 365 366

    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 已提交
367 368 369 370 371 372
            -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 已提交
373
            )
Q
quicksilver 已提交
374

Z
Zhiru Zhu 已提交
375
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398
        set(GTEST_CACHE_PACKAGE_NAME "googletest_${GTEST_MD5}.tar.gz")
        set(GTEST_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${GTEST_CACHE_PACKAGE_NAME}")
        set(GTEST_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${GTEST_CACHE_PACKAGE_NAME}")

        file(DOWNLOAD ${GTEST_CACHE_URL} ${GTEST_CACHE_PACKAGE_PATH} STATUS status)
        list(GET status 0 status_code)
        message(STATUS "DOWNLOADING FROM ${GTEST_CACHE_URL} TO ${GTEST_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
        if (NOT status_code EQUAL 0)
            ExternalProject_Add(googletest_ep
                    URL
                    ${GTEST_SOURCE_URL}
                    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})

            ExternalProject_Create_Cache(googletest_ep ${GTEST_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/googletest_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${GTEST_CACHE_URL})
Z
Zhiru Zhu 已提交
399
        else ()
Q
quicksilver 已提交
400
            ExternalProject_Use_Cache(googletest_ep ${GTEST_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
401 402
        endif ()
    else ()
Q
quicksilver 已提交
403 404 405 406 407 408 409 410 411 412 413 414 415
        ExternalProject_Add(googletest_ep
                URL
                ${GTEST_SOURCE_URL}
                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 Zhu 已提交
416
    endif ()
Z
zhiru 已提交
417 418 419

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

    add_library(gtest STATIC IMPORTED)
Z
zhiru 已提交
422
    set_target_properties(gtest
Z
Zhiru Zhu 已提交
423 424
            PROPERTIES IMPORTED_LOCATION "${GTEST_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
J
jinhai 已提交
425 426

    add_library(gtest_main STATIC IMPORTED)
Z
zhiru 已提交
427
    set_target_properties(gtest_main
Z
Zhiru Zhu 已提交
428 429
            PROPERTIES IMPORTED_LOCATION "${GTEST_MAIN_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
Z
zhiru 已提交
430

Z
zhiru 已提交
431 432 433 434 435
    add_library(gmock STATIC IMPORTED)
    set_target_properties(gmock
            PROPERTIES IMPORTED_LOCATION "${GMOCK_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")

Z
zhiru 已提交
436 437
    add_dependencies(gtest googletest_ep)
    add_dependencies(gtest_main googletest_ep)
Z
zhiru 已提交
438
    add_dependencies(gmock googletest_ep)
Z
zhiru 已提交
439 440 441

endmacro()

G
groot 已提交
442
if (MILVUS_BUILD_TESTS)
Z
zhiru 已提交
443 444
    resolve_dependency(GTest)

Z
Zhiru Zhu 已提交
445 446
    if (NOT GTEST_VENDORED)
    endif ()
S
starlord 已提交
447

Z
zhiru 已提交
448
    get_target_property(GTEST_INCLUDE_DIR gtest INTERFACE_INCLUDE_DIRECTORIES)
Z
zhiru 已提交
449
    link_directories(SYSTEM "${GTEST_PREFIX}/lib")
Z
zhiru 已提交
450
    include_directories(SYSTEM ${GTEST_INCLUDE_DIR})
Z
Zhiru Zhu 已提交
451
endif ()
Z
zhiru 已提交
452

Z
zhiru 已提交
453
# ----------------------------------------------------------------------
Z
zhiru 已提交
454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469
# 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")

Z
Zhiru Zhu 已提交
470
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
471 472 473 474
        set(MYSQLPP_CACHE_PACKAGE_NAME "mysqlpp_${MYSQLPP_MD5}.tar.gz")
        set(MYSQLPP_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${MYSQLPP_CACHE_PACKAGE_NAME}")
        set(MYSQLPP_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${MYSQLPP_CACHE_PACKAGE_NAME}")

Q
quicksilver 已提交
475 476 477
        execute_process(COMMAND wget -q --method HEAD ${MYSQLPP_CACHE_URL} RESULT_VARIABLE return_code)
        message(STATUS "Check the remote file ${MYSQLPP_CACHE_URL}. return code = ${return_code}")
        if (NOT return_code EQUAL 0)
Q
quicksilver 已提交
478 479 480 481 482 483 484 485 486 487 488 489 490 491 492
            externalproject_add(mysqlpp_ep
                    URL
                    ${MYSQLPP_SOURCE_URL}
                    ${EP_LOG_OPTIONS}
                    CONFIGURE_COMMAND
                    "./configure"
                    ${MYSQLPP_CONFIGURE_ARGS}
                    BUILD_COMMAND
                    ${MAKE} ${MAKE_BUILD_ARGS}
                    BUILD_IN_SOURCE
                    1
                    BUILD_BYPRODUCTS
                    ${MYSQLPP_SHARED_LIB})

            ExternalProject_Create_Cache(mysqlpp_ep ${MYSQLPP_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/mysqlpp_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${MYSQLPP_CACHE_URL})
Z
Zhiru Zhu 已提交
493
        else ()
Q
quicksilver 已提交
494 495 496 497 498
            file(DOWNLOAD ${MYSQLPP_CACHE_URL} ${MYSQLPP_CACHE_PACKAGE_PATH} STATUS status)
            list(GET status 0 status_code)
            message(STATUS "DOWNLOADING FROM ${MYSQLPP_CACHE_URL} TO ${MYSQLPP_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
            if (status_code EQUAL 0)
                ExternalProject_Use_Cache(mysqlpp_ep ${MYSQLPP_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
499 500 501
            endif ()
        endif ()
    else ()
Q
quicksilver 已提交
502 503 504 505 506 507 508 509 510 511 512 513 514
        externalproject_add(mysqlpp_ep
                URL
                ${MYSQLPP_SOURCE_URL}
                ${EP_LOG_OPTIONS}
                CONFIGURE_COMMAND
                "./configure"
                ${MYSQLPP_CONFIGURE_ARGS}
                BUILD_COMMAND
                ${MAKE} ${MAKE_BUILD_ARGS}
                BUILD_IN_SOURCE
                1
                BUILD_BYPRODUCTS
                ${MYSQLPP_SHARED_LIB})
Z
Zhiru Zhu 已提交
515
    endif ()
Z
zhiru 已提交
516

Q
quicksilver 已提交
517
    file(MAKE_DIRECTORY "${MYSQLPP_INCLUDE_DIR}")
Z
zhiru 已提交
518 519 520 521 522 523 524 525 526 527 528
    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 已提交
529
if (MILVUS_WITH_MYSQLPP)
Z
zhiru 已提交
530 531 532 533 534

    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 已提交
535
endif ()
Z
zhiru 已提交
536 537

# ----------------------------------------------------------------------
Z
zhiru 已提交
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557
# 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 已提交
558 559
            "-DCMAKE_INSTALL_PREFIX=${PROMETHEUS_PREFIX}"
            -DCMAKE_BUILD_TYPE=Release)
Z
zhiru 已提交
560

Z
Zhiru Zhu 已提交
561
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
562
        execute_process(COMMAND sh -c "git ls-remote --heads --tags ${PROMETHEUS_SOURCE_URL} ${PROMETHEUS_VERSION} | cut -f 1" OUTPUT_VARIABLE PROMETHEUS_LAST_COMMIT_ID)
Z
Zhiru Zhu 已提交
563
        if (${PROMETHEUS_LAST_COMMIT_ID} MATCHES "^[^#][a-z0-9]+")
Q
quicksilver 已提交
564 565 566 567 568
            string(MD5 PROMETHEUS_COMBINE_MD5 "${PROMETHEUS_LAST_COMMIT_ID}")
            set(PROMETHEUS_CACHE_PACKAGE_NAME "prometheus_${PROMETHEUS_COMBINE_MD5}.tar.gz")
            set(PROMETHEUS_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${PROMETHEUS_CACHE_PACKAGE_NAME}")
            set(PROMETHEUS_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${PROMETHEUS_CACHE_PACKAGE_NAME}")

Q
quicksilver 已提交
569 570 571
            execute_process(COMMAND wget -q --method HEAD ${PROMETHEUS_CACHE_URL} RESULT_VARIABLE return_code)
            message(STATUS "Check the remote file ${PROMETHEUS_CACHE_URL}. return code = ${return_code}")
            if (NOT return_code EQUAL 0)
Q
quicksilver 已提交
572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596
                externalproject_add(prometheus_ep
                        GIT_REPOSITORY
                        ${PROMETHEUS_SOURCE_URL}
                        GIT_TAG
                        ${PROMETHEUS_VERSION}
                        GIT_SHALLOW
                        TRUE
                        ${EP_LOG_OPTIONS}
                        CMAKE_ARGS
                        ${PROMETHEUS_CMAKE_ARGS}
                        BUILD_COMMAND
                        ${MAKE}
                        ${MAKE_BUILD_ARGS}
                        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}")

                ExternalProject_Create_Cache(prometheus_ep ${PROMETHEUS_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/prometheus_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${PROMETHEUS_CACHE_URL})
Z
Zhiru Zhu 已提交
597
            else ()
Q
quicksilver 已提交
598 599 600 601 602
                file(DOWNLOAD ${PROMETHEUS_CACHE_URL} ${PROMETHEUS_CACHE_PACKAGE_PATH} STATUS status)
                list(GET status 0 status_code)
                message(STATUS "DOWNLOADING FROM ${PROMETHEUS_CACHE_URL} TO ${PROMETHEUS_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
                if (status_code EQUAL 0)
                    ExternalProject_Use_Cache(prometheus_ep ${PROMETHEUS_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
603 604 605
                endif ()
            endif ()
        else ()
Q
quicksilver 已提交
606
            message(FATAL_ERROR "The last commit ID of \"${PROMETHEUS_SOURCE_URL}\" repository don't match!")
Z
Zhiru Zhu 已提交
607 608
        endif ()
    else ()
Q
quicksilver 已提交
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631
        externalproject_add(prometheus_ep
                GIT_REPOSITORY
                ${PROMETHEUS_SOURCE_URL}
                GIT_TAG
                ${PROMETHEUS_VERSION}
                GIT_SHALLOW
                TRUE
                ${EP_LOG_OPTIONS}
                CMAKE_ARGS
                ${PROMETHEUS_CMAKE_ARGS}
                BUILD_COMMAND
                ${MAKE}
                ${MAKE_BUILD_ARGS}
                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 Zhu 已提交
632
    endif ()
Z
zhiru 已提交
633

634
    file(MAKE_DIRECTORY "${PROMETHEUS_PREFIX}/push/include")
Z
zhiru 已提交
635 636
    add_library(prometheus-cpp-push STATIC IMPORTED)
    set_target_properties(prometheus-cpp-push
637 638
            PROPERTIES IMPORTED_LOCATION "${PROMETHEUS_PUSH_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${PROMETHEUS_PREFIX}/push/include")
Z
zhiru 已提交
639 640
    add_dependencies(prometheus-cpp-push prometheus_ep)

641
    file(MAKE_DIRECTORY "${PROMETHEUS_PREFIX}/pull/include")
Z
zhiru 已提交
642 643
    add_library(prometheus-cpp-pull STATIC IMPORTED)
    set_target_properties(prometheus-cpp-pull
644 645
            PROPERTIES IMPORTED_LOCATION "${PROMETHEUS_PULL_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${PROMETHEUS_PREFIX}/pull/include")
Z
zhiru 已提交
646 647
    add_dependencies(prometheus-cpp-pull prometheus_ep)

648
    file(MAKE_DIRECTORY "${PROMETHEUS_PREFIX}/core/include")
Z
zhiru 已提交
649 650
    add_library(prometheus-cpp-core STATIC IMPORTED)
    set_target_properties(prometheus-cpp-core
651 652
            PROPERTIES IMPORTED_LOCATION "${PROMETHEUS_CORE_STATIC_LIB}"
            INTERFACE_INCLUDE_DIRECTORIES "${PROMETHEUS_PREFIX}/core/include")
Z
zhiru 已提交
653 654 655
    add_dependencies(prometheus-cpp-core prometheus_ep)
endmacro()

Z
Zhiru Zhu 已提交
656
if (MILVUS_WITH_PROMETHEUS)
Z
zhiru 已提交
657 658 659 660 661 662 663 664 665 666 667

    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 已提交
668

Z
Zhiru Zhu 已提交
669
endif ()
Z
zhiru 已提交
670

Z
zhiru 已提交
671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687
# ----------------------------------------------------------------------
# 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}")

Z
Zhiru Zhu 已提交
688
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
689 690 691 692
        set(SQLITE_CACHE_PACKAGE_NAME "sqlite_${SQLITE_MD5}.tar.gz")
        set(SQLITE_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${SQLITE_CACHE_PACKAGE_NAME}")
        set(SQLITE_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${SQLITE_CACHE_PACKAGE_NAME}")

Q
quicksilver 已提交
693 694 695
        execute_process(COMMAND wget -q --method HEAD ${SQLITE_CACHE_URL} RESULT_VARIABLE return_code)
        message(STATUS "Check the remote file ${SQLITE_CACHE_URL}. return code = ${return_code}")
        if (NOT return_code EQUAL 0)
Q
quicksilver 已提交
696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711
            externalproject_add(sqlite_ep
                    URL
                    ${SQLITE_SOURCE_URL}
                    ${EP_LOG_OPTIONS}
                    CONFIGURE_COMMAND
                    "./configure"
                    ${SQLITE_CONFIGURE_ARGS}
                    BUILD_COMMAND
                    ${MAKE}
                    ${MAKE_BUILD_ARGS}
                    BUILD_IN_SOURCE
                    1
                    BUILD_BYPRODUCTS
                    "${SQLITE_STATIC_LIB}")

            ExternalProject_Create_Cache(sqlite_ep ${SQLITE_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/sqlite_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${SQLITE_CACHE_URL})
Z
Zhiru Zhu 已提交
712
        else ()
Q
quicksilver 已提交
713 714 715 716 717
            file(DOWNLOAD ${SQLITE_CACHE_URL} ${SQLITE_CACHE_PACKAGE_PATH} STATUS status)
            list(GET status 0 status_code)
            message(STATUS "DOWNLOADING FROM ${SQLITE_CACHE_URL} TO ${SQLITE_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
            if (status_code EQUAL 0)
                ExternalProject_Use_Cache(sqlite_ep ${SQLITE_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
718 719 720
            endif ()
        endif ()
    else ()
Q
quicksilver 已提交
721 722 723 724 725 726 727 728 729 730 731 732 733 734
        externalproject_add(sqlite_ep
                URL
                ${SQLITE_SOURCE_URL}
                ${EP_LOG_OPTIONS}
                CONFIGURE_COMMAND
                "./configure"
                ${SQLITE_CONFIGURE_ARGS}
                BUILD_COMMAND
                ${MAKE}
                ${MAKE_BUILD_ARGS}
                BUILD_IN_SOURCE
                1
                BUILD_BYPRODUCTS
                "${SQLITE_STATIC_LIB}")
Z
Zhiru Zhu 已提交
735
    endif ()
Z
zhiru 已提交
736

Q
quicksilver 已提交
737
    file(MAKE_DIRECTORY "${SQLITE_INCLUDE_DIR}")
Z
zhiru 已提交
738 739 740 741 742 743 744 745 746
    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 已提交
747
if (MILVUS_WITH_SQLITE)
Z
zhiru 已提交
748 749 750
    resolve_dependency(SQLite)
    include_directories(SYSTEM "${SQLITE_INCLUDE_DIR}")
    link_directories(SYSTEM ${SQLITE_PREFIX}/lib/)
Z
Zhiru Zhu 已提交
751
endif ()
Z
zhiru 已提交
752 753 754 755 756 757 758 759

# ----------------------------------------------------------------------
# SQLite_ORM

macro(build_sqlite_orm)
    message(STATUS "Building SQLITE_ORM-${SQLITE_ORM_VERSION} from source")

    set(SQLITE_ORM_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/sqlite_orm_ep-prefix")
Z
zhiru 已提交
760 761 762
    set(SQLITE_ORM_TAR_NAME "${SQLITE_ORM_PREFIX}/sqlite_orm-${SQLITE_ORM_VERSION}.tar.gz")
    set(SQLITE_ORM_INCLUDE_DIR "${SQLITE_ORM_PREFIX}/sqlite_orm-${SQLITE_ORM_VERSION}/include/sqlite_orm")
    if (NOT EXISTS ${SQLITE_ORM_INCLUDE_DIR})
Z
zhiru 已提交
763
        file(MAKE_DIRECTORY ${SQLITE_ORM_PREFIX})
Z
zhiru 已提交
764
        file(DOWNLOAD ${SQLITE_ORM_SOURCE_URL}
Z
zhiru 已提交
765 766
                ${SQLITE_ORM_TAR_NAME})
        execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf ${SQLITE_ORM_TAR_NAME}
Z
Zhiru Zhu 已提交
767
                WORKING_DIRECTORY ${SQLITE_ORM_PREFIX})
Z
zhiru 已提交
768 769 770 771 772

    endif ()

endmacro()

Z
Zhiru Zhu 已提交
773
if (MILVUS_WITH_SQLITE_ORM)
Z
zhiru 已提交
774 775
    resolve_dependency(SQLite_ORM)
    include_directories(SYSTEM "${SQLITE_ORM_INCLUDE_DIR}")
Z
Zhiru Zhu 已提交
776
endif ()
Z
zhiru 已提交
777 778 779 780 781 782 783 784

# ----------------------------------------------------------------------
# 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 已提交
785
    set(YAMLCPP_INCLUDE_DIR "${YAMLCPP_PREFIX}/include")
Z
zhiru 已提交
786 787 788 789 790 791 792
    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)

Z
Zhiru Zhu 已提交
793
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
794 795 796
        set(YAMLCPP_CACHE_PACKAGE_NAME "yaml-cpp_${YAMLCPP_MD5}.tar.gz")
        set(YAMLCPP_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${YAMLCPP_CACHE_PACKAGE_NAME}")
        set(YAMLCPP_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${YAMLCPP_CACHE_PACKAGE_NAME}")
Z
zhiru 已提交
797

Q
quicksilver 已提交
798 799 800
        execute_process(COMMAND wget -q --method HEAD ${YAMLCPP_CACHE_URL} RESULT_VARIABLE return_code)
        message(STATUS "Check the remote file ${YAMLCPP_CACHE_URL}. return code = ${return_code}")
        if (NOT return_code EQUAL 0)
Q
quicksilver 已提交
801 802 803 804 805 806 807 808 809 810 811 812 813
            externalproject_add(yaml-cpp_ep
                    URL
                    ${YAMLCPP_SOURCE_URL}
                    ${EP_LOG_OPTIONS}
                    BUILD_COMMAND
                    ${MAKE}
                    ${MAKE_BUILD_ARGS}
                    BUILD_BYPRODUCTS
                    "${YAMLCPP_STATIC_LIB}"
                    CMAKE_ARGS
                    ${YAMLCPP_CMAKE_ARGS})

            ExternalProject_Create_Cache(yaml-cpp_ep ${YAMLCPP_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/yaml-cpp_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${YAMLCPP_CACHE_URL})
Z
Zhiru Zhu 已提交
814
        else ()
Q
quicksilver 已提交
815 816 817 818 819
            file(DOWNLOAD ${YAMLCPP_CACHE_URL} ${YAMLCPP_CACHE_PACKAGE_PATH} STATUS status)
            list(GET status 0 status_code)
            message(STATUS "DOWNLOADING FROM ${YAMLCPP_CACHE_URL} TO ${YAMLCPP_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
            if (status_code EQUAL 0)
                ExternalProject_Use_Cache(yaml-cpp_ep ${YAMLCPP_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
820 821 822
            endif ()
        endif ()
    else ()
Q
quicksilver 已提交
823 824 825 826 827 828 829 830 831 832 833
        externalproject_add(yaml-cpp_ep
                URL
                ${YAMLCPP_SOURCE_URL}
                ${EP_LOG_OPTIONS}
                BUILD_COMMAND
                ${MAKE}
                ${MAKE_BUILD_ARGS}
                BUILD_BYPRODUCTS
                "${YAMLCPP_STATIC_LIB}"
                CMAKE_ARGS
                ${YAMLCPP_CMAKE_ARGS})
Z
Zhiru Zhu 已提交
834
    endif ()
Z
zhiru 已提交
835

Q
quicksilver 已提交
836
    file(MAKE_DIRECTORY "${YAMLCPP_INCLUDE_DIR}")
Z
zhiru 已提交
837 838 839
    add_library(yaml-cpp STATIC IMPORTED)
    set_target_properties(yaml-cpp
            PROPERTIES IMPORTED_LOCATION "${YAMLCPP_STATIC_LIB}"
Q
quicksilver 已提交
840
            INTERFACE_INCLUDE_DIRECTORIES "${YAMLCPP_INCLUDE_DIR}")
Z
zhiru 已提交
841 842 843 844

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

Z
Zhiru Zhu 已提交
845
if (MILVUS_WITH_YAMLCPP)
Z
zhiru 已提交
846
    resolve_dependency(yaml-cpp)
S
starlord 已提交
847

Z
zhiru 已提交
848 849 850
    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 已提交
851
endif ()
Z
zhiru 已提交
852

Y
yudong.cai 已提交
853 854 855 856 857 858 859 860 861 862
# ----------------------------------------------------------------------
# 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}")

Z
Zhiru Zhu 已提交
863
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887
        set(LIBUNWIND_CACHE_PACKAGE_NAME "libunwind_${LIBUNWIND_MD5}.tar.gz")
        set(LIBUNWIND_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${LIBUNWIND_CACHE_PACKAGE_NAME}")
        set(LIBUNWIND_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${LIBUNWIND_CACHE_PACKAGE_NAME}")

        execute_process(COMMAND wget -q --method HEAD ${LIBUNWIND_CACHE_URL} RESULT_VARIABLE return_code)
        message(STATUS "Check the remote file ${LIBUNWIND_CACHE_URL}. return code = ${return_code}")
        if (NOT return_code EQUAL 0)
            externalproject_add(libunwind_ep
                    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})

            ExternalProject_Create_Cache(libunwind_ep ${LIBUNWIND_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/libunwind_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${LIBUNWIND_CACHE_URL})
Z
Zhiru Zhu 已提交
888
        else ()
Q
quicksilver 已提交
889 890 891 892 893
            file(DOWNLOAD ${LIBUNWIND_CACHE_URL} ${LIBUNWIND_CACHE_PACKAGE_PATH} STATUS status)
            list(GET status 0 status_code)
            message(STATUS "DOWNLOADING FROM ${LIBUNWIND_CACHE_URL} TO ${LIBUNWIND_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
            if (status_code EQUAL 0)
                ExternalProject_Use_Cache(libunwind_ep ${LIBUNWIND_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
894 895 896
            endif ()
        endif ()
    else ()
Q
quicksilver 已提交
897 898 899 900 901 902 903 904 905 906 907 908 909 910 911
        externalproject_add(libunwind_ep
                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})
Z
Zhiru Zhu 已提交
912
    endif ()
Y
yudong.cai 已提交
913 914 915 916 917 918 919 920 921 922 923

    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 已提交
924
if (MILVUS_WITH_LIBUNWIND)
Y
yudong.cai 已提交
925 926 927 928
    resolve_dependency(libunwind)

    get_target_property(LIBUNWIND_INCLUDE_DIR libunwind INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${LIBUNWIND_INCLUDE_DIR})
Z
Zhiru Zhu 已提交
929
endif ()
Y
yudong.cai 已提交
930 931 932 933 934 935 936 937 938 939 940

# ----------------------------------------------------------------------
# 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}")

Z
Zhiru Zhu 已提交
941
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965
        set(GPERFTOOLS_CACHE_PACKAGE_NAME "gperftools_${GPERFTOOLS_MD5}.tar.gz")
        set(GPERFTOOLS_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${GPERFTOOLS_CACHE_PACKAGE_NAME}")
        set(GPERFTOOLS_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${GPERFTOOLS_CACHE_PACKAGE_NAME}")

        execute_process(COMMAND wget -q --method HEAD ${GPERFTOOLS_CACHE_URL} RESULT_VARIABLE return_code)
        message(STATUS "Check the remote file ${GPERFTOOLS_CACHE_URL}. return code = ${return_code}")
        if (NOT return_code EQUAL 0)
            externalproject_add(gperftools_ep
                    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})

            ExternalProject_Create_Cache(gperftools_ep ${GPERFTOOLS_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/gperftools_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${GPERFTOOLS_CACHE_URL})
Z
Zhiru Zhu 已提交
966
        else ()
Q
quicksilver 已提交
967 968 969 970 971
            file(DOWNLOAD ${GPERFTOOLS_CACHE_URL} ${GPERFTOOLS_CACHE_PACKAGE_PATH} STATUS status)
            list(GET status 0 status_code)
            message(STATUS "DOWNLOADING FROM ${GPERFTOOLS_CACHE_URL} TO ${GPERFTOOLS_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
            if (status_code EQUAL 0)
                ExternalProject_Use_Cache(gperftools_ep ${GPERFTOOLS_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
972 973 974
            endif ()
        endif ()
    else ()
Q
quicksilver 已提交
975 976 977 978 979 980 981 982 983 984 985 986 987 988 989
        externalproject_add(gperftools_ep
                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})
Z
Zhiru Zhu 已提交
990
    endif ()
Y
yudong.cai 已提交
991

Q
quicksilver 已提交
992 993
    ExternalProject_Add_StepDependencies(gperftools_ep build libunwind_ep)

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

Y
yudong.cai 已提交
996
    add_library(gperftools STATIC IMPORTED)
Y
yudong.cai 已提交
997 998
    set_target_properties(gperftools
            PROPERTIES IMPORTED_LOCATION "${GPERFTOOLS_STATIC_LIB}"
Y
yudong.cai 已提交
999 1000
            INTERFACE_INCLUDE_DIRECTORIES "${GPERFTOOLS_INCLUDE_DIR}"
            INTERFACE_LINK_LIBRARIES libunwind)
Y
yudong.cai 已提交
1001 1002

    add_dependencies(gperftools gperftools_ep)
Y
yudong.cai 已提交
1003
    add_dependencies(gperftools libunwind_ep)
Y
yudong.cai 已提交
1004 1005
endmacro()

Z
Zhiru Zhu 已提交
1006
if (MILVUS_WITH_GPERFTOOLS)
Y
yudong.cai 已提交
1007 1008 1009 1010
    resolve_dependency(gperftools)

    get_target_property(GPERFTOOLS_INCLUDE_DIR gperftools INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${GPERFTOOLS_INCLUDE_DIR})
Y
yudong.cai 已提交
1011
    link_directories(SYSTEM ${GPERFTOOLS_PREFIX}/lib)
Z
Zhiru Zhu 已提交
1012
endif ()
Z
zhiru 已提交
1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027

# ----------------------------------------------------------------------
# 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}")

Z
Zhiru Zhu 已提交
1028
    if (USE_JFROG_CACHE STREQUAL "ON")
Q
quicksilver 已提交
1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054
        set(GRPC_CACHE_PACKAGE_NAME "grpc_${GRPC_MD5}.tar.gz")
        set(GRPC_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${GRPC_CACHE_PACKAGE_NAME}")
        set(GRPC_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${GRPC_CACHE_PACKAGE_NAME}")

        execute_process(COMMAND wget -q --method HEAD ${GRPC_CACHE_URL} RESULT_VARIABLE return_code)
        message(STATUS "Check the remote file ${GRPC_CACHE_URL}. return code = ${return_code}")
        if (NOT return_code EQUAL 0)
            externalproject_add(grpc_ep
                    URL
                    ${GRPC_SOURCE_URL}
                    ${EP_LOG_OPTIONS}
                    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})

Z
Zhiru Zhu 已提交
1055 1056
            ExternalProject_Add_StepDependencies(grpc_ep build zlib_ep)

Q
quicksilver 已提交
1057
            ExternalProject_Create_Cache(grpc_ep ${GRPC_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/grpc_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${GRPC_CACHE_URL})
Z
Zhiru Zhu 已提交
1058
        else ()
Q
quicksilver 已提交
1059 1060 1061 1062 1063
            file(DOWNLOAD ${GRPC_CACHE_URL} ${GRPC_CACHE_PACKAGE_PATH} STATUS status)
            list(GET status 0 status_code)
            message(STATUS "DOWNLOADING FROM ${GRPC_CACHE_URL} TO ${GRPC_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
            if (status_code EQUAL 0)
                ExternalProject_Use_Cache(grpc_ep ${GRPC_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
1064 1065 1066
            endif ()
        endif ()
    else ()
Q
quicksilver 已提交
1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084
        externalproject_add(grpc_ep
                URL
                ${GRPC_SOURCE_URL}
                ${EP_LOG_OPTIONS}
                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})
Z
Zhiru Zhu 已提交
1085 1086 1087

        ExternalProject_Add_StepDependencies(grpc_ep build zlib_ep)

Z
Zhiru Zhu 已提交
1088
    endif ()
Z
zhiru 已提交
1089 1090 1091 1092 1093 1094

    file(MAKE_DIRECTORY "${GRPC_INCLUDE_DIR}")

    add_library(grpc STATIC IMPORTED)
    set_target_properties(grpc
            PROPERTIES IMPORTED_LOCATION "${GRPC_STATIC_LIB}"
Z
Zhiru Zhu 已提交
1095
            INTERFACE_INCLUDE_DIRECTORIES "${GRPC_INCLUDE_DIR}"
Z
Zhiru Zhu 已提交
1096
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
1097 1098 1099 1100

    add_library(grpc++ STATIC IMPORTED)
    set_target_properties(grpc++
            PROPERTIES IMPORTED_LOCATION "${GRPC++_STATIC_LIB}"
Z
Zhiru Zhu 已提交
1101
            INTERFACE_INCLUDE_DIRECTORIES "${GRPC_INCLUDE_DIR}"
Z
Zhiru Zhu 已提交
1102
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
1103 1104 1105 1106

    add_library(grpcpp_channelz STATIC IMPORTED)
    set_target_properties(grpcpp_channelz
            PROPERTIES IMPORTED_LOCATION "${GRPCPP_CHANNELZ_STATIC_LIB}"
Z
Zhiru Zhu 已提交
1107
            INTERFACE_INCLUDE_DIRECTORIES "${GRPC_INCLUDE_DIR}"
Z
Zhiru Zhu 已提交
1108
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
1109 1110 1111

    add_library(grpc_protobuf STATIC IMPORTED)
    set_target_properties(grpc_protobuf
Z
Zhiru Zhu 已提交
1112
            PROPERTIES IMPORTED_LOCATION "${GRPC_PROTOBUF_STATIC_LIB}"
Z
Zhiru Zhu 已提交
1113
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
1114 1115 1116

    add_library(grpc_protoc STATIC IMPORTED)
    set_target_properties(grpc_protoc
Z
Zhiru Zhu 已提交
1117
            PROPERTIES IMPORTED_LOCATION "${GRPC_PROTOC_STATIC_LIB}"
Z
Zhiru Zhu 已提交
1118
            INTERFACE_LINK_LIBRARIES "zlib")
Z
zhiru 已提交
1119 1120 1121 1122 1123 1124 1125 1126

    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 已提交
1127
if (MILVUS_WITH_GRPC)
Z
zhiru 已提交
1128
    resolve_dependency(GRPC)
Z
zhiru 已提交
1129

Z
zhiru 已提交
1130 1131 1132
    get_target_property(GRPC_INCLUDE_DIR grpc INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${GRPC_INCLUDE_DIR})
    link_directories(SYSTEM ${GRPC_PREFIX}/lib)
Z
zhiru 已提交
1133

Z
zhiru 已提交
1134 1135 1136
    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 已提交
1137
endif ()
Z
Zhiru Zhu 已提交
1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150

# ----------------------------------------------------------------------
# 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)

Z
Zhiru Zhu 已提交
1151
    if (USE_JFROG_CACHE STREQUAL "ON")
Z
Zhiru Zhu 已提交
1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171
        set(ZLIB_CACHE_PACKAGE_NAME "zlib_${ZLIB_MD5}.tar.gz")
        set(ZLIB_CACHE_URL "${JFROG_ARTFACTORY_CACHE_URL}/${ZLIB_CACHE_PACKAGE_NAME}")
        set(ZLIB_CACHE_PACKAGE_PATH "${THIRDPARTY_PACKAGE_CACHE}/${ZLIB_CACHE_PACKAGE_NAME}")

        execute_process(COMMAND wget -q --method HEAD ${ZLIB_CACHE_URL} RESULT_VARIABLE return_code)
        message(STATUS "Check the remote file ${ZLIB_CACHE_URL}. return code = ${return_code}")
        if (NOT return_code EQUAL 0)
            externalproject_add(zlib_ep
                    URL
                    ${ZLIB_SOURCE_URL}
                    ${EP_LOG_OPTIONS}
                    BUILD_COMMAND
                    ${MAKE}
                    ${MAKE_BUILD_ARGS}
                    BUILD_BYPRODUCTS
                    "${ZLIB_STATIC_LIB}"
                    CMAKE_ARGS
                    ${ZLIB_CMAKE_ARGS})

            ExternalProject_Create_Cache(zlib_ep ${ZLIB_CACHE_PACKAGE_PATH} "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep-prefix" ${JFROG_USER_NAME} ${JFROG_PASSWORD} ${ZLIB_CACHE_URL})
Z
Zhiru Zhu 已提交
1172
        else ()
Z
Zhiru Zhu 已提交
1173 1174 1175 1176 1177
            file(DOWNLOAD ${ZLIB_CACHE_URL} ${ZLIB_CACHE_PACKAGE_PATH} STATUS status)
            list(GET status 0 status_code)
            message(STATUS "DOWNLOADING FROM ${ZLIB_CACHE_URL} TO ${ZLIB_CACHE_PACKAGE_PATH}. STATUS = ${status_code}")
            if (status_code EQUAL 0)
                ExternalProject_Use_Cache(zlib_ep ${ZLIB_CACHE_PACKAGE_PATH} ${CMAKE_CURRENT_BINARY_DIR})
Z
Zhiru Zhu 已提交
1178 1179 1180
            endif ()
        endif ()
    else ()
Z
Zhiru Zhu 已提交
1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191
        externalproject_add(zlib_ep
                URL
                ${ZLIB_SOURCE_URL}
                ${EP_LOG_OPTIONS}
                BUILD_COMMAND
                ${MAKE}
                ${MAKE_BUILD_ARGS}
                BUILD_BYPRODUCTS
                "${ZLIB_STATIC_LIB}"
                CMAKE_ARGS
                ${ZLIB_CMAKE_ARGS})
Z
Zhiru Zhu 已提交
1192
    endif ()
Z
Zhiru Zhu 已提交
1193 1194 1195 1196 1197 1198 1199 1200 1201 1202

    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 已提交
1203
if (MILVUS_WITH_ZLIB)
Z
Zhiru Zhu 已提交
1204 1205 1206 1207
    resolve_dependency(ZLIB)

    get_target_property(ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
    include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
Z
Zhiru Zhu 已提交
1208
endif ()