CMakeLists.txt 5.1 KB
Newer Older
J
jinhai 已提交
1
#-------------------------------------------------------------------------------
J
jinhai 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# 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.
J
jinhai 已提交
18 19
#-------------------------------------------------------------------------------

J
jinhai 已提交
20

Z
zhiru 已提交
21 22
cmake_minimum_required(VERSION 3.14)
message(STATUS "Building using CMake version: ${CMAKE_VERSION}")
J
jinhai 已提交
23

24 25 26 27 28 29 30 31 32 33 34 35 36
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})
message(STATUS "Build time = ${BUILD_TIME}")

MACRO (GET_GIT_BRANCH_NAME GIT_BRANCH_NAME)
    execute_process(COMMAND "git" symbolic-ref --short HEAD OUTPUT_VARIABLE ${GIT_BRANCH_NAME})
ENDMACRO (GET_GIT_BRANCH_NAME)

GET_GIT_BRANCH_NAME(GIT_BRANCH_NAME)
G
groot 已提交
37 38 39
if(NOT GIT_BRANCH_NAME STREQUAL "")
    string(REGEX REPLACE "\n" "" GIT_BRANCH_NAME ${GIT_BRANCH_NAME})
endif()
40

G
groot 已提交
41 42
set(MILVUS_VERSION "${GIT_BRANCH_NAME}")
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]" MILVUS_VERSION "${MILVUS_VERSION}")
43 44

if(CMAKE_BUILD_TYPE STREQUAL "Release")
Z
zhiru 已提交
45
    set(BUILD_TYPE "Release")
46
else()
Z
zhiru 已提交
47
    set(BUILD_TYPE "Debug")
48 49 50
endif()
message(STATUS "Build type = ${BUILD_TYPE}")

G
groot 已提交
51 52
project(milvus VERSION "${MILVUS_VERSION}")
project(milvus_engine LANGUAGES CUDA CXX)
X
xj.lin 已提交
53

Z
zhiru 已提交
54 55 56 57 58 59 60
# Ensure that a default make is set
if("${MAKE}" STREQUAL "")
    if(NOT MSVC)
        find_program(MAKE make)
    endif()
endif()

G
groot 已提交
61 62 63
set(MILVUS_VERSION_MAJOR "${milvus_VERSION_MAJOR}")
set(MILVUS_VERSION_MINOR "${milvus_VERSION_MINOR}")
set(MILVUS_VERSION_PATCH "${milvus_VERSION_PATCH}")
Z
zhiru 已提交
64

G
groot 已提交
65 66 67
if(MILVUS_VERSION_MAJOR STREQUAL ""
        OR MILVUS_VERSION_MINOR STREQUAL ""
        OR MILVUS_VERSION_PATCH STREQUAL "")
G
groot 已提交
68
    message(WARNING "Failed to determine Milvus version from git branch name")
G
groot 已提交
69
    set(MILVUS_VERSION "0.4.0")
Z
zhiru 已提交
70 71
endif()

G
groot 已提交
72
message(STATUS "Build version = ${MILVUS_VERSION}")
G
groot 已提交
73 74
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.macro ${CMAKE_CURRENT_SOURCE_DIR}/version.h)

G
groot 已提交
75 76 77
message(STATUS "Milvus version: "
        "${MILVUS_VERSION_MAJOR}.${MILVUS_VERSION_MINOR}.${MILVUS_VERSION_PATCH} "
        "(full: '${MILVUS_VERSION}')")
Z
zhiru 已提交
78

G
groot 已提交
79 80
set(MILVUS_SOURCE_DIR ${PROJECT_SOURCE_DIR})
set(MILVUS_BINARY_DIR ${PROJECT_BINARY_DIR})
Z
zhiru 已提交
81

X
xj.lin 已提交
82 83
find_package(CUDA)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler -fPIC -std=c++11 -D_FORCE_INLINES -arch sm_60 --expt-extended-lambda")
J
jinhai 已提交
84 85

set(CMAKE_CXX_STANDARD 14)
Z
zhiru 已提交
86
set(CMAKE_CXX_STANDARD_REQUIRED on)
J
jinhai 已提交
87 88

if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
Z
zhiru 已提交
89
    message(STATUS "Building milvus_engine on x86 architecture")
G
groot 已提交
90
    set(MILVUS_BUILD_ARCH x86_64)
J
jinhai 已提交
91
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(ppc)")
Z
zhiru 已提交
92
    message(STATUS "Building milvus_engine on ppc architecture")
G
groot 已提交
93
    set(MILVUS_BUILD_ARCH ppc64le)
J
jinhai 已提交
94
else()
Z
zhiru 已提交
95
    message(WARNING "Unknown processor type")
Z
zhiru 已提交
96
    message(WARNING "CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}")
G
groot 已提交
97
    set(MILVUS_BUILD_ARCH unknown)
J
jinhai 已提交
98 99 100
endif()

if(CMAKE_BUILD_TYPE STREQUAL "Release")
Z
zhiru 已提交
101
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -fPIC -DELPP_THREAD_SAFE -fopenmp")
Z
zhiru 已提交
102
    set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O3")
J
jinhai 已提交
103
else()
Z
zhiru 已提交
104
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fPIC -DELPP_THREAD_SAFE -fopenmp")
Z
zhiru 已提交
105
    set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O0 -g")
J
jinhai 已提交
106 107
endif()

Z
zhiru 已提交
108 109 110 111 112 113 114
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

include(ExternalProject)
include(DefineOptions)
include(BuildUtils)
include(ThirdPartyPackages)

Z
zhiru 已提交
115
config_summary()
J
jinhai 已提交
116

G
groot 已提交
117
set(MILVUS_ENGINE_SRC ${PROJECT_SOURCE_DIR}/src)
Z
zhiru 已提交
118
add_subdirectory(src)
J
jinhai 已提交
119

G
groot 已提交
120
if (BUILD_UNIT_TEST STREQUAL "ON")
Z
zhiru 已提交
121 122 123
    if (BUILD_COVERAGE STREQUAL "ON")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
    endif()
J
jinhai 已提交
124
    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/unittest)
G
groot 已提交
125
endif()
Y
yu yunfeng 已提交
126

G
groot 已提交
127
add_custom_target(Clean-All COMMAND ${CMAKE_BUILD_TOOL} clean)
128

G
groot 已提交
129 130
if("${MILVUS_DB_PATH}" STREQUAL "")
    set(MILVUS_DB_PATH "/tmp/milvus")
G
groot 已提交
131
endif()
G
groot 已提交
132 133 134
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.template ${CMAKE_CURRENT_SOURCE_DIR}/conf/server_config.yaml)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf/log_config.template ${CMAKE_CURRENT_SOURCE_DIR}/conf/log_config.conf)

135
install(DIRECTORY scripts/
136
        DESTINATION scripts
137
        FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
138 139 140
        GROUP_EXECUTE GROUP_READ
        WORLD_EXECUTE WORLD_READ
        FILES_MATCHING PATTERN "*.sh")
141 142
install(FILES
        conf/server_config.yaml
G
groot 已提交
143
        conf/log_config.conf
144 145
        DESTINATION
        conf)