Skip to content

Instantly share code, notes, and snippets.

@barrbrain
Last active March 27, 2025 14:15
Show Gist options
  • Select an option

  • Save barrbrain/d35cb1d46c5a32590b9a32112a35e87a to your computer and use it in GitHub Desktop.

Select an option

Save barrbrain/d35cb1d46c5a32590b9a32112a35e87a to your computer and use it in GitHub Desktop.
kvrocks.nix
{ pkgs ? import <nixpkgs> {
localSystem = {
gcc.arch = "x86-64-v3";
gcc.tune = "alderlake";
system = "x86_64-linux";
};
} }:
let kvrocks = pkgs.stdenv.mkDerivation (finalAttrs: with pkgs; {
pname = "kvrocks";
version = "2.11.1";
src = fetchFromGitHub {
owner = "apache";
repo = "kvrocks";
rev = "v${finalAttrs.version}";
hash = "sha256-15VXbQt4OdaC8/kgOsCcKgaj8h/DyEW77UUcl47ixkY=";
};
patches = [
(substituteAll {
src = ./dont-fetch.patch;
jemallocSrc = fetchFromGitHub {
owner = "jemalloc";
repo = "jemalloc";
rev = "5.3.0";
hash = "sha256-bb0OhZVXyvN+hf9BpPSykn5cGm87a0C+Y/iXKt9wTSs=";
};
gtestSrc = fetchFromGitHub {
owner = "google";
repo = "googletest";
rev = "v1.15.2";
hash = "sha256-1OJ2SeSscRBNr7zZ/a8bJGIqAnhkg45re0j3DtPfcXM=";
};
glogSrc = fetchFromGitHub {
owner = "google";
repo = "glog";
rev = "v0.7.1";
hash = "sha256-+nwWP6VBmhgU7GCPSEGUzvUSCc48wXME181WpJ5ABP4=";
};
snappySrc = fetchFromGitHub {
owner = "google";
repo = "snappy";
rev = "1.2.1";
hash = "sha256-IzKzrMDjh+Weor+OrKdX62cAKYTdDXgldxCgNE2/8vk=";
};
lz4Src = fetchFromGitHub {
owner = "lz4";
repo = "lz4";
rev = "v1.10.0";
hash = "sha256-/dG1n59SKBaEBg72pAWltAtVmJ2cXxlFFhP+klrkTos=";
};
zlibSrc = stdenv.mkDerivation {
name = "zlib-src";
src = fetchFromGitHub {
owner = "madler";
repo = "zlib";
rev = "v1.3";
hash = "sha256-eUuXV5zfy+fmiMNdWw5QCqDloBkaxy1tgi7by9nYHNA=";
};
postInstall = ''
cp -r . $out
mv -v $out/zconf.h $out/zconf.h.included
'';
};
zstdSrc = fetchFromGitHub {
owner = "facebook";
repo = "zstd";
rev = "v1.5.6";
hash = "sha256-qcd92hQqVBjMT3hyntjcgk29o9wGQsg5Hg7HE5C0UNc=";
};
tbbSrc = fetchFromGitHub {
owner = "oneapi-src";
repo = "oneTBB";
rev = "v2022.0.0";
hash = "sha256-XOlC1+rf65oEGKDba9N561NuFo1YJhn3Q1CTGtvkn7A=";
};
rocksdbSrc = fetchFromGitHub {
owner = "facebook";
repo = "rocksdb";
rev = "v9.10.0";
hash = "sha256-G+DlQwEUyd7JOCjS1Hg1cKWmA/qAiK8UpUIKcP+riGQ=";
};
libeventSrc = fetchFromGitHub {
owner = "libevent";
repo = "libevent";
rev = "release-2.1.12-stable";
hash = "sha256-M/OgLkgQs+LwGkqv5vu26vluntDAJX5ZsHjjMVM1BqU=";
};
fmtSrc = fetchFromGitHub {
owner = "fmtlib";
repo = "fmt";
rev = "11.1.2";
hash = "sha256-HextYcoZGK5xNOMsOdq8COUsPZXyaaUYbgJaHY8dvD4=";
};
jsonconsSrc = fetchFromGitHub {
owner = "danielaparker";
repo = "jsoncons";
rev = "v1.1.0";
hash = "sha256-3NG9Jal3+BdcFeWAIq3eFoV+1ywUCsWafe/WNu2VJU8=";
};
xxhashSrc = fetchFromGitHub {
owner = "Cyan4973";
repo = "xxHash";
rev = "v0.8.3";
hash = "sha256-h6kohM+NxvQ89R9NEXZcYBG2wPOuB4mcyPfofKrx9wQ=";
};
spanSrc = fetchFromGitHub {
owner = "martinmoene";
repo = "span-lite";
rev = "v0.11.0";
hash = "sha256-BYRSdGzIvrOjPXxeabMj4tPFmQ0wfq7y+zJf6BD/bTw=";
};
trieSrc = fetchFromGitHub {
owner = "Tessil";
repo = "hat-trie";
rev = "906e6abd1e7063f1dacd3a6b270aa654b525eb0a";
hash = "sha256-umEyxbG3f4nIXTU9lpaBgM+fdh/Fv9AwV+N6eQV6D0k=";
};
pegtlSrc = fetchFromGitHub {
owner = "taocpp";
repo = "PEGTL";
rev = "3.2.8";
hash = "sha256-nPWSO2wPl/qenUQgvQDQu7Oy1dKa/PnNFSclmkaoM8A=";
};
rangev3Src = fetchFromGitHub {
owner = "ericniebler";
repo = "range-v3";
rev = "0.12.0";
hash = "sha256-bRSX91+ROqG1C3nB9HSQaKgLzOHEFy9mrD2WW3PRBWU=";
};
cpptraceSrc = fetchFromGitHub {
owner = "jeremy-rifkin";
repo = "cpptrace";
rev = "v0.7.5";
hash = "sha256-2rDyH9vo47tbqqZrTupAOrMySj4IGKeWX8HBTGjFf+g=";
};
luajitSrc = fetchFromGitHub {
owner = "RocksLabs";
repo = "LuaJIT";
rev = "c0a8e68325ec261a77bde1c8eabad398168ffe74";
hash = "sha256-Wjh14d0JR5ecAwdYVBjQYIHb2vJ1I61oR0N0LMmtq4E=";
};
})
./lz4hc.patch
];
nativeBuildInputs = [ autoconf cmake pkg-config python3 libdwarf ];
buildInputs = [ openssl ];
outputs = [
"out"
];
cmakeFlags = [
"-DENABLE_OPENSSL=ON"
"-DPORTABLE=1"
"-DSYMBOLIZE_BACKEND=libdwarf"
];
postInstall = "install -D kvrocks -t $out/bin/";
meta = with lib; {
homepage = "https://kvrocks.apache.org";
description = "A distributed key value NoSQL database that uses RocksDB as storage engine and is compatible with Redis protocol";
license = licenses.asl20;
platforms = platforms.all;
mainProgram = "kvrocks";
};
});
in pkgs.dockerTools.streamLayeredImage {
name = "kvrocks";
tag = kvrocks.version;
enableFakechroot = true;
fakeRootCommands = ''
mkdir -p /kvrocks /var/{lib,run}/kvrocks
cp -a ${kvrocks.src}/{LICENSE,NOTICE,licenses} /kvrocks/
cp ${kvrocks.src}/kvrocks.conf /var/lib/kvrocks/
'';
config = {
Volumes = {
"/var/lib/kvrocks" = {};
};
Expose = "6666:6666";
Entrypoint = [
"${pkgs.lib.getExe kvrocks}"
"-c" "/var/lib/kvrocks/kvrocks.conf"
"--dir" "/var/lib/kvrocks"
"--pidfile" "/var/run/kvrocks/kvrocks.pid"
"--bind" "0.0.0.0"
];
};
}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5f4f518d..8f07dc17 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -204,11 +204,8 @@ list(APPEND EXTERNAL_LIBS range-v3)
list(APPEND EXTERNAL_LIBS cpptrace::cpptrace)
# Add git sha to version.h
-find_package(Git REQUIRED)
execute_process(COMMAND sh -c "cat src/VERSION.txt"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE PROJECT_VERSION)
-execute_process(COMMAND git rev-parse --short HEAD
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE GIT_SHA)
string(STRIP "${GIT_SHA}" GIT_SHA)
if ((PROJECT_VERSION STREQUAL "unstable") AND (GIT_SHA STREQUAL ""))
message(WARNING "It is highly recommended to build the unstable branch in a Git repo")
diff --git a/cmake/cpptrace.cmake b/cmake/cpptrace.cmake
index b42b025d..3c322315 100644
--- a/cmake/cpptrace.cmake
+++ b/cmake/cpptrace.cmake
@@ -19,15 +19,16 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(cpptrace
- jeremy-rifkin/cpptrace v0.7.5
- MD5=1fa7eeaea1b39afed2fd403a819d2139
+FetchContent_Declare(cpptrace
+ SOURCE_DIR @cpptraceSrc@
)
if (SYMBOLIZE_BACKEND STREQUAL "libbacktrace")
set(CPPTRACE_BACKEND_OPTION "CPPTRACE_GET_SYMBOLS_WITH_LIBBACKTRACE=ON")
elseif (SYMBOLIZE_BACKEND STREQUAL "libdwarf")
- set(CPPTRACE_BACKEND_OPTION "CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF=ON")
+ set(CPPTRACE_BACKEND_OPTION "CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF=ON"
+ "CPPTRACE_USE_EXTERNAL_LIBDWARF=ON"
+ "CPPTRACE_FIND_LIBDWARF_WITH_PKGCONFIG=ON")
else ()
set(CPPTRACE_BACKEND_OPTION "CPPTRACE_GET_SYMBOLS_WITH_ADDR2LINE=ON")
endif ()
diff --git a/cmake/fmt.cmake b/cmake/fmt.cmake
index 63e9952a..5a6ca61b 100644
--- a/cmake/fmt.cmake
+++ b/cmake/fmt.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(fmt
- fmtlib/fmt 11.1.2
- MD5=51d22757327a07efeae326a6ce4c66a4
+FetchContent_Declare(fmt
+ SOURCE_DIR @fmtSrc@
)
FetchContent_MakeAvailableWithArgs(fmt)
diff --git a/cmake/glog.cmake b/cmake/glog.cmake
index 50b892fe..f815dbe8 100644
--- a/cmake/glog.cmake
+++ b/cmake/glog.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(glog
- google/glog v0.7.1
- MD5=fa30180d4284c454bdd324ad3baf7f5f
+FetchContent_Declare(glog
+ SOURCE_DIR @glogSrc@
)
FetchContent_MakeAvailableWithArgs(glog
diff --git a/cmake/gtest.cmake b/cmake/gtest.cmake
index f72747e0..9d54d61b 100644
--- a/cmake/gtest.cmake
+++ b/cmake/gtest.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(gtest
- google/googletest v1.15.2
- MD5=eb1c5c237d13ed12bf492d3997ca6b0d
+FetchContent_Declare(gtest
+ SOURCE_DIR @gtestSrc@
)
FetchContent_MakeAvailableWithArgs(gtest
diff --git a/cmake/jemalloc.cmake b/cmake/jemalloc.cmake
index 5c69cfa7..246d16f0 100644
--- a/cmake/jemalloc.cmake
+++ b/cmake/jemalloc.cmake
@@ -25,19 +25,19 @@ endif()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(jemalloc
- jemalloc/jemalloc 5.3.0
- SHA1=1be8fdba021e9d6ed201e7d6a3c464b2223fc927
+FetchContent_Declare(jemalloc
+ SOURCE_DIR @jemallocSrc@
)
FetchContent_GetProperties(jemalloc)
if(NOT jemalloc_POPULATED)
FetchContent_Populate(jemalloc)
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${jemalloc_SOURCE_DIR} ${jemalloc_BINARY_DIR})
execute_process(COMMAND autoconf
- WORKING_DIRECTORY ${jemalloc_SOURCE_DIR}
+ WORKING_DIRECTORY ${jemalloc_BINARY_DIR}
)
- execute_process(COMMAND ${jemalloc_SOURCE_DIR}/configure CC=${CMAKE_C_COMPILER} -C --enable-autogen
+ execute_process(COMMAND ${jemalloc_BINARY_DIR}/configure CC=${CMAKE_C_COMPILER} -C --enable-autogen
--disable-shared --disable-libdl ${DISABLE_CACHE_OBLIVIOUS} --with-jemalloc-prefix=""
WORKING_DIRECTORY ${jemalloc_BINARY_DIR}
)
diff --git a/cmake/jsoncons.cmake b/cmake/jsoncons.cmake
index 993f0849..d2306db0 100644
--- a/cmake/jsoncons.cmake
+++ b/cmake/jsoncons.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(jsoncons
- danielaparker/jsoncons v1.1.0
- MD5=6aa6c2aec8876c49cab90be75bc545a9
+FetchContent_Declare(jsoncons
+ SOURCE_DIR @jsonconsSrc@
)
FetchContent_MakeAvailableWithArgs(jsoncons
diff --git a/cmake/libevent.cmake b/cmake/libevent.cmake
index f0148599..ab7e256e 100644
--- a/cmake/libevent.cmake
+++ b/cmake/libevent.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(libevent
- libevent/libevent release-2.1.12-stable
- MD5=041edf4f20251f429d1674759ab6882c
+FetchContent_Declare(libevent
+ SOURCE_DIR @libeventSrc@
)
set(libevent_disable_ssl ON)
diff --git a/cmake/lua.cmake b/cmake/lua.cmake
index 0b6827b0..625957f0 100644
--- a/cmake/lua.cmake
+++ b/cmake/lua.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(lua
- RocksLabs/lua f458c3d797db31155fa0c156d5301716df48cb8c
- MD5=c7c4deb9f750d8f2bef0044a701df85c
+FetchContent_Declare(lua
+ SOURCE_DIR @luaSrc@
)
FetchContent_GetProperties(lua)
diff --git a/cmake/luajit.cmake b/cmake/luajit.cmake
index 2e38efa0..65b2c49c 100644
--- a/cmake/luajit.cmake
+++ b/cmake/luajit.cmake
@@ -39,9 +39,8 @@ if ((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND (NOT CMAKE_OSX_DEPLOYMENT_TARGET
message(FATAL_ERROR "The CMake option `CMAKE_OSX_DEPLOYMENT_TARGET` need to be specified, e.g. `-DCMAKE_OSX_DEPLOYMENT_TARGET=10.3`")
endif ()
-FetchContent_DeclareGitHubWithMirror(luajit
- RocksLabs/LuaJIT c0a8e68325ec261a77bde1c8eabad398168ffe74
- MD5=7ff3e5ca4ddec59be2c2f97c5ff881d0)
+FetchContent_Declare(luajit
+ SOURCE_DIR @luajitSrc@)
FetchContent_GetProperties(luajit)
if (NOT lua_POPULATED)
@@ -56,10 +55,11 @@ if (NOT lua_POPULATED)
set(MACOSX_TARGET "MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
endif ()
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${luajit_SOURCE_DIR} ${luajit_BINARY_DIR})
add_custom_target(make_luajit COMMAND ${MAKE_COMMAND} libluajit.a ${NINJA_MAKE_JOBS_FLAG}
"CFLAGS=${LUA_CFLAGS}" ${MACOSX_TARGET}
- WORKING_DIRECTORY ${luajit_SOURCE_DIR}/src
- BYPRODUCTS ${luajit_SOURCE_DIR}/src/libluajit.a
+ WORKING_DIRECTORY ${luajit_BINARY_DIR}/src
+ BYPRODUCTS ${luajit_BINARY_DIR}/src/libluajit.a
)
file(GLOB LUA_PUBLIC_HEADERS "${luajit_SOURCE_DIR}/src/*.hpp" "${luajit_SOURCE_DIR}/src/*.h")
@@ -68,5 +68,5 @@ endif()
add_library(luajit INTERFACE)
target_include_directories(luajit INTERFACE ${luajit_BINARY_DIR}/include)
-target_link_libraries(luajit INTERFACE ${luajit_SOURCE_DIR}/src/libluajit.a dl)
+target_link_libraries(luajit INTERFACE ${luajit_BINARY_DIR}/src/libluajit.a dl)
add_dependencies(luajit make_luajit)
diff --git a/cmake/lz4.cmake b/cmake/lz4.cmake
index 6df0b48f..1a676e2b 100644
--- a/cmake/lz4.cmake
+++ b/cmake/lz4.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(lz4
- lz4/lz4 v1.10.0
- MD5=0ef5a1dfd7fe28c246275c043531165d
+FetchContent_Declare(lz4
+ SOURCE_DIR @lz4Src@
)
FetchContent_GetProperties(lz4)
@@ -32,13 +31,14 @@ if(NOT lz4_POPULATED)
set(APPLE_FLAG "CFLAGS=-isysroot ${CMAKE_OSX_SYSROOT}")
endif()
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${lz4_SOURCE_DIR} ${lz4_BINARY_DIR})
add_custom_target(make_lz4 COMMAND ${MAKE_COMMAND} CC=${CMAKE_C_COMPILER} ${NINJA_MAKE_JOBS_FLAG} ${APPLE_FLAG} liblz4.a
- WORKING_DIRECTORY ${lz4_SOURCE_DIR}/lib
- BYPRODUCTS ${lz4_SOURCE_DIR}/lib/liblz4.a
+ WORKING_DIRECTORY ${lz4_BINARY_DIR}/lib
+ BYPRODUCTS ${lz4_BINARY_DIR}/lib/liblz4.a
)
endif()
add_library(lz4 INTERFACE)
-target_include_directories(lz4 INTERFACE $<BUILD_INTERFACE:${lz4_SOURCE_DIR}/lib>)
-target_link_libraries(lz4 INTERFACE $<BUILD_INTERFACE:${lz4_SOURCE_DIR}/lib/liblz4.a>)
+target_include_directories(lz4 INTERFACE $<BUILD_INTERFACE:${lz4_BINARY_DIR}/lib>)
+target_link_libraries(lz4 INTERFACE $<BUILD_INTERFACE:${lz4_BINARY_DIR}/lib/liblz4.a>)
add_dependencies(lz4 make_lz4)
diff --git a/cmake/pegtl.cmake b/cmake/pegtl.cmake
index 6e4b581f..5cf3c1c0 100644
--- a/cmake/pegtl.cmake
+++ b/cmake/pegtl.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubTarWithMirror(pegtl
- taocpp/PEGTL 3.2.8
- MD5=50339029d1bb037909b28c382214033e
+FetchContent_Declare(pegtl
+ SOURCE_DIR @pegtlSrc@
)
FetchContent_MakeAvailableWithArgs(pegtl)
diff --git a/cmake/rangev3.cmake b/cmake/rangev3.cmake
index c30a1468..62e09957 100644
--- a/cmake/rangev3.cmake
+++ b/cmake/rangev3.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(rangev3
- ericniebler/range-v3 0.12.0
- MD5=e220e3f545fdf46241b4f139822d73a1
+FetchContent_Declare(rangev3
+ SOURCE_DIR @rangev3Src@
)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
diff --git a/cmake/rocksdb.cmake b/cmake/rocksdb.cmake
index f7412a59..d4855d19 100644
--- a/cmake/rocksdb.cmake
+++ b/cmake/rocksdb.cmake
@@ -25,9 +25,8 @@ endif()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(rocksdb
- facebook/rocksdb v9.10.0
- MD5=ccc55dbd6f89d41c5bf2cb5a4c83a714
+FetchContent_Declare(rocksdb
+ SOURCE_DIR @rocksdbSrc@
)
FetchContent_GetProperties(jemalloc)
@@ -35,6 +34,7 @@ FetchContent_GetProperties(snappy)
FetchContent_GetProperties(tbb)
FetchContent_MakeAvailableWithArgs(rocksdb
+ CMAKE_CXX_FLAGS=-mpclmul
CMAKE_MODULE_PATH=${PROJECT_SOURCE_DIR}/cmake/modules # to locate FindJeMalloc.cmake
Snappy_DIR=${PROJECT_SOURCE_DIR}/cmake/modules # to locate SnappyConfig.cmake
FAIL_ON_WARNINGS=OFF
diff --git a/cmake/snappy.cmake b/cmake/snappy.cmake
index d62a506d..309a96eb 100644
--- a/cmake/snappy.cmake
+++ b/cmake/snappy.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(snappy
- google/snappy 1.2.1
- MD5=b120895e012e097b86bf49e0ef9ca67c
+FetchContent_Declare(snappy
+ SOURCE_DIR @snappySrc@
)
FetchContent_MakeAvailableWithArgs(snappy
diff --git a/cmake/span.cmake b/cmake/span.cmake
index 0fe733dc..95f6aa7f 100644
--- a/cmake/span.cmake
+++ b/cmake/span.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(span
- martinmoene/span-lite v0.11.0
- MD5=9786933d03cda33ac7dccbfe85f771dd
+FetchContent_Declare(span
+ SOURCE_DIR @spanSrc@
)
FetchContent_MakeAvailableWithArgs(span)
diff --git a/cmake/tbb.cmake b/cmake/tbb.cmake
index 622a4783..76150f3b 100644
--- a/cmake/tbb.cmake
+++ b/cmake/tbb.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(tbb
- oneapi-src/oneTBB v2022.0.0
- MD5=7eaeff0ddec85182afb60f2232fae2af
+FetchContent_Declare(tbb
+ SOURCE_DIR @tbbSrc@
)
FetchContent_MakeAvailableWithArgs(tbb
diff --git a/cmake/trie.cmake b/cmake/trie.cmake
index 30d63429..8d531b06 100644
--- a/cmake/trie.cmake
+++ b/cmake/trie.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(trie
- Tessil/hat-trie 906e6abd1e7063f1dacd3a6b270aa654b525eb0a
- MD5=a930364e9f6b60371319664bddf78000
+FetchContent_Declare(trie
+ SOURCE_DIR @trieSrc@
)
FetchContent_MakeAvailableWithArgs(trie)
diff --git a/cmake/xxhash.cmake b/cmake/xxhash.cmake
index 95b802f9..32319483 100644
--- a/cmake/xxhash.cmake
+++ b/cmake/xxhash.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(xxhash
- Cyan4973/xxHash v0.8.3
- MD5=19b919a066c28a9121dd9767e01d0c71
+FetchContent_Declare(xxhash
+ SOURCE_DIR @xxhashSrc@
)
FetchContent_GetProperties(xxhash)
diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake
index e92cd543..253c1c87 100644
--- a/cmake/zlib.cmake
+++ b/cmake/zlib.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(zlib
- madler/zlib v1.3
- MD5=2be1b77674e5aa3196330e58180e5a2c
+FetchContent_Declare(zlib
+ SOURCE_DIR @zlibSrc@
)
FetchContent_MakeAvailableWithArgs(zlib)
diff --git a/cmake/zstd.cmake b/cmake/zstd.cmake
index 2b2fb3c9..1c26a939 100644
--- a/cmake/zstd.cmake
+++ b/cmake/zstd.cmake
@@ -19,9 +19,8 @@ include_guard()
include(cmake/utils.cmake)
-FetchContent_DeclareGitHubWithMirror(zstd
- facebook/zstd v1.5.6
- MD5=cfb58a03ae01a39d5fff731ecaaa2657
+FetchContent_Declare(zstd
+ SOURCE_DIR @zstdSrc@
)
FetchContent_GetProperties(zstd)
@@ -32,13 +31,14 @@ if(NOT zstd_POPULATED)
set(APPLE_FLAG "CFLAGS=-isysroot ${CMAKE_OSX_SYSROOT}")
endif()
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${zstd_SOURCE_DIR} ${zstd_BINARY_DIR})
add_custom_target(make_zstd COMMAND ${MAKE_COMMAND} ${NINJA_MAKE_JOBS_FLAG} CC=${CMAKE_C_COMPILER} ${APPLE_FLAG} libzstd.a
- WORKING_DIRECTORY ${zstd_SOURCE_DIR}/lib
- BYPRODUCTS ${zstd_SOURCE_DIR}/lib/libzstd.a
+ WORKING_DIRECTORY ${zstd_BINARY_DIR}/lib
+ BYPRODUCTS ${zstd_BINARY_DIR}/lib/libzstd.a
)
endif()
add_library(zstd INTERFACE)
-target_include_directories(zstd INTERFACE $<BUILD_INTERFACE:${zstd_SOURCE_DIR}/lib>)
-target_link_libraries(zstd INTERFACE $<BUILD_INTERFACE:${zstd_SOURCE_DIR}/lib/libzstd.a>)
+target_include_directories(zstd INTERFACE $<BUILD_INTERFACE:${zstd_BINARY_DIR}/lib>)
+target_link_libraries(zstd INTERFACE $<BUILD_INTERFACE:${zstd_BINARY_DIR}/lib/libzstd.a>)
add_dependencies(zstd make_zstd)
diff --git a/kvrocks.conf b/kvrocks.conf
index 461d077e..da862094 100644
--- a/kvrocks.conf
+++ b/kvrocks.conf
@@ -817,7 +817,7 @@ rocksdb.block_size 16384
rocksdb.cache_index_and_filter_blocks yes
# Specify the compression to use.
-# Accept value: "no", "snappy", "lz4", "zstd", "zlib"
+# Accept value: "no", "snappy", "lz4", "lz4hc", "zstd", "zlib"
# default snappy
rocksdb.compression snappy
@@ -835,6 +835,7 @@ rocksdb.compression snappy
# RocksDB Default:
# - zstd: 3
# - zlib: Z_DEFAULT_COMPRESSION (currently -1)
+# - kLZ4HCCompression: 0
# - kLZ4: -1 (i.e., `acceleration=1`; see `CompressionOptions::level` doc)
# For all others, RocksDB does not specify a compression level.
# If the compression type doesn't support the setting, it will be a no-op.
diff --git a/src/storage/storage.h b/src/storage/storage.h
index a4563eab..af06d101 100644
--- a/src/storage/storage.h
+++ b/src/storage/storage.h
@@ -93,6 +93,7 @@ inline const std::vector<CompressionOption> CompressionOptions = {
{rocksdb::kSnappyCompression, "snappy", "kSnappyCompression"},
{rocksdb::kZlibCompression, "zlib", "kZlibCompression"},
{rocksdb::kLZ4Compression, "lz4", "kLZ4Compression"},
+ {rocksdb::kLZ4HCCompression, "lz4hc", "kLZ4HCCompression"},
{rocksdb::kZSTD, "zstd", "kZSTD"},
};
diff --git a/tests/gocase/unit/config/config_test.go b/tests/gocase/unit/config/config_test.go
index 34f67c89..6e82d9fc 100644
--- a/tests/gocase/unit/config/config_test.go
+++ b/tests/gocase/unit/config/config_test.go
@@ -123,7 +123,7 @@ func TestConfigSetCompression(t *testing.T) {
require.NoError(t, rdb.Do(ctx, "SET", "foo", "bar").Err())
configKey := "rocksdb.compression"
- supportedCompressions := []string{"no", "snappy", "zlib", "lz4", "zstd"}
+ supportedCompressions := []string{"no", "snappy", "zlib", "lz4", "lz4hc", "zstd"}
for _, compression := range supportedCompressions {
require.NoError(t, rdb.ConfigSet(ctx, configKey, compression).Err())
vals, err := rdb.ConfigGet(ctx, configKey).Result()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment