Version 11.0.1
Building and installing WiredTiger on POSIX (Linux, *BSD, OS X):

Building using Git and GitHub

Skip this step if you are building from a WiredTiger release package, and proceed with Building WiredTiger.

To build from the WiredTiger GitHub repository requires git, GCC 8.5 or later or Clang 7.01 or later, and CMake 3.10.0 or later, and Python 3 or later (if building to support the Python API), and SWIG (if building to support the Python API). We also suggest Ninja and ccache for improved incremental build times.

First, clone the repository:

git clone git://github.com/wiredtiger/wiredtiger.git

Now proceed with Building WiredTiger.

Building WiredTiger

To build the WiredTiger software on a POSIX system, change directory to the top-level directory, then configure and create a new directory to run your build from:

cd wiredtiger
mkdir build
cd build

Change into your newly created build directory and using CMake run the build configuration step to generate your build.

cmake ../.
# If using the Ninja build tool, you can additionally specify the generator '-G Ninja' to construct a
# ninja build i.e 'cmake -G Ninja ../.'.

Lastly, in the same directory you configured your build, start the build:

make
# Or 'ninja' if using the Ninja build tool.

Installing WiredTiger

The WiredTiger software consists of a library and a single standalone utility.

WiredTiger's distribution by default builds and installs the shared version library in /usr/local/lib. For example:

file /usr/local/lib/libwiredtiger*
/usr/local/lib/libwiredtiger.so.10.0.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
/usr/local/lib/libwiredtiger.so: symbolic link to `libwiredtiger.so.10.0.1'

WiredTiger uses CMake to build and install the libraries. By default, the shared libraries are built. To build only static libraries, configure WiredTiger using the -DENABLE_STATIC=1 argument.

In addition, WiredTiger installs a standalone utility program named wt. By default, this utility is installed in /usr/local/bin/wt.

To install WiredTiger:

make install
# Or 'ninja install' if using the Ninja build tool.

To uninstall WiredTiger:

xargs rm < install_manifest.txt

The install_manifest.txt file is created when you run ninja install.

To install WiredTiger's libraries or binaries into alternate locations, configure WiredTiger using the -DCMAKE_INSTALL_PREFIX=custom_path argument. For example, to install the libraries and binaries into a different location:

cmake -DCMAKE_INSTALL_PREFIX=/c/wiredtiger -G Ninja ../.

Configuring WiredTiger

The WiredTiger software supports some additional configuration options:

-DHAVE_ATTACH=1
Configure WiredTiger to sleep and wait for a debugger to attach on failure. DO NOT configure this option in production environments.
-DHAVE_DIAGNOSTIC=1
Configure WiredTiger to perform various run-time diagnostic tests (enabled by default for non Release build types). DO NOT configure this option in production environments.
-DNON_BARRIER_DIAGNOSTIC_YIELDS=1
Configure WiredTiger to not use memory barriers when yielding threads for diagnostic purposes. Requires that HAVE_DIAGNOSTIC is also enabled. DO NOT configure this option in production environments.
-DENABLE_LZ4=1
Configure WiredTiger for LZ4 compression (enabled by default if the LZ4 library is present); see Compressors for more information.
-DENABLE_PYTHON=1
Build the WiredTiger Python API; requires SWIG (enabled by default if python is available).
-DENABLE_SNAPPY=1
Configure WiredTiger for snappy compression (enabled by default if the SNAPPY library is present); see Compressors for more information.
-DENABLE_ZLIB=1
Configure WiredTiger for zlib compression (enabled by default if the ZLIB library is present); see Compressors for more information.
-DENABLE_ZSTD=1
Configure WiredTiger for Zstd compression (enabled by default if the ZSTD library is present); see Compressors for more information.
-DWT_STANDALONE_BUILD=0
Configure WiredTiger to disable standalone build. Standalone build is enabled by default.
-DHAVE_BUILTIN_EXTENSION_LZ4=1, -DHAVE_BUILTIN_EXTENSION_SNAPPY=1, -DHAVE_BUILTIN_EXTENSION_ZLIB=1, -DHAVE_BUILTIN_EXTENSION_ZSTD=1
Configure WiredTiger to include support for extensions in the main library. This avoids requiring additional libraries for supported extensions. Currently supported builtin options are for lz4, snappy, zlib and zstd.
-DSPINLOCK_TYPE[=pthread, pthread_adaptive, gcc]
Configure WiredTiger to use a specific mutex type for serialization; options are pthread (the default, which configures WiredTiger to use POSIX 1003.1c pthread mutexes), pthread_adaptive (which configures WiredTiger to use POSIX 1003.1c pthread mutexes configured to be adaptive (where that functionality is available), or gcc (which configures WiredTiger to use gcc-based spinlocks).

Changing compiler or loader options

By default CMake will use your default system compiler (cc). If you want to use a specific toolchain you can pass a toolchain file. We have provided a toolchain file for both GCC (cmake/toolchains/gcc.cmake) and Clang (cmake/toolchains/clang.cmake). To use either toolchain you can pass the -DCMAKE_TOOLCHAIN_FILE= to the CMake configuration step. For example:

For example, to explicitly specify the GCC toolchain:

cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/gcc.cmake ../.

To explicitly specify the Clang toolchain:

cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/clang.cmake ../.

By default, WiredTiger builds with the -O3 compiler optimization flag unless manually specified through the -DCC_OPTIMIZE_LEVEL configuration option. For example, to specify a different level of optimization:

cmake -DCC_OPTIMIZE_LEVEL=-O1 ../.

Running WiredTiger C/C++ Tests

The WiredTiger CMake build makes available a suite of C/C++ based tests. To run the available tests you can use our smoke test alias (check). Ensure you're in the build directory and execute:

ctest -j$(nproc) -L check

Alternatively to just run all the tests available:

ctest -j$(nproc)

In addition, to get verbose output with your test run you can use the -VV flag:

ctest -j$(nproc) -VV

If you want to focus on running a specific test (i.e. run a test that may be failing) you can use the -R flag:

# Note: -R specifies a regex, where any matching test will be run
ctest -j$(nproc) -R test_name