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 |
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} |
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 |
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} |
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 |
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. goldor lld\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 |