userver: Build options
Loading...
Searching...
No Matches
Build options

The list of userver libraries

userver is split into multiple CMake libraries.

CMake target CMake option to enable building the library Component for install Main documentation page
userver::universal Always on universal The C++ Asynchronous Framework
userver::universal-utest USERVER_FEATURE_UTEST (ON by default) universal Unit Tests and Benchmarks
userver::core USERVER_FEATURE_CORE (ON by default) core The C++ Asynchronous Framework
userver::utest USERVER_FEATURE_CORE + USERVER_FEATURE_UTEST core Unit Tests and Benchmarks
userver::ubench USERVER_FEATURE_CORE + USERVER_FEATURE_UTEST core Unit Tests and Benchmarks
userver::chaotic USERVER_FEATURE_CHAOTIC (ON by default) chaotic JSON schema codegen - the Chaotic
userver::grpc USERVER_FEATURE_GRPC grpc gRPC
userver::grpc-utest USERVER_FEATURE_GRPC + USERVER_FEATURE_UTEST grpc gRPC
userver::mongo USERVER_FEATURE_MONGODB mongo MongoDB
userver::postgresql USERVER_FEATURE_POSTGRESQL postgresql uPg Driver
userver::redis USERVER_FEATURE_REDIS redis Redis
userver::redis-utest USERVER_FEATURE_REDIS + USERVER_FEATURE_UTEST redis Redis
userver::clickhouse USERVER_FEATURE_CLICKHOUSE clickhouse ClickHouse Driver
userver::kafka USERVER_FEATURE_KAFKA kafka Apache Kafka
userver::kafka-utest USERVER_FEATURE_KAFKA + USERVER_FEATURE_UTEST kafka Apache Kafka
userver::rabbitmq USERVER_FEATURE_RABBITMQ rabbitmq RabbitMQ (AMQP 0-9-1)
userver::mysql USERVER_FEATURE_MYSQL mysql MySQL Driver
userver::rocks USERVER_FEATURE_ROCKS rocks TODO
userver::ydb USERVER_FEATURE_YDB ydb YDB
userver::otlp USERVER_FEATURE_OTLP otlp OpenTelemetry Protocol
userver::s3api USERVER_FEATURE_S3API s3api S3 API
userver::grpc-reflection USERVER_FEATURE_GRPC_REFLECTION grpc-reflection grpc reflection

Make sure to:

  1. Enable the CMake options to build the libraries you need
  2. Link against the libraries

The details vary depending on the method of building userver:

CMake options

To explicitly specialize the compiler, use the cmake options CMAKE_C_COMPILER and CMAKE_CXX_COMPILER. For example, to use clang-12 compiler, install it and add the following options to cmake Configure:

cmake ... -DCMAKE_C_COMPILER=clang-12 -DCMAKE_CXX_COMPILER=clang++-12

CMake options for selecting userver libraries to build

Option Description Default
USERVER_FEATURE_CORE Provide a core library with coroutines, otherwise build only userver::universal ON
USERVER_FEATURE_CHAOTIC Provide chaotic-codegen for jsonschema ON
USERVER_FEATURE_UTEST Provide utest and ubench for unit testing and benchmarking coroutines ${USERVER_FEATURE_CORE}
USERVER_FEATURE_TESTSUITE Enable functional tests via testsuite ON
USERVER_FEATURE_MONGODB Provide asynchronous driver for MongoDB ${USERVER_BUILD_ALL_COMPONENTS} AND x86* AND NOT *BSD
USERVER_FEATURE_POSTGRESQL Provide asynchronous driver for PostgreSQL ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_REDIS Provide asynchronous driver for Redis ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_CLICKHOUSE Provide asynchronous driver for ClickHouse ${USERVER_BUILD_ALL_COMPONENTS} AND x86*
USERVER_FEATURE_GRPC Provide asynchronous driver for gRPC ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_KAFKA Provide asynchronous driver for Apache Kafka ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_RABBITMQ Provide asynchronous driver for RabbitMQ (AMQP 0-9-1) ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_MYSQL Provide asynchronous driver for MySQL/MariaDB ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_ROCKS Provide asynchronous driver for RocksDB ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_YDB Provide asynchronous driver for YDB ${USERVER_BUILD_ALL_COMPONENTS} AND C++ standard >= 20
USERVER_FEATURE_OTLP Provide Logger for OpenTelemetry protocol ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_GRPC_REFLECTION Provide reflection service for gRPC ${USERVER_BUILD_ALL_COMPONENTS}
USERVER_FEATURE_S3API Provide S3 client for gRPC ${USERVER_BUILD_ALL_COMPONENTS}

CMake options for building everything

See also
Build instructions for userver's own samples, tests and benchmarks
Option Description Default
USERVER_BUILD_ALL_COMPONENTS Build all userver libraries compatible with the host except for ones disabled by USERVER_FEATURE_* OFF
USERVER_BUILD_TESTS Build unit tests, functional tests and benchmarks for userver itself OFF
USERVER_BUILD_SAMPLES Build userver samples OFF

CMake options for features that are unavailable for some platforms

See also
Build dependencies
Option Description Default
USERVER_FEATURE_CRYPTOPP_BLAKE2 Provide wrappers for blake2 algorithms of crypto++ ON
USERVER_FEATURE_PATCH_LIBPQ Apply patches to the libpq (add portals support), requires libpq.a ON
USERVER_FEATURE_CRYPTOPP_BASE64_URL Provide wrappers for Base64 URL decoding and encoding algorithms of crypto++ ON
USERVER_FEATURE_REDIS_HI_MALLOC Provide a hi_malloc(unsigned long) issue workaround OFF
USERVER_FEATURE_REDIS_TLS SSL/TLS support for Redis driver OFF
USERVER_FEATURE_STACKTRACE Allow capturing stacktraces using boost::stacktrace ON except for macOS, *BSD and old Boost
USERVER_FEATURE_JEMALLOC Use jemalloc memory allocator ON
USERVER_FEATURE_DWCAS Require double-width compare-and-swap ON
USERVER_FEATURE_GRPC_CHANNELZ Enable Channelz for gRPC ON for "sufficiently new" gRPC versions
USERVER_MYSQL_ALLOW_BUGGY_LIBMARIADB Allows mysql driver to leak memory instead of aborting in some rare cases when linked against libmariadb3<3.3.4 OFF
USERVER_DISABLE_PHDR_CACHE Disable caching of dl_phdr_info items, which interferes with dlopen OFF
USERVER_DISABLE_RSEQ_ACCELERATION Disable rseq-based optimizations, which may not work depending on kernel/glibc/distro/etc version OFF for x86 Linux, ON otherwise
USERVER_FEATURE_UBOOST_CORO Build with vendored version of Boost.context and Boost.coroutine2, is needed for sanitizers builds OFF for arm64 macOS, ON otherwise

CMake options for downloading userver dependencies

Option Description Default
USERVER_DOWNLOAD_PACKAGES Download missing third party packages and use the downloaded versions ON
USERVER_DOWNLOAD_PACKAGE_BROTLI Download and setup Brotli if no Brotli of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_CARES Download and setup c-ares if no c-ares of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_CCTZ Download and setup cctz if no cctz of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_CLICKHOUSECPP Download and setup clickhouse-cpp ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_CRYPTOPP Download and setup CryptoPP if no CryptoPP of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_CURL Download and setup libcurl if no libcurl of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_FMT Download and setup Fmt if no Fmt of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_GBENCH Download and setup gbench if no gbench of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_GRPC Download and setup gRPC if no gRPC of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_GTEST Download and setup gtest if no gtest of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_PROTOBUF Download and setup Protobuf if no Protobuf of matching version was found ${USERVER_DOWNLOAD_PACKAGE_GRPC}
USERVER_DOWNLOAD_PACKAGE_KAFKA Download and setup librdkafka if no librdkafka matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_DOWNLOAD_PACKAGE_YDBCPPSDK Download and setup ydb-cpp-sdk if no ydb-cpp-sdk of matching version was found ${USERVER_DOWNLOAD_PACKAGES}
USERVER_FORCE_DOWNLOAD_PACKAGES Download all possible third-party packages even if there is an installed system package OFF
USERVER_FORCE_DOWNLOAD_PROTOBUF Download Protobuf even if there is an installed system package ${USERVER_FORCE_DOWNLOAD_PACKAGES}
USERVER_FORCE_DOWNLOAD_GRPC Download gRPC even if there is an installed system package ${USERVER_FORCE_DOWNLOAD_PACKAGES}

CMake options for paths to dependencies

Option Description Default
USERVER_PYTHON_PATH Path to the python3 binary for use in testsuite tests python3
USERVER_PG_SERVER_INCLUDE_DIR Path to the folder with PostgreSQL server headers, e.g. /usr/include/postgresql/15/server autodetected
USERVER_PG_SERVER_LIBRARY_DIR Path to the folder with PostgreSQL server libraries, e.g. /usr/lib/postgresql/15/lib autodetected
USERVER_PG_INCLUDE_DIR Path to the folder with PostgreSQL libpq headers, e.g. /usr/local/include autodetected
USERVER_PG_LIBRARY_DIR Path to the folder with PostgreSQL libpq libraries, e.g. /usr/local/lib autodetected
USERVER_GOOGLE_COMMON_PROTOS_TARGET Name of cmake target preparing google common proto library Builds userver-api-common-protos
USERVER_GOOGLE_COMMON_PROTOS Path to the folder with google common proto files Downloads automatically

CMake options for various compilation modes

Option Description Default
USERVER_CHECK_PACKAGE_VERSIONS Check package versions ON
USERVER_SANITIZE Build with sanitizers support, allows combination of values via 'val1 val2'. Available: addr, mem, ub ‘’'(no sanitizers) \ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_SANITIZE_BLACKLIST\ilinebr </td> <td class="markdownTableBodyNone"> Path to file that is passed to the -fsanitize-blacklist option \ilinebr </td> <td class="markdownTableBodyNone">''(no blacklist) \ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_USE_LD\ilinebr </td> <td class="markdownTableBodyNone"> Linker to use, e.g.goldorlld\ilinebr </td> <td class="markdownTableBodyNone">lldfor Clang, system linker otherwise (typically GNU ld) \ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_LTO\ilinebr </td> <td class="markdownTableBodyNone"> Use link time optimizations (SEE NOTE BELOW) \ilinebr </td> <td class="markdownTableBodyNone">OFF\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_LTO_CACHE\ilinebr </td> <td class="markdownTableBodyNone"> Use LTO cache if present, disable for benchmarking build times \ilinebr </td> <td class="markdownTableBodyNone">ON\ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_LTO_CACHE_DIR\ilinebr </td> <td class="markdownTableBodyNone"> LTO cache directory \ilinebr </td> <td class="markdownTableBodyNone">${CMAKE_CURRENT_BINARY_DIR}/.ltocache\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_LTO_CACHE_SIZE_MB\ilinebr </td> <td class="markdownTableBodyNone"> LTO cache size limit in MB \ilinebr </td> <td class="markdownTableBodyNone">6000\ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_PGO_GENERATE\ilinebr </td> <td class="markdownTableBodyNone"> Generate PGO profile \ilinebr </td> <td class="markdownTableBodyNone">OFF\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_PGO_USE\ilinebr </td> <td class="markdownTableBodyNone"> Path to PGO profile file \ilinebr </td> <td class="markdownTableBodyNone">''\ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_USE_CCACHE\ilinebr </td> <td class="markdownTableBodyNone"> Use ccache if present, disable for benchmarking build times \ilinebr </td> <td class="markdownTableBodyNone">ON\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_COMPILATION_TIME_TRACE\ilinebr </td> <td class="markdownTableBodyNone"> Generate Clang compilation time trace \ilinebr </td> <td class="markdownTableBodyNone">OFF\ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_NO_WERROR\ilinebr </td> <td class="markdownTableBodyNone"> Do not treat warnings as errors \ilinebr </td> <td class="markdownTableBodyNone">ON\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_FEATURE_ERASE_LOG_WITH_LEVEL\ilinebr </td> <td class="markdownTableBodyNone"> Logs of this and below levels are removed from binary. Possible values: trace, info, debug, warning, error \ilinebr </td> <td class="markdownTableBodyNone">OFF\ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_PIP_USE_SYSTEM_PACKAGES\ilinebr </td> <td class="markdownTableBodyNone"> Use system python packages inside venv. Useful for Docker, CI and other controlled environments \ilinebr </td> <td class="markdownTableBodyNone">OFF\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_PIP_OPTIONS\ilinebr </td> <td class="markdownTableBodyNone"> Options for all pip calls. Useful for passing–no-indexoption to prevent network usage \ilinebr </td> <td class="markdownTableBodyNone">''\ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_INSTALL\ilinebr </td> <td class="markdownTableBodyNone"> Build userver for further installation \ilinebr </td> <td class="markdownTableBodyNone">OFF\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">USERVER_CONAN\ilinebr </td> <td class="markdownTableBodyNone"> Build userver using Conan packages \ilinebr </td> <td class="markdownTableBodyNone">ONif build is launched from Conan,OFFotherwise \ilinebr </td> </tr> <tr class="markdownTableRowOdd"> <td class="markdownTableBodyNone">USERVER_GENERATE_PROTOS_AT_CONFIGURE\ilinebr </td> <td class="markdownTableBodyNone"> Run protoc at CMake Configure time for better IDE integration \ilinebr </td> <td class="markdownTableBodyNone">OFFfor downloaded Protobuf,ON` otherwise
Warning
Using LTO can lead to some problems. We don't recommend using USERVER_LTO.