From 455a31c8bc50bef28a9f3f4b577b13f8b8df3936 Mon Sep 17 00:00:00 2001 From: starlord Date: Wed, 25 Sep 2019 19:05:08 +0800 Subject: [PATCH] MS-590 Refine cmake code to support cpplint Former-commit-id: 583d31a79b3b491c3c3bf7eda9fa613d1c6a58ff --- cpp/CMakeLists.txt | 19 ++--- cpp/build-support/lint_exclusions.txt | 6 ++ cpp/build.sh | 102 ++++++++++++++++---------- cpp/cmake/DefineOptions.cmake | 1 + 4 files changed, 80 insertions(+), 48 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index e7cf83d70..4fffe6622 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -44,13 +44,7 @@ set(MILVUS_VERSION "${GIT_BRANCH_NAME}") string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]" MILVUS_VERSION "${MILVUS_VERSION}") find_package(ClangTools) -if("$ENV{CMAKE_EXPORT_COMPILE_COMMANDS}" STREQUAL "1" OR CLANG_TIDY_FOUND) - # Generate a Clang compile_commands.json "compilation database" file for use - # with various development tools, such as Vim's YouCompleteMe plugin. - # See http://clang.llvm.org/docs/JSONCompilationDatabase.html - set(CMAKE_EXPORT_COMPILE_COMMANDS 1) -endif() - +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(BUILD_SUPPORT_DIR "${CMAKE_SOURCE_DIR}/build-support") if(CMAKE_BUILD_TYPE STREQUAL "Release") @@ -71,7 +65,7 @@ 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.4.0") + set(MILVUS_VERSION "0.5.0") endif() message(STATUS "Build version = ${MILVUS_VERSION}") @@ -182,6 +176,9 @@ endif() find_program(CPPLINT_BIN NAMES cpplint cpplint.py HINTS ${BUILD_SUPPORT_DIR}) message(STATUS "Found cpplint executable at ${CPPLINT_BIN}") +# +# "make lint" targets +# add_custom_target(lint ${PYTHON_EXECUTABLE} ${BUILD_SUPPORT_DIR}/run_cpplint.py @@ -194,11 +191,11 @@ add_custom_target(lint ${MILVUS_LINT_QUIET}) # -# "make format" and "make check-format" targets +# "make clang-format" and "make check-clang-format" targets # if(${CLANG_FORMAT_FOUND}) # runs clang format and updates files in place. - add_custom_target(format + add_custom_target(clang-format ${PYTHON_EXECUTABLE} ${BUILD_SUPPORT_DIR}/run_clang_format.py --clang_format_binary @@ -211,7 +208,7 @@ if(${CLANG_FORMAT_FOUND}) ${MILVUS_LINT_QUIET}) # runs clang format and exits with a non-zero exit code if any files need to be reformatted - add_custom_target(check-format + add_custom_target(check-clang-format ${PYTHON_EXECUTABLE} ${BUILD_SUPPORT_DIR}/run_clang_format.py --clang_format_binary diff --git a/cpp/build-support/lint_exclusions.txt b/cpp/build-support/lint_exclusions.txt index e69de29bb..3ae6878c4 100644 --- a/cpp/build-support/lint_exclusions.txt +++ b/cpp/build-support/lint_exclusions.txt @@ -0,0 +1,6 @@ +*cmake-build-debug* +*cmake-build-release* +*cmake_build* +*src/thirdparty* +*src/core/thirdparty* +*src/grpc* \ No newline at end of file diff --git a/cpp/build.sh b/cpp/build.sh index 013d4d575..4087db459 100755 --- a/cpp/build.sh +++ b/cpp/build.sh @@ -8,10 +8,18 @@ BUILD_COVERAGE="OFF" DB_PATH="/opt/milvus" PROFILING="OFF" USE_JFROG_CACHE="OFF" +RUN_CPPLINT="OFF" +CUDA_COMPILER=/usr/local/cuda/bin/nvcc -while getopts "p:d:t:uhrcgj" arg +while getopts "p:d:t:ulrcgjh" arg do case $arg in + p) + INSTALL_PREFIX=$OPTARG + ;; + d) + DB_PATH=$OPTARG + ;; t) BUILD_TYPE=$OPTARG # BUILD_TYPE ;; @@ -19,11 +27,8 @@ do echo "Build and run unittest cases" ; BUILD_UNITTEST="ON"; ;; - p) - INSTALL_PREFIX=$OPTARG - ;; - d) - DB_PATH=$OPTARG + l) + RUN_CPPLINT="ON" ;; r) if [[ -d cmake_build ]]; then @@ -44,63 +49,86 @@ do echo " parameter: --t: build type(default: Debug) --u: building unit test options(default: OFF) -p: install prefix(default: $(pwd)/milvus) -d: db path(default: /opt/milvus) +-t: build type(default: Debug) +-u: building unit test options(default: OFF) +-l: run cpplint, clang-format and clang-tidy(default: OFF) -r: remove previous build directory(default: OFF) -c: code coverage(default: OFF) -g: profiling(default: OFF) --j: use jfrog cache build directory +-j: use jfrog cache build directory(default: OFF) +-h: help usage: -./build.sh -t \${BUILD_TYPE} [-u] [-h] [-g] [-r] [-c] [-k] [-j] +./build.sh -p \${INSTALL_PREFIX} -t \${BUILD_TYPE} [-u] [-l] [-r] [-c] [-g] [-j] [-h] " exit 0 ;; ?) - echo "unknown argument" + echo "ERROR! unknown argument" exit 1 ;; esac done if [[ ! -d cmake_build ]]; then - mkdir cmake_build - MAKE_CLEAN="ON" + mkdir cmake_build fi cd cmake_build -CUDA_COMPILER=/usr/local/cuda/bin/nvcc +CMAKE_CMD="cmake \ +-DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ +-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} +-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ +-DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \ +-DBUILD_COVERAGE=${BUILD_COVERAGE} \ +-DMILVUS_DB_PATH=${DB_PATH} \ +-DMILVUS_ENABLE_PROFILING=${PROFILING} \ +-DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ +../" +echo ${CMAKE_CMD} +${CMAKE_CMD} if [[ ${MAKE_CLEAN} == "ON" ]]; then - CMAKE_CMD="cmake -DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ - -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} - -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ - -DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \ - -DBUILD_COVERAGE=${BUILD_COVERAGE} \ - -DMILVUS_DB_PATH=${DB_PATH} \ - -DMILVUS_ENABLE_PROFILING=${PROFILING} \ - -DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - ../" - echo ${CMAKE_CMD} - - ${CMAKE_CMD} make clean fi -make -j 4 || exit 1 +if [[ ${RUN_CPPLINT} == "ON" ]]; then + # cpplint check + make lint + if [ $? -ne 0 ]; then + echo "ERROR! cpplint check not pass" + exit 1 + fi + # clang-format check + make check-clang-format + if [ $? -ne 0 ]; then + echo "ERROR! clang-format check failed" + exit 1 + fi + # clang-tidy check + make check-clang-tidy + if [ $? -ne 0 ]; then + echo "ERROR! clang-tidy check failed" + exit 1 + fi +else + # compile and build + make -j 4 || exit 1 -if [[ ${BUILD_TYPE} != "Debug" ]]; then - strip src/milvus_server -fi + # strip binary symbol + if [[ ${BUILD_TYPE} != "Debug" ]]; then + strip src/milvus_server + fi -make install || exit 1 + make install || exit 1 -if [[ ${BUILD_COVERAGE} == "ON" ]]; then - cd - - bash `pwd`/coverage.sh - cd - -fi + # evaluate code coverage + if [[ ${BUILD_COVERAGE} == "ON" ]]; then + cd - + bash `pwd`/coverage.sh + cd - + fi +fi \ No newline at end of file diff --git a/cpp/cmake/DefineOptions.cmake b/cpp/cmake/DefineOptions.cmake index 2b9a68e88..1b0646c2f 100644 --- a/cpp/cmake/DefineOptions.cmake +++ b/cpp/cmake/DefineOptions.cmake @@ -110,6 +110,7 @@ endif() #---------------------------------------------------------------------- set_option_category("Test and benchmark") +unset(MILVUS_BUILD_TESTS CACHE) if (BUILD_UNIT_TEST) define_option(MILVUS_BUILD_TESTS "Build the MILVUS googletest unit tests" ON) else() -- GitLab