diff --git a/.github/workflows/kiwidb.yml b/.github/workflows/kiwidb.yml index e0d82c35..a74a7db3 100644 --- a/.github/workflows/kiwidb.yml +++ b/.github/workflows/kiwidb.yml @@ -48,7 +48,9 @@ jobs: run: | brew update brew install autoconf + brew install clang-format brew install go + brew install llvm - name: Restore cache uses: actions/cache@v4 @@ -65,7 +67,7 @@ jobs: run: | export LIBRARY_PATH=$(xcrun --show-sdk-path)/usr/lib export DYLD_LIBRARY_PATH=$(xcrun --show-sdk-path)/usr/lib - bash ./etc/script/build.sh --verbose + bash ./etc/script/build.sh --ninja --verbose - name: GTest working-directory: ${{ github.workspace }}/${{ env.BUILD_DIR }} @@ -105,9 +107,14 @@ jobs: restore-keys: | ${{ runner.os }}-cache- + - name: Install Ninja + run: | + sudo apt install -y ninja-build + sudo apt install clang + - name: Build run: | - bash ./etc/script/build.sh --verbose + bash ./etc/script/build.sh --ninja --verbose - name: GTest working-directory: ${{ github.workspace }}/${{ env.BUILD_DIR }} diff --git a/cmake/braft.cmake b/cmake/braft.cmake index 9c07b2c9..d990bc37 100644 --- a/cmake/braft.cmake +++ b/cmake/braft.cmake @@ -24,6 +24,8 @@ ExternalProject_Add( GIT_TAG v1.1.2-beta20250101 GIT_SHALLOW true SOURCE_DIR ${BRAFT_SOURCES_DIR} + GIT_SHALLOW true + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} diff --git a/cmake/brpc.cmake b/cmake/brpc.cmake index d392844d..790b9c03 100644 --- a/cmake/brpc.cmake +++ b/cmake/brpc.cmake @@ -23,6 +23,8 @@ ExternalProject_Add( DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/download" DOWNLOAD_NAME "brpc-1.8.0.tar.gz" SOURCE_DIR ${BRPC_SOURCES_DIR} + GIT_SHALLOW true + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} diff --git a/cmake/findTools.cmake b/cmake/findTools.cmake index 7a339ee4..b298dc42 100644 --- a/cmake/findTools.cmake +++ b/cmake/findTools.cmake @@ -47,6 +47,13 @@ ELSE () MESSAGE(STATUS "found clang-apply-replacements at ${CLANG_APPLY_REPLACEMENTS_BIN}") ENDIF () +# Configure CCache if available +find_program(CCACHE_FOUND ccache) +if(CCACHE_FOUND) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) +endif(CCACHE_FOUND) + OPTION(WITH_COMMAND_DOCS "build with command docs support" OFF) IF (WITH_COMMAND_DOCS) ADD_DEFINITIONS(-DWITH_COMMAND_DOCS) diff --git a/cmake/fmt.cmake b/cmake/fmt.cmake index f31948c1..d130bed4 100644 --- a/cmake/fmt.cmake +++ b/cmake/fmt.cmake @@ -22,6 +22,7 @@ ExternalProject_Add( DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/download" DOWNLOAD_NAME "fmt-10.1.1.zip" SOURCE_DIR ${FMT_SOURCES_DIR} + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} @@ -36,5 +37,4 @@ ExternalProject_Add( ${EXTERNAL_GENERATOR} BUILD_BYPRODUCTS ${FMT_LIBRARIES} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - UPDATE_COMMAND "" ) diff --git a/cmake/gflags.cmake b/cmake/gflags.cmake index 14a7f017..fa2b6ea8 100644 --- a/cmake/gflags.cmake +++ b/cmake/gflags.cmake @@ -22,6 +22,7 @@ ExternalProject_Add( DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/download" DOWNLOAD_NAME "gflags-2.2.2.zip" SOURCE_DIR ${GFLAGS_SOURCES_DIR} + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_GENERATOR} ${EXTERNAL_PROJECT_C} @@ -39,6 +40,5 @@ ExternalProject_Add( -DGFLAGS_BUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=${LIB_INSTALL_PREFIX} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - UPDATE_COMMAND "" BUILD_BYPRODUCTS ${GFLAGS_LIBRARY} ) diff --git a/cmake/gtest.cmake b/cmake/gtest.cmake index 254b3ae3..6e734f5b 100644 --- a/cmake/gtest.cmake +++ b/cmake/gtest.cmake @@ -15,6 +15,8 @@ ExternalProject_Add( GIT_TAG v1.14.0 GIT_SHALLOW true SOURCE_DIR ${GTEST_SOURCES_DIR} + GIT_SHALLOW true + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_GENERATOR} -DCMAKE_INSTALL_PREFIX=${LIB_INSTALL_PREFIX} @@ -25,5 +27,5 @@ ExternalProject_Add( ${EXTERNAL_PROJECT_CXX_FLAGS} ${EXTERNAL_PROJECT_CXX_LINK_FLAGS} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - BUILD_BYPRODUCTS ${GTEST_LIBRARIES} + BUILD_BYPRODUCTS ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} ) diff --git a/cmake/leveldb.cmake b/cmake/leveldb.cmake index d04af00c..fc4bcddc 100644 --- a/cmake/leveldb.cmake +++ b/cmake/leveldb.cmake @@ -14,8 +14,9 @@ ExternalProject_Add( DEPENDS snappy GIT_REPOSITORY "https://github.com/google/leveldb.git" GIT_TAG "1.23" - GIT_SHALLOW true SOURCE_DIR ${LEVELDB_SOURCES_DIR} + GIT_SHALLOW true + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} @@ -33,6 +34,5 @@ ExternalProject_Add( -DCMAKE_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE} ${EXTERNAL_GENERATOR} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - UPDATE_COMMAND "" BUILD_BYPRODUCTS ${LEVELDB_LIBRARIES} ) diff --git a/cmake/lz4.cmake b/cmake/lz4.cmake index f8310ef3..29fc0492 100644 --- a/cmake/lz4.cmake +++ b/cmake/lz4.cmake @@ -17,6 +17,7 @@ ExternalProject_Add( DOWNLOAD_NO_PROGRESS 1 ${EXTERNAL_PROJECT_LOG_ARGS} SOURCE_SUBDIR build/cmake + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} @@ -30,6 +31,5 @@ ExternalProject_Add( -DBUILD_SHARED_LIBS=OFF ${EXTERNAL_GENERATOR} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - UPDATE_COMMAND "" BUILD_BYPRODUCTS ${LZ4_LIBRARIES} ) diff --git a/cmake/protobuf.cmake b/cmake/protobuf.cmake index aee9874d..cc58a116 100644 --- a/cmake/protobuf.cmake +++ b/cmake/protobuf.cmake @@ -21,7 +21,6 @@ SET(PROTOBUF_PROTOC "${LIB_INSTALL_PREFIX}/bin/protoc") ExternalProject_Add( protobuf - UPDATE_COMMAND "" LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 @@ -33,6 +32,7 @@ ExternalProject_Add( DOWNLOAD_NAME "protobuf-3.18.0.tar.gz" SOURCE_DIR ${PROTOBUF_SOURCES_DIR} DOWNLOAD_NO_PROGRESS 1 + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} @@ -47,5 +47,5 @@ ExternalProject_Add( -Dprotobuf_BUILD_LIBPROTOC=ON ${EXTERNAL_GENERATOR} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - BUILD_BYPRODUCTS ${LIB_PROTOBUF} + BUILD_BYPRODUCTS ${PROTOBUF_LIBRARY} ) diff --git a/cmake/rocksdb.cmake b/cmake/rocksdb.cmake index 74a7fc2a..6e38e639 100644 --- a/cmake/rocksdb.cmake +++ b/cmake/rocksdb.cmake @@ -13,8 +13,9 @@ ExternalProject_Add( DEPENDS gflags snappy zlib lz4 zstd GIT_REPOSITORY https://github.com/facebook/rocksdb.git GIT_TAG v9.11.1 - GIT_SHALLOW true SOURCE_DIR ${ROCKSDB_SOURCES_DIR} + GIT_SHALLOW true + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} @@ -43,6 +44,5 @@ ExternalProject_Add( -DUSE_RTTI=ON ${EXTERNAL_GENERATOR} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - UPDATE_COMMAND "" BUILD_BYPRODUCTS ${ROCKSDB_LIBRARIES} ) diff --git a/cmake/snappy.cmake b/cmake/snappy.cmake index 3cb77907..75cc00ad 100644 --- a/cmake/snappy.cmake +++ b/cmake/snappy.cmake @@ -12,8 +12,9 @@ ExternalProject_Add( ${EXTERNAL_PROJECT_LOG_ARGS} GIT_REPOSITORY "https://github.com/google/snappy.git" GIT_TAG "1.2.1" - GIT_SHALLOW true SOURCE_DIR ${Snappy_SOURCES_DIR} + GIT_SHALLOW true + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} diff --git a/cmake/spdlog.cmake b/cmake/spdlog.cmake index 550a6e4e..ac94db60 100644 --- a/cmake/spdlog.cmake +++ b/cmake/spdlog.cmake @@ -25,6 +25,7 @@ ExternalProject_Add( DOWNLOAD_NAME "spdlog-1.12.0.zip" SOURCE_DIR ${SPDLOG_SOURCES_DIR} DOWNLOAD_NO_PROGRESS 1 + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index b56d09b1..3221cae1 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -14,6 +14,8 @@ ExternalProject_Add( GIT_TAG "v1.2.8" GIT_SHALLOW true SOURCE_DIR ${ZLIB_SOURCES_DIR} + GIT_SHALLOW true + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} @@ -25,6 +27,5 @@ ExternalProject_Add( -DCMAKE_POSITION_INDEPENDENT_CODE=ON ${EXTERNAL_GENERATOR} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - UPDATE_COMMAND "" BUILD_BYPRODUCTS ${ZLIB_LIBRARIES} ) diff --git a/cmake/zstd.cmake b/cmake/zstd.cmake index 65f9122a..375c2a52 100644 --- a/cmake/zstd.cmake +++ b/cmake/zstd.cmake @@ -17,6 +17,7 @@ ExternalProject_Add( SOURCE_DIR ${zstd_SOURCES_DIR} DOWNLOAD_NO_PROGRESS 1 SOURCE_SUBDIR build/cmake + UPDATE_COMMAND "" CMAKE_ARGS ${EXTERNAL_PROJECT_C} ${EXTERNAL_PROJECT_CXX} @@ -30,6 +31,5 @@ ExternalProject_Add( -DZSTD_BUILD_SHARED=OFF ${EXTERNAL_GENERATOR} BUILD_COMMAND ${EXTERNAL_BUILD} -j${CPU_CORE} - UPDATE_COMMAND "" BUILD_BYPRODUCTS ${zstd_LIBRARIES} ) diff --git a/etc/script/build.sh b/etc/script/build.sh index 1c2361a2..da1144d4 100755 --- a/etc/script/build.sh +++ b/etc/script/build.sh @@ -10,6 +10,7 @@ K_VERSION="1.0.0" BUILD_TYPE="Release" VERBOSE=0 CMAKE_FLAGS="" +CMAKE_BUILD_FLAGS="" MAKE_FLAGS="" PREFIX="cmake-build" @@ -55,6 +56,7 @@ function build() { echo "COMMIT_ID: $SHORT_COMMIT_ID" echo "BUILD_TYPE: $BUILD_TYPE" echo "CMAKE_FLAGS: $CMAKE_FLAGS" + echo "CMAKE_BUILD_FLAGS: $CMAKE_BUILD_FLAGS" echo "MAKE_FLAGS: $MAKE_FLAGS" if [ "${BUILD_TYPE}" == "Release" ]; then @@ -74,7 +76,7 @@ function build() { -DKIWI_BUILD_DATE="$BUILD_TIME" \ -DKIWI_GIT_COMMIT_ID="$SHORT_COMMIT_ID" \ ${CMAKE_FLAGS} -S . -B ${PREFIX} - cmake --build ${PREFIX} -- ${MAKE_FLAGS} -j ${CPU_CORE} + cmake --build ${PREFIX} ${CMAKE_BUILD_FLAGS} -- ${MAKE_FLAGS} -j ${CPU_CORE} if [ $? -eq 0 ]; then echo -e "kiwi compile complete, output file ${C_GREEN} ./bin/kiwi ${C_END}" @@ -104,6 +106,7 @@ function show_help() { sh $0 --gitinfo get git info sh $0 --debug compile with debug sh $0 --clang use clang compiler + sh $0 --ninja use ninja compiler sh $0 --kiwi only compile kiwi sh $0 --clear clear compilation directory sh $0 -h|--help show help @@ -136,6 +139,10 @@ while true; do CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++" ;; + --ninja) + CMAKE_FLAGS="${CMAKE_FLAGS} -G Ninja" + ;; + --kiwi) MAKE_FLAGS="${MAKE_FLAGS} kiwi" ;; @@ -155,7 +162,7 @@ while true; do --verbose) CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" - MAKE_FLAGS="${MAKE_FLAGS} VERBOSE=1" + CMAKE_BUILD_FLAGS="${CMAKE_BUILD_FLAGS} --verbose" ;; --) diff --git a/src/raft/CMakeLists.txt b/src/raft/CMakeLists.txt index eb8cea75..b6e4b471 100644 --- a/src/raft/CMakeLists.txt +++ b/src/raft/CMakeLists.txt @@ -50,7 +50,7 @@ IF (CMAKE_SYSTEM_NAME STREQUAL "Linux") ENDIF () SET(LIBRARY_OUTPUT_PATH ${PLIB_INSTALL_DIR}) -ADD_DEPENDENCIES(raft protobuf raft_pb binlog_pb) +ADD_DEPENDENCIES(raft protobuf raft_pb binlog_pb braft brpc) TARGET_LINK_LIBRARIES(raft PRIVATE net; PRIVATE dl;