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:
XuanYang-cn 2020-07-20 15:24:00 +08:00 committed by GitHub
parent 924960b69d
commit 29fab296b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 147 additions and 144 deletions

View File

@ -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")

View File

@ -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
View 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)

View File

@ -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@"