mirror of
http://github.com/valkey-io/valkey
synced 2024-11-22 09:17:20 +00:00
07b3e7ae7a
With this commit, users are able to build valkey using `CMake`. ## Example usage: Build `valkey-server` in Release mode with TLS enabled and using `jemalloc` as the allocator: ```bash mkdir build-release cd $_ cmake .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/tmp/valkey-install \ -DBUILD_MALLOC=jemalloc -DBUILD_TLS=1 make -j$(nproc) install # start valkey /tmp/valkey-install/bin/valkey-server ``` Build `valkey-unit-tests`: ```bash mkdir build-release-ut cd $_ cmake .. -DCMAKE_BUILD_TYPE=Release \ -DBUILD_MALLOC=jemalloc -DBUILD_UNIT_TESTS=1 make -j$(nproc) # Run the tests ./bin/valkey-unit-tests ``` Current features supported by this PR: - Building against different allocators: (`jemalloc`, `tcmalloc`, `tcmalloc_minimal` and `libc`), e.g. to enable `jemalloc` pass `-DBUILD_MALLOC=jemalloc` to `cmake` - OpenSSL builds (to enable TLS, pass `-DBUILD_TLS=1` to `cmake`) - Sanitizier: pass `-DBUILD_SANITIZER=<address|thread|undefined>` to `cmake` - Install target + redis symbolic links - Build `valkey-unit-tests` executable - Standard CMake variables are supported. e.g. to install `valkey` under `/home/you/root` pass `-DCMAKE_INSTALL_PREFIX=/home/you/root` Why using `CMake`? To list *some* of the advantages of using `CMake`: - Superior IDE integrations: cmake generates the file `compile_commands.json` which is required by `clangd` to get a compiler accuracy code completion (in other words: your VScode will thank you) - Out of the source build tree: with the current build system, object files are created all over the place polluting the build source tree, the best practice is to build the project on a separate folder - Multiple build types co-existing: with the current build system, it is often hard to have multiple build configurations. With cmake you can do it easily: - It is the de-facto standard for C/C++ project these days More build examples: ASAN build: ```bash mkdir build-asan cd $_ cmake .. -DBUILD_SANITIZER=address -DBUILD_MALLOC=libc make -j$(nproc) ``` ASAN with jemalloc: ```bash mkdir build-asan-jemalloc cd $_ cmake .. -DBUILD_SANITIZER=address -DBUILD_MALLOC=jemalloc make -j$(nproc) ``` As seen by the previous examples, any combination is allowed and co-exist on the same source tree. ## Valkey installation With this new `CMake`, it is possible to install the binary by running `make install` or creating a package `make package` (currently supported on Debian like distros) ### Example 1: build & install using `make install`: ```bash mkdir build-release cd $_ cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/valkey-install -DCMAKE_BUILD_TYPE=Release make -j$(nproc) install # valkey is now installed under $HOME/valkey-install ``` ### Example 2: create a `.deb` installer: ```bash mkdir build-release cd $_ cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) package # ... CPack deb generation output sudo gdebi -n ./valkey_8.1.0_amd64.deb # valkey is now installed under /opt/valkey ``` ### Example 3: create installer for non Debian systems (e.g. FreeBSD or macOS): ```bash mkdir build-release cd $_ cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) package mkdir -p /opt/valkey && ./valkey-8.1.0-Darwin.sh --prefix=/opt/valkey --exclude-subdir # valkey-server is now installed under /opt/valkey ``` Signed-off-by: Eran Ifrah <eifrah@amazon.com>
154 lines
5.5 KiB
CMake
154 lines
5.5 KiB
CMake
# -------------------------------------------------
|
|
# Define the sources to be built
|
|
# -------------------------------------------------
|
|
|
|
# valkey-server source files
|
|
set(VALKEY_SERVER_SRCS
|
|
${CMAKE_SOURCE_DIR}/src/threads_mngr.c
|
|
${CMAKE_SOURCE_DIR}/src/adlist.c
|
|
${CMAKE_SOURCE_DIR}/src/quicklist.c
|
|
${CMAKE_SOURCE_DIR}/src/ae.c
|
|
${CMAKE_SOURCE_DIR}/src/anet.c
|
|
${CMAKE_SOURCE_DIR}/src/dict.c
|
|
${CMAKE_SOURCE_DIR}/src/kvstore.c
|
|
${CMAKE_SOURCE_DIR}/src/sds.c
|
|
${CMAKE_SOURCE_DIR}/src/zmalloc.c
|
|
${CMAKE_SOURCE_DIR}/src/lzf_c.c
|
|
${CMAKE_SOURCE_DIR}/src/lzf_d.c
|
|
${CMAKE_SOURCE_DIR}/src/pqsort.c
|
|
${CMAKE_SOURCE_DIR}/src/zipmap.c
|
|
${CMAKE_SOURCE_DIR}/src/sha1.c
|
|
${CMAKE_SOURCE_DIR}/src/ziplist.c
|
|
${CMAKE_SOURCE_DIR}/src/release.c
|
|
${CMAKE_SOURCE_DIR}/src/memory_prefetch.c
|
|
${CMAKE_SOURCE_DIR}/src/io_threads.c
|
|
${CMAKE_SOURCE_DIR}/src/networking.c
|
|
${CMAKE_SOURCE_DIR}/src/util.c
|
|
${CMAKE_SOURCE_DIR}/src/object.c
|
|
${CMAKE_SOURCE_DIR}/src/db.c
|
|
${CMAKE_SOURCE_DIR}/src/replication.c
|
|
${CMAKE_SOURCE_DIR}/src/rdb.c
|
|
${CMAKE_SOURCE_DIR}/src/t_string.c
|
|
${CMAKE_SOURCE_DIR}/src/t_list.c
|
|
${CMAKE_SOURCE_DIR}/src/t_set.c
|
|
${CMAKE_SOURCE_DIR}/src/t_zset.c
|
|
${CMAKE_SOURCE_DIR}/src/t_hash.c
|
|
${CMAKE_SOURCE_DIR}/src/config.c
|
|
${CMAKE_SOURCE_DIR}/src/aof.c
|
|
${CMAKE_SOURCE_DIR}/src/pubsub.c
|
|
${CMAKE_SOURCE_DIR}/src/multi.c
|
|
${CMAKE_SOURCE_DIR}/src/debug.c
|
|
${CMAKE_SOURCE_DIR}/src/sort.c
|
|
${CMAKE_SOURCE_DIR}/src/intset.c
|
|
${CMAKE_SOURCE_DIR}/src/syncio.c
|
|
${CMAKE_SOURCE_DIR}/src/cluster.c
|
|
${CMAKE_SOURCE_DIR}/src/cluster_legacy.c
|
|
${CMAKE_SOURCE_DIR}/src/cluster_slot_stats.c
|
|
${CMAKE_SOURCE_DIR}/src/crc16.c
|
|
${CMAKE_SOURCE_DIR}/src/endianconv.c
|
|
${CMAKE_SOURCE_DIR}/src/slowlog.c
|
|
${CMAKE_SOURCE_DIR}/src/eval.c
|
|
${CMAKE_SOURCE_DIR}/src/bio.c
|
|
${CMAKE_SOURCE_DIR}/src/rio.c
|
|
${CMAKE_SOURCE_DIR}/src/rand.c
|
|
${CMAKE_SOURCE_DIR}/src/memtest.c
|
|
${CMAKE_SOURCE_DIR}/src/syscheck.c
|
|
${CMAKE_SOURCE_DIR}/src/crcspeed.c
|
|
${CMAKE_SOURCE_DIR}/src/crccombine.c
|
|
${CMAKE_SOURCE_DIR}/src/crc64.c
|
|
${CMAKE_SOURCE_DIR}/src/bitops.c
|
|
${CMAKE_SOURCE_DIR}/src/sentinel.c
|
|
${CMAKE_SOURCE_DIR}/src/notify.c
|
|
${CMAKE_SOURCE_DIR}/src/setproctitle.c
|
|
${CMAKE_SOURCE_DIR}/src/blocked.c
|
|
${CMAKE_SOURCE_DIR}/src/hyperloglog.c
|
|
${CMAKE_SOURCE_DIR}/src/latency.c
|
|
${CMAKE_SOURCE_DIR}/src/sparkline.c
|
|
${CMAKE_SOURCE_DIR}/src/valkey-check-rdb.c
|
|
${CMAKE_SOURCE_DIR}/src/valkey-check-aof.c
|
|
${CMAKE_SOURCE_DIR}/src/geo.c
|
|
${CMAKE_SOURCE_DIR}/src/lazyfree.c
|
|
${CMAKE_SOURCE_DIR}/src/module.c
|
|
${CMAKE_SOURCE_DIR}/src/evict.c
|
|
${CMAKE_SOURCE_DIR}/src/expire.c
|
|
${CMAKE_SOURCE_DIR}/src/geohash.c
|
|
${CMAKE_SOURCE_DIR}/src/geohash_helper.c
|
|
${CMAKE_SOURCE_DIR}/src/childinfo.c
|
|
${CMAKE_SOURCE_DIR}/src/defrag.c
|
|
${CMAKE_SOURCE_DIR}/src/siphash.c
|
|
${CMAKE_SOURCE_DIR}/src/rax.c
|
|
${CMAKE_SOURCE_DIR}/src/t_stream.c
|
|
${CMAKE_SOURCE_DIR}/src/listpack.c
|
|
${CMAKE_SOURCE_DIR}/src/localtime.c
|
|
${CMAKE_SOURCE_DIR}/src/lolwut.c
|
|
${CMAKE_SOURCE_DIR}/src/lolwut5.c
|
|
${CMAKE_SOURCE_DIR}/src/lolwut6.c
|
|
${CMAKE_SOURCE_DIR}/src/acl.c
|
|
${CMAKE_SOURCE_DIR}/src/tracking.c
|
|
${CMAKE_SOURCE_DIR}/src/socket.c
|
|
${CMAKE_SOURCE_DIR}/src/tls.c
|
|
${CMAKE_SOURCE_DIR}/src/sha256.c
|
|
${CMAKE_SOURCE_DIR}/src/timeout.c
|
|
${CMAKE_SOURCE_DIR}/src/setcpuaffinity.c
|
|
${CMAKE_SOURCE_DIR}/src/monotonic.c
|
|
${CMAKE_SOURCE_DIR}/src/mt19937-64.c
|
|
${CMAKE_SOURCE_DIR}/src/resp_parser.c
|
|
${CMAKE_SOURCE_DIR}/src/call_reply.c
|
|
${CMAKE_SOURCE_DIR}/src/script_lua.c
|
|
${CMAKE_SOURCE_DIR}/src/script.c
|
|
${CMAKE_SOURCE_DIR}/src/functions.c
|
|
${CMAKE_SOURCE_DIR}/src/function_lua.c
|
|
${CMAKE_SOURCE_DIR}/src/commands.c
|
|
${CMAKE_SOURCE_DIR}/src/strl.c
|
|
${CMAKE_SOURCE_DIR}/src/connection.c
|
|
${CMAKE_SOURCE_DIR}/src/unix.c
|
|
${CMAKE_SOURCE_DIR}/src/server.c
|
|
${CMAKE_SOURCE_DIR}/src/logreqres.c)
|
|
|
|
# valkey-cli
|
|
set(VALKEY_CLI_SRCS
|
|
${CMAKE_SOURCE_DIR}/src/anet.c
|
|
${CMAKE_SOURCE_DIR}/src/adlist.c
|
|
${CMAKE_SOURCE_DIR}/src/dict.c
|
|
${CMAKE_SOURCE_DIR}/src/valkey-cli.c
|
|
${CMAKE_SOURCE_DIR}/src/zmalloc.c
|
|
${CMAKE_SOURCE_DIR}/src/release.c
|
|
${CMAKE_SOURCE_DIR}/src/ae.c
|
|
${CMAKE_SOURCE_DIR}/src/serverassert.c
|
|
${CMAKE_SOURCE_DIR}/src/crcspeed.c
|
|
${CMAKE_SOURCE_DIR}/src/crccombine.c
|
|
${CMAKE_SOURCE_DIR}/src/crc64.c
|
|
${CMAKE_SOURCE_DIR}/src/siphash.c
|
|
${CMAKE_SOURCE_DIR}/src/crc16.c
|
|
${CMAKE_SOURCE_DIR}/src/monotonic.c
|
|
${CMAKE_SOURCE_DIR}/src/cli_common.c
|
|
${CMAKE_SOURCE_DIR}/src/mt19937-64.c
|
|
${CMAKE_SOURCE_DIR}/src/strl.c
|
|
${CMAKE_SOURCE_DIR}/src/cli_commands.c)
|
|
|
|
# valkey-benchmark
|
|
set(VALKEY_BENCHMARK_SRCS
|
|
${CMAKE_SOURCE_DIR}/src/ae.c
|
|
${CMAKE_SOURCE_DIR}/src/anet.c
|
|
${CMAKE_SOURCE_DIR}/src/valkey-benchmark.c
|
|
${CMAKE_SOURCE_DIR}/src/adlist.c
|
|
${CMAKE_SOURCE_DIR}/src/dict.c
|
|
${CMAKE_SOURCE_DIR}/src/zmalloc.c
|
|
${CMAKE_SOURCE_DIR}/src/serverassert.c
|
|
${CMAKE_SOURCE_DIR}/src/release.c
|
|
${CMAKE_SOURCE_DIR}/src/crcspeed.c
|
|
${CMAKE_SOURCE_DIR}/src/crccombine.c
|
|
${CMAKE_SOURCE_DIR}/src/crc64.c
|
|
${CMAKE_SOURCE_DIR}/src/siphash.c
|
|
${CMAKE_SOURCE_DIR}/src/crc16.c
|
|
${CMAKE_SOURCE_DIR}/src/monotonic.c
|
|
${CMAKE_SOURCE_DIR}/src/cli_common.c
|
|
${CMAKE_SOURCE_DIR}/src/mt19937-64.c
|
|
${CMAKE_SOURCE_DIR}/src/strl.c)
|
|
|
|
# valkey-rdma module
|
|
set(VALKEY_RDMA_MODULE_SRCS ${CMAKE_SOURCE_DIR}/src/rdma.c)
|
|
|
|
# valkey-tls module
|
|
set(VALKEY_TLS_MODULE_SRCS ${CMAKE_SOURCE_DIR}/src/tls.c)
|