From ac891f5363c186ab44a263931786b0c582797469 Mon Sep 17 00:00:00 2001 From: alexstocks Date: Tue, 23 Jul 2024 14:55:37 +0800 Subject: [PATCH] add etc --- .gitignore | 11 +- README.md | 8 +- README_CN.md | 8 +- build.sh | 87 ------------ clear.sh | 14 -- pikiwidb.conf => etc/conf/pikiwidb.conf | 0 etc/script/build.sh | 125 ++++++++++++++++++ .../script/pikiwidbtests.sh | 0 save_load.sh => etc/script/save_load.sh | 9 +- tests/README.md | 4 +- 10 files changed, 150 insertions(+), 116 deletions(-) delete mode 100755 build.sh delete mode 100755 clear.sh rename pikiwidb.conf => etc/conf/pikiwidb.conf (100%) create mode 100755 etc/script/build.sh rename pikiwidbtests.sh => etc/script/pikiwidbtests.sh (100%) rename save_load.sh => etc/script/save_load.sh (60%) diff --git a/.gitignore b/.gitignore index c0e2b905a..cc9a5c681 100644 --- a/.gitignore +++ b/.gitignore @@ -7,9 +7,14 @@ *.obj *pb.cc *pb.h -build -cmake-build-debug -cmake-build-release +deps-debug/ +deps-release/ +cmake-build-debug/ +cmake-build-release/ +cmake-build-release-release/ +build/ +build-debug/ +build-release/ # Precompiled Headers *.gch diff --git a/README.md b/README.md index 0574fe07c..74f16d926 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A C++20 implementation of Redis Server, use RocksDB for persist storage.(not inc ## Requirements * C++20 -* Linux or OS X +* Linux or OS X or FreeBSD ## compile @@ -28,14 +28,14 @@ scl enable devtoolset-11 bash Execute this command to start compiling Pikiwidb: ```bash -./build.sh +sh ./etc/script/build.sh ``` Pikiwidb is compiled by default in release mode, which does not support debugging. If debugging is needed, compile in debug mode. ```bash -./clear.sh -./build.sh --debug +sh ./etc/script/build.sh --clear +sh ./etc/script/build.sh --debug ``` ## Support module for write your own extensions diff --git a/README_CN.md b/README_CN.md index 34ec2431f..c9cea497d 100644 --- a/README_CN.md +++ b/README_CN.md @@ -7,7 +7,7 @@ C++20 实现的增强版 Redis 服务器,使用 RocksDB 作为持久化存储引 ## 环境需求 * C++20、CMake -* Linux 或 MAC OS +* Linux 或 MAC OS 或 FreeBSD ## 编译 @@ -28,14 +28,14 @@ scl enable devtoolset-11 bash 执行以下命令开始编译 PikiwiDB: ```bash -./build.sh +sh ./etc/script/build.sh ``` PikiwiDB 默认以 release 模式编译,不支持调试。如果需要调试,请以 debug 模式编译。 ```bash -./clear.sh -./build.sh --debug +sh ./etc/script/build.sh --clear +sh ./etc/script/build.sh --debug ``` ## 与 Redis 完全兼容 diff --git a/build.sh b/build.sh deleted file mode 100755 index 644a5df64..000000000 --- a/build.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash - -#color code -C_RED="\033[31m" -C_GREEN="\033[32m" - -C_END="\033[0m" - -BUILD_TIME=$(git log -1 --format=%ai) -BUILD_TIME=${BUILD_TIME: 0: 10} - -COMMIT_ID=$(git rev-parse HEAD) -SHORT_COMMIT_ID=${COMMIT_ID: 0: 8} - -BUILD_TYPE=Release -VERBOSE=0 -CMAKE_FLAGS="" -MAKE_FLAGS="" -PREFIX="cmake-build" - -ARGS=`getopt -a -o h -l help,debug,verbose,prefix: -- "$@"` -function show_help() { - echo " - -h --help show help - --debug compile with debug - --verbose compile with verbose - --prefix compile output path - " - exit 0 -} - -eval set -- "${ARGS}" -while true -do - case "$1" in - -h|--help) - show_help - ;; - --debug) - BUILD_TYPE=debug - ;; - --verbose) - CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" - MAKE_FLAGS="${MAKE_FLAGS} VERBOSE=1" - ;; - --prefix) - PREFIX=$2 - shift - ;; - --) - shift - break - ;; - esac -shift -done - -if [ ! -f "/proc/cpuinfo" ];then - CPU_CORE=$(sysctl -n hw.ncpu) -else - CPU_CORE=$(cat /proc/cpuinfo| grep "processor"| wc -l) -fi -if [ ${CPU_CORE} -eq 0 ]; then - CPU_CORE=1 -fi - -echo "cpu core ${CPU_CORE}" - -echo "BUILD_TYPE:" $BUILD_TYPE -echo "CMAKE_FLAGS:" $CMAKE_FLAGS -echo "MAKE_FLAGS:" $MAKE_FLAGS - -if [ "${BUILD_TYPE}" == "Release" ]; then - PREFIX="${PREFIX}-release" -else - PREFIX="${PREFIX}-debug" -fi - -cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${CMAKE_FLAGS} -S . -B ${PREFIX} -cmake --build ${PREFIX} -- ${MAKE_FLAGS} -j ${CPU_CORE} - -if [ $? -eq 0 ]; then - echo -e "pikiwidb compile complete, output file ${C_GREEN} ${BUILD_DIR}/pikiwidb ${C_END}" -else - echo -e "${C_RED} pikiwidb compile fail ${C_END}" - exit 1 -fi diff --git a/clear.sh b/clear.sh deleted file mode 100755 index c936f446e..000000000 --- a/clear.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -# ****************************************************** -# DESC : -# AUTHOR : Alex Stocks -# VERSION : 1.0 -# LICENCE : Apache License 2.0 -# EMAIL : alexstocks@foxmail.com -# MOD : 2023-07-31 17:03 -# FILE : clear.sh -# ****************************************************** - -rm -rf ./build-release -rm -rf ./build-debug -rm -rf ./bin diff --git a/pikiwidb.conf b/etc/conf/pikiwidb.conf similarity index 100% rename from pikiwidb.conf rename to etc/conf/pikiwidb.conf diff --git a/etc/script/build.sh b/etc/script/build.sh new file mode 100755 index 000000000..c5c0ea266 --- /dev/null +++ b/etc/script/build.sh @@ -0,0 +1,125 @@ +#!/bin/bash + +#color code +C_RED="\033[31m" +C_GREEN="\033[32m" + +C_END="\033[0m" + +BUILD_TIME=$(git log -1 --format=%ai) +BUILD_TIME=${BUILD_TIME: 0: 10} + +COMMIT_ID=$(git rev-parse HEAD) +SHORT_COMMIT_ID=${COMMIT_ID: 0: 8} + +BUILD_TYPE=Release +VERBOSE=0 +CMAKE_FLAGS="" +MAKE_FLAGS="" +PREFIX="cmake-build" + +PWD=`pwd` +PROJECT_HOME="${PWD}/" +CONF="${PROJECT_HOME}/etc/conf/pikiwidb.conf" + +function build() { + if [ ! -f "/proc/cpuinfo" ];then + CPU_CORE=$(sysctl -n hw.ncpu) + else + CPU_CORE=$(cat /proc/cpuinfo| grep "processor"| wc -l) + fi + if [ ${CPU_CORE} -eq 0 ]; then + CPU_CORE=1 + fi + + echo "cpu core ${CPU_CORE}" + + echo "BUILD_TYPE:" $BUILD_TYPE + echo "CMAKE_FLAGS:" $CMAKE_FLAGS + echo "MAKE_FLAGS:" $MAKE_FLAGS + + if [ "${BUILD_TYPE}" == "Release" ]; then + PREFIX="${PREFIX}-release" + else + PREFIX="${PREFIX}-debug" + fi + + cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${CMAKE_FLAGS} -S . -B ${PREFIX} + cmake --build ${PREFIX} -- ${MAKE_FLAGS} -j ${CPU_CORE} + + if [ $? -eq 0 ]; then + echo -e "pikiwidb compile complete, output file ${C_GREEN} ${BUILD_DIR}/pikiwidb ${C_END}" + else + echo -e "${C_RED} pikiwidb compile fail ${C_END}" + exit 1 + fi +} + +function clear() { + rm -rf ${PROJECT_HOME}/deps-debug + rm -rf ${PROJECT_HOME}/deps-release + rm -rf ${PROJECT_HOME}/cmake-build-debug + rm -rf ${PROJECT_HOME}/cmake-build-release + rm -rf ${PROJECT_HOME}/cmake-build-release-release + rm -rf ${PROJECT_HOME}/build + rm -rf ${PROJECT_HOME}/build-release + rm -rf ${PROJECT_HOME}/build-debug + rm -rf ${PROJECT_HOME}/bin + exit 0 +} + +function show_help() { + echo " + sh $0 --debug compile with debug + sh $0 --clear clear compilation directory + sh $0 -h|--help show help + sh $0 --prefix compile output path + sh $0 --verbose compile with verbose + " + exit 0 +} + +# ARGS=`getopt -a -o h -l help,debug,verbose,prefix: -- "$@"` +# Convert the parsed arguments into an array +# eval set -- "$ARGS" + +while true; do + # echo "hello first arg $1" + case "$1" in + -c|--clear) + clear + shift ;; + + --debug) + BUILD_TYPE=debug + ;; + + -h|--help) + show_help + ;; + + --prefix) + if [[ -n $2 ]]; then + PREFIX=$2 + else + echo "you should provide a value for --prefix as output path" + exit 0 + fi + shift;; + + --verbose) + CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" + MAKE_FLAGS="${MAKE_FLAGS} VERBOSE=1" + ;; + + --) + shift + break;; + + *) + break;; + esac + shift +done + +build diff --git a/pikiwidbtests.sh b/etc/script/pikiwidbtests.sh similarity index 100% rename from pikiwidbtests.sh rename to etc/script/pikiwidbtests.sh diff --git a/save_load.sh b/etc/script/save_load.sh similarity index 60% rename from save_load.sh rename to etc/script/save_load.sh index 09f36c260..a45170dc9 100755 --- a/save_load.sh +++ b/etc/script/save_load.sh @@ -3,8 +3,13 @@ killall -9 pikiwidb mkdir leader follower1 -cd leader && ulimit -n 99999 && rm -fr * && ../bin/pikiwidb ../pikiwidb.conf --port 7777 & -cd follower1 && ulimit -n 99999 && rm -fr * && ../bin/pikiwidb ../pikiwidb.conf --port 8888 & + +PWD=`pwd` +PROJECT_HOME="${PWD}/../" +BIN="${PROJECT_HOME}/bin/pikiwidb" +CONF="${PROJECT_HOME}/etc/conf/pikiwidb.conf" +cd leader && ulimit -n 99999 && rm -fr * && ${BIN} ${CONF} --port 7777 & +cd follower1 && ulimit -n 99999 && rm -fr * && ${BIN} ${CONF} --port 8888 & sleep 5 redis-cli -p 7777 raft.cluster init diff --git a/tests/README.md b/tests/README.md index 96abac0bf..7f3b97ec2 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,4 +1,4 @@ ### PikiwiDB test -* 在 PikiwiDB 目录下执行 `./pikatests.sh geo` 测试PikiwiDB GEO命令 -* 如果是`unit/type`接口, 例如 SET, 执行 `./pikiwidbtests.sh type/set` 测试PikiwiDB SET命令 \ No newline at end of file +* 在 PikiwiDB 目录下执行 `sh ./etc/script/pikatests.sh geo` 测试PikiwiDB GEO命令 +* 如果是`unit/type`接口, 例如 SET, 执行 `./etc/script/pikiwidbtests.sh type/set` 测试PikiwiDB SET命令 \ No newline at end of file