mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
Rearrange core cmakelists (#2900)
* sort out cmake commands in before project Signed-off-by: yangxuan <xuan.yang@zilliz.com> * update Signed-off-by: Xiangyu Wang <xy.wang@zilliz.com> * rearrange core CmakeLists.txt Signed-off-by: yangxuan <xuan.yang@zilliz.com> * fix conflict Signed-off-by: yangxuan <xuan.yang@zilliz.com> * fix bugs on ENABLE_FIU Signed-off-by: yangxuan <xuan.yang@zilliz.com> Co-authored-by: yangxuan <xuan.yang@zilliz.com> Co-authored-by: Xiangyu Wang <xy.wang@zilliz.com>
This commit is contained in:
parent
924960b69d
commit
29fab296b1
@ -11,147 +11,51 @@
|
||||
# or implied. See the License for the specific language governing permissions and limitations under the License.
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
message(STATUS "Building using CMake version: ${CMAKE_VERSION}")
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
include(Utils)
|
||||
|
||||
# get build time
|
||||
MACRO(GET_CURRENT_TIME CURRENT_TIME)
|
||||
execute_process(COMMAND "date" +"%Y-%m-%d %H:%M.%S" OUTPUT_VARIABLE ${CURRENT_TIME})
|
||||
ENDMACRO(GET_CURRENT_TIME)
|
||||
|
||||
GET_CURRENT_TIME(BUILD_TIME)
|
||||
string(REGEX REPLACE "\n" "" BUILD_TIME ${BUILD_TIME})
|
||||
# **************************** Build time, type and code version ****************************
|
||||
get_current_time(BUILD_TIME)
|
||||
message(STATUS "Build time = ${BUILD_TIME}")
|
||||
|
||||
if (NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build.")
|
||||
endif ()
|
||||
|
||||
# get Milvus version via branch name
|
||||
set(GIT_BRANCH_NAME_REGEX "[0-9]+\\.[0-9]+\\.[0-9]")
|
||||
|
||||
MACRO(GET_GIT_BRANCH_NAME GIT_BRANCH_NAME)
|
||||
execute_process(COMMAND sh "-c" "git log --decorate | head -n 1 | sed 's/.*(\\(.*\\))/\\1/' | sed 's/.*, //' | sed 's=[a-zA-Z]*\/==g'"
|
||||
OUTPUT_VARIABLE ${GIT_BRANCH_NAME})
|
||||
if (NOT GIT_BRANCH_NAME MATCHES "${GIT_BRANCH_NAME_REGEX}")
|
||||
execute_process(COMMAND "git" rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE ${GIT_BRANCH_NAME})
|
||||
endif ()
|
||||
if (NOT GIT_BRANCH_NAME MATCHES "${GIT_BRANCH_NAME_REGEX}")
|
||||
execute_process(COMMAND "git" symbolic-ref --short -q HEAD HEAD OUTPUT_VARIABLE ${GIT_BRANCH_NAME})
|
||||
endif ()
|
||||
ENDMACRO(GET_GIT_BRANCH_NAME)
|
||||
|
||||
GET_GIT_BRANCH_NAME(GIT_BRANCH_NAME)
|
||||
message(STATUS "GIT_BRANCH_NAME = ${GIT_BRANCH_NAME}")
|
||||
if (NOT GIT_BRANCH_NAME STREQUAL "")
|
||||
string(REGEX REPLACE "\n" "" GIT_BRANCH_NAME ${GIT_BRANCH_NAME})
|
||||
endif ()
|
||||
|
||||
set(MILVUS_VERSION "${GIT_BRANCH_NAME}")
|
||||
string(REGEX MATCH "${GIT_BRANCH_NAME_REGEX}" MILVUS_VERSION "${MILVUS_VERSION}")
|
||||
|
||||
# get last commit id
|
||||
MACRO(GET_LAST_COMMIT_ID LAST_COMMIT_ID)
|
||||
execute_process(COMMAND sh "-c" "git log --decorate | head -n 1 | awk '{print $2}'"
|
||||
OUTPUT_VARIABLE ${LAST_COMMIT_ID})
|
||||
ENDMACRO(GET_LAST_COMMIT_ID)
|
||||
|
||||
GET_LAST_COMMIT_ID(LAST_COMMIT_ID)
|
||||
message(STATUS "LAST_COMMIT_ID = ${LAST_COMMIT_ID}")
|
||||
if (NOT LAST_COMMIT_ID STREQUAL "")
|
||||
string(REGEX REPLACE "\n" "" LAST_COMMIT_ID ${LAST_COMMIT_ID})
|
||||
set(LAST_COMMIT_ID "${LAST_COMMIT_ID}")
|
||||
else ()
|
||||
set(LAST_COMMIT_ID "Unknown")
|
||||
endif ()
|
||||
|
||||
# set build type
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
set(BUILD_TYPE "Release")
|
||||
else ()
|
||||
set(BUILD_TYPE "Debug")
|
||||
endif ()
|
||||
get_build_type(TARGET BUILD_TYPE
|
||||
DEFAULT "Release")
|
||||
message(STATUS "Build type = ${BUILD_TYPE}")
|
||||
|
||||
project(milvus VERSION "${MILVUS_VERSION}")
|
||||
project(milvus_engine LANGUAGES CXX)
|
||||
|
||||
unset(CMAKE_EXPORT_COMPILE_COMMANDS CACHE)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
set(MILVUS_VERSION_MAJOR "${milvus_VERSION_MAJOR}")
|
||||
set(MILVUS_VERSION_MINOR "${milvus_VERSION_MINOR}")
|
||||
set(MILVUS_VERSION_PATCH "${milvus_VERSION_PATCH}")
|
||||
|
||||
if (MILVUS_VERSION_MAJOR STREQUAL ""
|
||||
OR MILVUS_VERSION_MINOR STREQUAL ""
|
||||
OR MILVUS_VERSION_PATCH STREQUAL "")
|
||||
message(WARNING "Failed to determine Milvus version from git branch name")
|
||||
set(MILVUS_VERSION "0.10.0")
|
||||
endif ()
|
||||
|
||||
get_milvus_version(TARGET MILVUS_VERSION
|
||||
DEFAULT "0.10.0")
|
||||
message(STATUS "Build version = ${MILVUS_VERSION}")
|
||||
get_last_commit_id(LAST_COMMIT_ID)
|
||||
message(STATUS "LAST_COMMIT_ID = ${LAST_COMMIT_ID}")
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/version.h @ONLY)
|
||||
|
||||
message(STATUS "Milvus version: "
|
||||
"${MILVUS_VERSION_MAJOR}.${MILVUS_VERSION_MINOR}.${MILVUS_VERSION_PATCH} "
|
||||
"(full: '${MILVUS_VERSION}')")
|
||||
# unset(CMAKE_EXPORT_COMPILE_COMMANDS CACHE)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# **************************** Project ****************************
|
||||
project(milvus VERSION "${MILVUS_VERSION}")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED on)
|
||||
|
||||
if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
||||
message(STATUS "Building milvus_engine on x86 architecture")
|
||||
set(MILVUS_BUILD_ARCH x86_64)
|
||||
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "(ppc)")
|
||||
message(STATUS "Building milvus_engine on ppc architecture")
|
||||
set(MILVUS_BUILD_ARCH ppc64le)
|
||||
else ()
|
||||
message(WARNING "Unknown processor type")
|
||||
message(WARNING "CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}")
|
||||
set(MILVUS_BUILD_ARCH unknown)
|
||||
endif ()
|
||||
|
||||
# Ensure that a default make is set
|
||||
if ("${MAKE}" STREQUAL "")
|
||||
if (NOT MSVC)
|
||||
find_program(MAKE make)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
find_path(MYSQL_INCLUDE_DIR
|
||||
NAMES "mysql.h"
|
||||
PATH_SUFFIXES "mysql")
|
||||
if (${MYSQL_INCLUDE_DIR} STREQUAL "MYSQL_INCLUDE_DIR-NOTFOUND")
|
||||
message(FATAL_ERROR "Could not found MySQL include directory")
|
||||
else ()
|
||||
include_directories(${MYSQL_INCLUDE_DIR})
|
||||
endif ()
|
||||
|
||||
set(MILVUS_SOURCE_DIR ${PROJECT_SOURCE_DIR})
|
||||
set(MILVUS_BINARY_DIR ${PROJECT_BINARY_DIR})
|
||||
set(MILVUS_ENGINE_SRC ${PROJECT_SOURCE_DIR}/src)
|
||||
set(MILVUS_THIRDPARTY_SRC ${PROJECT_SOURCE_DIR}/thirdparty)
|
||||
|
||||
# **************************** Dependencies ****************************
|
||||
include(BuildUtils)
|
||||
import_mysql_inc()
|
||||
|
||||
include(ExternalProject)
|
||||
include(DefineOptions)
|
||||
include(BuildUtils)
|
||||
include(ThirdPartyPackages)
|
||||
|
||||
if (MILVUS_USE_CCACHE)
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
if (CCACHE_FOUND)
|
||||
message(STATUS "Using ccache: ${CCACHE_FOUND}")
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_FOUND})
|
||||
# let ccache preserve C++ comments, because some of them may be
|
||||
# meaningful to the compiler
|
||||
set(ENV{CCACHE_COMMENTS} "1")
|
||||
endif (CCACHE_FOUND)
|
||||
endif ()
|
||||
using_ccache_if_defined(MILVUS_USE_CCACHE)
|
||||
|
||||
# **************************** Compiler arguments ****************************
|
||||
|
||||
if (MILVUS_GPU_VERSION)
|
||||
message(STATUS "Building Milvus GPU version")
|
||||
@ -163,32 +67,23 @@ else ()
|
||||
message(STATUS "Building Milvus CPU version")
|
||||
endif ()
|
||||
|
||||
if (MILVUS_WITH_PROMETHEUS)
|
||||
add_compile_definitions("MILVUS_WITH_PROMETHEUS")
|
||||
endif ()
|
||||
set_milvus_definition(MILVUS_WITH_PROMETHEUS "MILVUS_WITH_PROMETHEUS")
|
||||
set_milvus_definition(ENABLE_CPU_PROFILING "ENABLE_CPU_PROFILING")
|
||||
set_milvus_definition(MILVUS_WITH_FIU "FIU_ENABLE")
|
||||
|
||||
message("ENABLE_CPU_PROFILING = ${ENABLE_CPU_PROFILING}")
|
||||
if (ENABLE_CPU_PROFILING STREQUAL "ON")
|
||||
ADD_DEFINITIONS(-DENABLE_CPU_PROFILING)
|
||||
endif()
|
||||
|
||||
if (MILVUS_WITH_FIU)
|
||||
add_compile_definitions("FIU_ENABLE")
|
||||
endif ()
|
||||
config_summary()
|
||||
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -fPIC -DELPP_THREAD_SAFE -fopenmp")
|
||||
if (MILVUS_GPU_VERSION)
|
||||
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O3")
|
||||
endif ()
|
||||
else ()
|
||||
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O3")
|
||||
elseif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fPIC -DELPP_THREAD_SAFE -fopenmp")
|
||||
if (MILVUS_GPU_VERSION)
|
||||
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O0 -g")
|
||||
endif ()
|
||||
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O0 -g")
|
||||
else ()
|
||||
message(FATAL_ERROR "Unknown CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
||||
endif ()
|
||||
|
||||
config_summary()
|
||||
# **************************** Source files ****************************
|
||||
add_subdirectory(src)
|
||||
|
||||
if (BUILD_UNIT_TEST STREQUAL "ON")
|
||||
@ -201,21 +96,20 @@ endif ()
|
||||
|
||||
add_custom_target(Clean-All COMMAND ${CMAKE_BUILD_TOOL} clean)
|
||||
|
||||
# **************************** Install ****************************
|
||||
|
||||
if ("${MILVUS_DB_PATH}" STREQUAL "")
|
||||
set(MILVUS_DB_PATH "${CMAKE_INSTALL_PREFIX}")
|
||||
endif ()
|
||||
|
||||
if (MILVUS_GPU_VERSION)
|
||||
set(GPU_ENABLE "true")
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.template
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.yaml
|
||||
@ONLY)
|
||||
else ()
|
||||
set(GPU_ENABLE "false")
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.template
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.yaml
|
||||
@ONLY)
|
||||
endif ()
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.template
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.yaml
|
||||
@ONLY)
|
||||
|
||||
install(DIRECTORY scripts/
|
||||
DESTINATION scripts
|
||||
@ -233,6 +127,8 @@ install(FILES
|
||||
DESTINATION
|
||||
conf)
|
||||
|
||||
|
||||
# **************************** Coding style check tools ****************************
|
||||
find_package(Python COMPONENTS Interpreter Development)
|
||||
find_package(ClangTools)
|
||||
set(BUILD_SUPPORT_DIR "${CMAKE_SOURCE_DIR}/build-support")
|
||||
|
||||
@ -202,3 +202,30 @@ function(ADD_THIRDPARTY_LIB LIB_NAME)
|
||||
message(FATAL_ERROR "No static or shared library provided for ${LIB_NAME}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
MACRO (import_mysql_inc)
|
||||
find_path (MYSQL_INCLUDE_DIR
|
||||
NAMES "mysql.h"
|
||||
PATH_SUFFIXES "mysql")
|
||||
|
||||
if (${MYSQL_INCLUDE_DIR} STREQUAL "MYSQL_INCLUDE_DIR-NOTFOUND")
|
||||
message(FATAL_ERROR "Could not found MySQL include directory")
|
||||
else ()
|
||||
include_directories(${MYSQL_INCLUDE_DIR})
|
||||
endif ()
|
||||
ENDMACRO (import_mysql_inc)
|
||||
|
||||
MACRO(using_ccache_if_defined MILVUS_USE_CCACHE)
|
||||
if (MILVUS_USE_CCACHE)
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
if (CCACHE_FOUND)
|
||||
message(STATUS "Using ccache: ${CCACHE_FOUND}")
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_FOUND})
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_FOUND})
|
||||
# let ccache preserve C++ comments, because some of them may be
|
||||
# meaningful to the compiler
|
||||
set(ENV{CCACHE_COMMENTS} "1")
|
||||
endif (CCACHE_FOUND)
|
||||
endif ()
|
||||
ENDMACRO(using_ccache_if_defined)
|
||||
|
||||
|
||||
80
core/cmake/Utils.cmake
Normal file
80
core/cmake/Utils.cmake
Normal file
@ -0,0 +1,80 @@
|
||||
# get build time
|
||||
MACRO(get_current_time CURRENT_TIME)
|
||||
execute_process(COMMAND "date" "+%Y-%m-%d %H:%M.%S" OUTPUT_VARIABLE ${CURRENT_TIME})
|
||||
string(REGEX REPLACE "\n" "" ${CURRENT_TIME} ${${CURRENT_TIME}})
|
||||
ENDMACRO(get_current_time)
|
||||
|
||||
# get build type
|
||||
MACRO(get_build_type)
|
||||
cmake_parse_arguments(BUILD_TYPE "" "TARGET;DEFAULT" "" ${ARGN})
|
||||
if (NOT DEFINED CMAKE_BUILD_TYPE)
|
||||
set(${BUILD_TYPE_TARGET} ${BUILD_TYPE_DEFAULT})
|
||||
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
set(${BUILD_TYPE_TARGET} "Release")
|
||||
elseif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(${BUILD_TYPE_TARGET} "Debug")
|
||||
else ()
|
||||
set(${BUILD_TYPE_TARGET} ${BUILD_TYPE_DEFAULT})
|
||||
endif ()
|
||||
ENDMACRO(get_build_type)
|
||||
|
||||
# get git branch name
|
||||
MACRO(get_git_branch_name GIT_BRANCH_NAME)
|
||||
set(GIT_BRANCH_NAME_REGEX "[0-9]+\\.[0-9]+\\.[0-9]")
|
||||
|
||||
execute_process(COMMAND sh "-c" "git log --decorate | head -n 1 | sed 's/.*(\\(.*\\))/\\1/' | sed 's/.*, //' | sed 's=[a-zA-Z]*\/==g'"
|
||||
OUTPUT_VARIABLE ${GIT_BRANCH_NAME})
|
||||
|
||||
if (NOT GIT_BRANCH_NAME MATCHES "${GIT_BRANCH_NAME_REGEX}")
|
||||
execute_process(COMMAND "git" rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE ${GIT_BRANCH_NAME})
|
||||
endif ()
|
||||
|
||||
if (NOT GIT_BRANCH_NAME MATCHES "${GIT_BRANCH_NAME_REGEX}")
|
||||
execute_process(COMMAND "git" symbolic-ref -q --short HEAD OUTPUT_VARIABLE ${GIT_BRANCH_NAME})
|
||||
endif ()
|
||||
|
||||
message(DEBUG "GIT_BRANCH_NAME = ${GIT_BRANCH_NAME}")
|
||||
|
||||
# Some unexpected case
|
||||
if (NOT GIT_BRANCH_NAME STREQUAL "")
|
||||
string(REGEX REPLACE "\n" "" GIT_BRANCH_NAME ${GIT_BRANCH_NAME})
|
||||
else ()
|
||||
set(GIT_BRANCH_NAME "#")
|
||||
endif ()
|
||||
ENDMACRO(get_git_branch_name)
|
||||
|
||||
# get last commit id
|
||||
MACRO(get_last_commit_id LAST_COMMIT_ID)
|
||||
execute_process(COMMAND sh "-c" "git log --decorate | head -n 1 | awk '{print $2}'"
|
||||
OUTPUT_VARIABLE ${LAST_COMMIT_ID})
|
||||
|
||||
message(DEBUG "LAST_COMMIT_ID = ${${LAST_COMMIT_ID}}")
|
||||
|
||||
if (NOT LAST_COMMIT_ID STREQUAL "")
|
||||
string(REGEX REPLACE "\n" "" ${LAST_COMMIT_ID} ${${LAST_COMMIT_ID}})
|
||||
else ()
|
||||
set(LAST_COMMIT_ID "Unknown")
|
||||
endif ()
|
||||
ENDMACRO(get_last_commit_id)
|
||||
|
||||
# get milvus version
|
||||
MACRO(get_milvus_version)
|
||||
cmake_parse_arguments(VER "" "TARGET;DEFAULT" "" ${ARGN})
|
||||
|
||||
# Step 1: get branch name
|
||||
get_git_branch_name(GIT_BRANCH_NAME)
|
||||
message(DEBUG ${GIT_BRANCH_NAME})
|
||||
|
||||
# Step 2: match MAJOR.MINOR.PATCH format or set DEFAULT value
|
||||
string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" ${VER_TARGET} ${GIT_BRANCH_NAME})
|
||||
if (NOT ${VER_TARGET})
|
||||
set(${VER_TARGET} ${VER_DEFAULT})
|
||||
endif()
|
||||
ENDMACRO(get_milvus_version)
|
||||
|
||||
# set definition
|
||||
MACRO(set_milvus_definition DEF_PASS_CMAKE MILVUS_DEF)
|
||||
if (${${DEF_PASS_CMAKE}})
|
||||
add_compile_definitions(${MILVUS_DEF})
|
||||
endif()
|
||||
ENDMACRO(set_milvus_definition)
|
||||
@ -11,5 +11,5 @@
|
||||
|
||||
#cmakedefine MILVUS_VERSION "@MILVUS_VERSION@"
|
||||
#cmakedefine BUILD_TYPE "@BUILD_TYPE@"
|
||||
#cmakedefine BUILD_TIME @BUILD_TIME@
|
||||
#cmakedefine BUILD_TIME "@BUILD_TIME@"
|
||||
#cmakedefine LAST_COMMIT_ID "@LAST_COMMIT_ID@"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user