mirror of
http://github.com/valkey-io/valkey
synced 2024-11-21 08:37:40 +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>
77 lines
2.9 KiB
YAML
77 lines
2.9 KiB
YAML
format:
|
|
_help_line_width:
|
|
- How wide to allow formatted cmake files
|
|
line_width: 120
|
|
_help_tab_size:
|
|
- How many spaces to tab for indent
|
|
tab_size: 4
|
|
_help_use_tabchars:
|
|
- If true, lines are indented using tab characters (utf-8
|
|
- 0x09) instead of <tab_size> space characters (utf-8 0x20).
|
|
- In cases where the layout would require a fractional tab
|
|
- character, the behavior of the fractional indentation is
|
|
- governed by <fractional_tab_policy>
|
|
use_tabchars: false
|
|
_help_separate_ctrl_name_with_space:
|
|
- If true, separate flow control names from their parentheses
|
|
- with a space
|
|
separate_ctrl_name_with_space: true
|
|
_help_min_prefix_chars:
|
|
- If the statement spelling length (including space and
|
|
- parenthesis) is smaller than this amount, then force reject
|
|
- nested layouts.
|
|
min_prefix_chars: 4
|
|
_help_max_prefix_chars:
|
|
- If the statement spelling length (including space and
|
|
- parenthesis) is larger than the tab width by more than this
|
|
- amount, then force reject un-nested layouts.
|
|
max_prefix_chars: 10
|
|
_help_max_lines_hwrap:
|
|
- If a candidate layout is wrapped horizontally but it exceeds
|
|
- this many lines, then reject the layout.
|
|
max_lines_hwrap: 2
|
|
_help_line_ending:
|
|
- What style line endings to use in the output.
|
|
line_ending: unix
|
|
_help_command_case:
|
|
- Format command names consistently as 'lower' or 'upper' case
|
|
command_case: lower
|
|
_help_keyword_case:
|
|
- Format keywords consistently as 'lower' or 'upper' case
|
|
keyword_case: unchanged
|
|
_help_always_wrap:
|
|
- A list of command names which should always be wrapped
|
|
always_wrap: []
|
|
_help_enable_sort:
|
|
- If true, the argument lists which are known to be sortable
|
|
- will be sorted lexicographicall
|
|
enable_sort: true
|
|
_help_autosort:
|
|
- If true, the parsers may infer whether or not an argument
|
|
- list is sortable (without annotation).
|
|
autosort: false
|
|
_help_require_valid_layout:
|
|
- By default, if cmake-format cannot successfully fit
|
|
- everything into the desired linewidth it will apply the
|
|
- last, most agressive attempt that it made. If this flag is
|
|
- True, however, cmake-format will print error, exit with non-
|
|
- zero status code, and write-out nothing
|
|
require_valid_layout: false
|
|
_help_layout_passes:
|
|
- A dictionary mapping layout nodes to a list of wrap
|
|
- decisions. See the documentation for more information.
|
|
layout_passes: {}
|
|
encode:
|
|
_help_emit_byteorder_mark:
|
|
- If true, emit the unicode byte-order mark (BOM) at the start
|
|
- of the file
|
|
emit_byteorder_mark: false
|
|
_help_input_encoding:
|
|
- Specify the encoding of the input file. Defaults to utf-8
|
|
input_encoding: utf-8
|
|
_help_output_encoding:
|
|
- Specify the encoding of the output file. Defaults to utf-8.
|
|
- Note that cmake only claims to support utf-8 so be careful
|
|
- when using anything else
|
|
output_encoding: utf-8
|