未验证 提交 b045200c 编写于 作者: X XuanYang-cn 提交者: GitHub

Optimize thirdparty libunwind and gperftools download & compile processes (#3305)

* runable gperftools
Signed-off-by: Nyangxuan <xuan.yang@zilliz.com>

* add imported global to targets gperftools
Signed-off-by: Nyangxuan <xuan.yang@zilliz.com>

* optimized runable
Signed-off-by: Nyangxuan <xuan.yang@zilliz.com>

* thirdparty download file path optimize
Signed-off-by: Nyangxuan <xuan.yang@zilliz.com>

* optimize format
Signed-off-by: Nyangxuan <xuan.yang@zilliz.com>

* rm old profilers building
Signed-off-by: Nyangxuan <xuan.yang@zilliz.com>

* change target gperftools to tcmalloc_and_profiler.a
Signed-off-by: Nyangxuan <xuan.yang@zilliz.com>
Co-authored-by: Nyangxuan <xuan.yang@zilliz.com>
上级 cb74d0a3
......@@ -66,8 +66,6 @@ set( FETCHCONTENT_BASE_DIR ${MILVUS_BINARY_DIR}/3rdparty_download )
set(FETCHCONTENT_QUIET OFF)
include( ThirdPartyPackages )
# **************************** Compiler arguments ****************************
if ( MILVUS_GPU_VERSION )
......
......@@ -14,8 +14,6 @@ set(MILVUS_THIRDPARTY_DEPENDENCIES
MySQLPP
Prometheus
SQLite
libunwind
gperftools
fiu
AWS
oatpp)
......@@ -36,10 +34,6 @@ macro(build_dependency DEPENDENCY_NAME)
build_prometheus()
elseif ("${DEPENDENCY_NAME}" STREQUAL "SQLite")
build_sqlite()
elseif ("${DEPENDENCY_NAME}" STREQUAL "libunwind")
build_libunwind()
elseif ("${DEPENDENCY_NAME}" STREQUAL "gperftools")
build_gperftools()
elseif ("${DEPENDENCY_NAME}" STREQUAL "fiu")
build_fiu()
elseif ("${DEPENDENCY_NAME}" STREQUAL "oatpp")
......@@ -236,20 +230,6 @@ else ()
"https://www.sqlite.org/2019/sqlite-autoconf-${SQLITE_VERSION}.tar.gz")
endif ()
if (DEFINED ENV{MILVUS_LIBUNWIND_URL})
set(LIBUNWIND_SOURCE_URL "$ENV{MILVUS_LIBUNWIND_URL}")
else ()
set(LIBUNWIND_SOURCE_URL
"https://github.com/libunwind/libunwind/releases/download/v${LIBUNWIND_VERSION}/libunwind-${LIBUNWIND_VERSION}.tar.gz")
endif ()
if (DEFINED ENV{MILVUS_GPERFTOOLS_URL})
set(GPERFTOOLS_SOURCE_URL "$ENV{MILVUS_GPERFTOOLS_URL}")
else ()
set(GPERFTOOLS_SOURCE_URL
"https://github.com/gperftools/gperftools/releases/download/gperftools-${GPERFTOOLS_VERSION}/gperftools-${GPERFTOOLS_VERSION}.tar.gz")
endif ()
if (DEFINED ENV{MILVUS_FIU_URL})
set(FIU_SOURCE_URL "$ENV{MILVUS_FIU_URL}")
else ()
......@@ -462,98 +442,6 @@ if (MILVUS_WITH_SQLITE)
link_directories(SYSTEM ${SQLITE_PREFIX}/lib/)
endif ()
# ----------------------------------------------------------------------
# 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}")
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})
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()
if (MILVUS_WITH_LIBUNWIND)
resolve_dependency(libunwind)
get_target_property(LIBUNWIND_INCLUDE_DIR libunwind INTERFACE_INCLUDE_DIRECTORIES)
include_directories(SYSTEM ${LIBUNWIND_INCLUDE_DIR})
endif ()
# ----------------------------------------------------------------------
# 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}")
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_Add_StepDependencies(gperftools_ep build libunwind_ep)
file(MAKE_DIRECTORY "${GPERFTOOLS_INCLUDE_DIR}")
add_library(gperftools STATIC IMPORTED)
set_target_properties(gperftools
PROPERTIES IMPORTED_LOCATION "${GPERFTOOLS_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${GPERFTOOLS_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES libunwind)
add_dependencies(gperftools gperftools_ep)
add_dependencies(gperftools libunwind_ep)
endmacro()
if (MILVUS_WITH_GPERFTOOLS)
resolve_dependency(gperftools)
get_target_property(GPERFTOOLS_INCLUDE_DIR gperftools INTERFACE_INCLUDE_DIRECTORIES)
include_directories(SYSTEM ${GPERFTOOLS_INCLUDE_DIR})
link_directories(SYSTEM ${GPERFTOOLS_PREFIX}/lib)
endif ()
# ----------------------------------------------------------------------
# fiu
macro(build_fiu)
......
......@@ -68,6 +68,7 @@ set(link_lib
utils
)
if (MILVUS_WITH_PROMETHEUS)
set(link_lib
${link_lib}
......
......@@ -109,16 +109,9 @@ if ( MILVUS_GPU_VERSION )
target_sources( milvus_engine PUBLIC ${WRAPPER_GPU_FILES} )
endif ()
# cannot be enabled together with ENABLE_CPU_PROFILING
if ( ENABLE_MEM_PROFILING )
list( APPEND THIRD_PARTY_LIBS tcmalloc )
endif ()
if ( ENABLE_CPU_PROFILING )
list( APPEND THIRD_PARTY_LIBS
PUBLIC gperftools
libunwind
)
PUBLIC gperftools )
endif ()
if ( MILVUS_WITH_PROMETHEUS )
......
......@@ -51,3 +51,8 @@ endif()
if ( MILVUS_WITH_OPENTRACING )
add_subdirectory( opentracing )
endif()
# ****************************** Thirdparty perftools ***************************************
if ( ENABLE_CPU_PROFILING )
add_subdirectory( profilers )
endif ()
......@@ -23,6 +23,7 @@ FetchContent_Declare(
grpc
URL ${GRPC_SOURCE_URL}
URL_MD5 "478215c151a144c2d8625b49ff1b70aa"
DOWNLOAD_DIR ${MILVUS_BINARY_DIR}/3rdparty_download/download
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/grpc-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/grpc-build )
......
......@@ -26,8 +26,9 @@ FetchContent_Declare(
googletest
URL ${GTEST_SOURCE_URL}
URL_MD5 "f9137c5bc18b7d74027936f0f1bfa5c8"
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/googletest-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
DOWNLOAD_DIR ${MILVUS_BINARY_DIR}/3rdparty_download/download
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/googletest-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
)
......
......@@ -24,8 +24,9 @@ FetchContent_Declare(
opentracing
URL ${OPENTRACING_SOURCE_URL}
URL_MD5 "e598ba4b81ae8e1ceed8cd8bbf86f2fd"
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/opentracing-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/opentracing-build
DOWNLOAD_DIR ${MILVUS_BINARY_DIR}/3rdparty_download/download
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/opentracing-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/opentracing-build
)
set( BUILD_SHARED_LIBS CACHE BOOL OFF FORCE)
......
#-------------------------------------------------------------------------------
# Copyright (C) 2019-2020 Zilliz. All rights reserved.
#
# 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.
#-------------------------------------------------------------------------------
if ( DEFINED ENV{MILVUS_LIBUNWIND_URL} )
set( LIBUNWIND_SOURCE_URL "$ENV{MILVUS_LIBUNWIND_URL}" )
else ()
set( LIBUNWIND_SOURCE_URL
"https://github.com/libunwind/libunwind/releases/download/v${LIBUNWIND_VERSION}/libunwind-${LIBUNWIND_VERSION}.tar.gz" )
endif ()
if ( DEFINED ENV{MILVUS_GPERFTOOLS_URL} )
set( GPERFTOOLS_SOURCE_URL "$ENV{MILVUS_GPERFTOOLS_URL}" )
else ()
set( GPERFTOOLS_SOURCE_URL
"https://github.com/gperftools/gperftools/releases/download/gperftools-${GPERFTOOLS_VERSION}/gperftools-${GPERFTOOLS_VERSION}.tar.gz" )
endif ()
# ----------------------------------------------------------------------
# libunwind
macro( build_libunwind )
message( STATUS "Building libunwind-${LIBUNWIND_VERSION} from source" )
set( LIBUNWIND_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/libunwind)
ExternalProject_Add(
libunwind_ep
PREFIX ${MILVUS_BINARY_DIR}/3rdparty_download/libunwind-subbuild
DOWNLOAD_DIR ${MILVUS_BINARY_DIR}/3rdparty_download/download
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/libunwind
URL ${LIBUNWIND_SOURCE_URL}
URL_MD5 a04f69d66d8e16f8bf3ab72a69112cd6
CONFIGURE_COMMAND <SOURCE_DIR>/configure
"--prefix=<INSTALL_DIR>"
"--quiet"
"--disable-tests"
"cc=${CCACHE_FOUND} {CMAKE_C_COMPILER}"
"cxx=${CCACHE_FOUND} {CMAKE_CXX_COMPILER}"
BUILD_COMMAND ${MAKE} ${MAKE_BUILD_ARGS}
INSTALL_COMMAND ${MAKE} install
${EP_LOG_OPTIONS} )
ExternalProject_Get_Property( libunwind_ep INSTALL_DIR )
add_library( libunwind SHARED IMPORTED )
set_target_properties(
libunwind PROPERTIES
IMPORTED_GLOBAL TRUE
IMPORTED_LOCATION "${INSTALL_DIR}/lib/libunwind.so"
INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include" )
add_dependencies( libunwind libunwind_ep )
endmacro()
# ----------------------------------------------------------------------
# gperftools
macro( build_gperftools )
message( STATUS "Building gperftools-${GPERFTOOLS_VERSION} from source" )
ExternalProject_Add(
gperftools_ep
DEPENDS libunwind_ep
PREFIX ${CMAKE_BINARY_DIR}/3rdparty_download/gperftools-subbuild
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/3rdparty_download/download
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/gperftools
URL ${GPERFTOOLS_SOURCE_URL}
URL_MD5 c6a852a817e9160c79bdb2d3101b4601
CONFIGURE_COMMAND <SOURCE_DIR>/configure
"--prefix=<INSTALL_DIR>"
"--quiet"
"cc=${CCACHE_FOUND} {CMAKE_C_COMPILER}"
"cxx=${CCACHE_FOUND} {CMAKE_CXX_COMPILER}"
BUILD_COMMAND ${MAKE} ${MAKE_BUILD_ARGS}
INSTALL_COMMAND ${MAKE} install
${EP_LOG_OPTIONS} )
ExternalProject_Get_Property( gperftools_ep INSTALL_DIR )
# libprofiler.a
add_library( gperftools STATIC IMPORTED )
set_target_properties( gperftools
PROPERTIES
IMPORTED_GLOBAL TRUE
IMPORTED_LOCATION "${INSTALL_DIR}/lib/libtcmalloc_and_profiler.a"
INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include"
INTERFACE_LINK_LIBRARIES libunwind
)
add_dependencies( gperftools gperftools_ep )
endmacro()
build_libunwind()
build_gperftools()
......@@ -23,8 +23,9 @@ FetchContent_Declare(
yaml-cpp
URL ${YAMLCPP_SOURCE_URL}
URL_MD5 "b45bf1089a382e81f6b661062c10d0c2"
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/yaml-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/yaml-build
DOWNLOAD_DIR ${MILVUS_BINARY_DIR}/3rdparty_download/download
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/yaml-src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/yaml-build
)
set( YAML_CPP_BUILD_TESTS CACHE BOOL OFF FORCE )
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册