From e6918187568dbd01842d8d1d2c808ce16a894239 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 13:54:28 +0200 Subject: Adding upstream version 18.2.2. Signed-off-by: Daniel Baumann --- src/seastar/CMakeLists.txt | 1315 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1315 insertions(+) create mode 100644 src/seastar/CMakeLists.txt (limited to 'src/seastar/CMakeLists.txt') diff --git a/src/seastar/CMakeLists.txt b/src/seastar/CMakeLists.txt new file mode 100644 index 000000000..e42c2c561 --- /dev/null +++ b/src/seastar/CMakeLists.txt @@ -0,0 +1,1315 @@ +# +# This file is open source software, licensed to you under the terms +# of the Apache License, Version 2.0 (the "License"). See the NOTICE file +# distributed with this work for additional information regarding copyright +# ownership. You may not use this file except in compliance with the License. +# +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +# +# Copyright (C) 2018 Scylladb, Ltd. +# + +cmake_minimum_required (VERSION 3.13) + +list (APPEND CMAKE_MODULE_PATH + ${CMAKE_CURRENT_SOURCE_DIR}/cmake + ${CMAKE_CURRENT_BINARY_DIR}) + +include (Cooking OPTIONAL) + +# This variable impacts the way DPDK is configured by cmake-cooking (if DPDK is enabled), so its definition needs to +# come before PROJECT. +set (Seastar_DPDK_MACHINE + "native" + CACHE + STRING + "Configure DPDK for this processor architecture (if `Seastar_DPDK` is enabled). A DPDK code name abbreviation (e.g., ivb)") + +project (Seastar + VERSION 1.0 + LANGUAGES CXX) + +cmake_policy (SET CMP0090 NEW) +if (POLICY CMP0135) + cmake_policy (SET CMP0135 NEW) +endif () + +# generic boolean values passed as string, potentially from configure.py +set (True_STRING_VALUES "ON" "yes" "Yes" "YES" "true" "True" "TRUE") +set (False_STRING_VALUES "OFF" "no" "No" "NO" "false" "False" "FALSE") +set (Default_STRING_VALUES "DEFAULT" "default" "Default") + +set (Seastar_ALLOC_FAILURE_INJECTION + "DEFAULT" + CACHE + STRING + "Enable failure injection into the Seastar allocator. Can be ON, OFF or DEFAULT (which enables it for Dev mode)") + +option (Seastar_TASK_BACKTRACE + "Collect backtrace at deferring points." + OFF) + +option (Seastar_DEBUG_ALLOCATIONS + "For now just writes 0xab to newly allocated memory" + OFF) + +option (Seastar_SSTRING + "Use seastar's own string implementation" + ON) + +set (Seastar_API_LEVEL + "6" + CACHE + STRING + "Seastar compatibility API level (2=server_socket::accept() returns accept_result, 3=make_file_output_stream(), make_file_data_sink() returns future<...>, 4=when_all_succeed returns future>, 5=future::get() returns T&&), 6=future is not variadic") + +set_property (CACHE Seastar_API_LEVEL + PROPERTY + STRINGS 2 3 4 5 6) + +set (Seastar_SCHEDULING_GROUPS_COUNT + "16" + CACHE + STRING + "A positive number to set Seastar's reactor number of allowed different scheduling groups.") + +if (NOT Seastar_SCHEDULING_GROUPS_COUNT MATCHES "^[1-9][0-9]*") + message(FATAL_ERROR "Seastar_SCHEDULING_GROUPS_COUNT must be a positive number (${Seastar_SCHEDULING_GROUPS_COUNT})") +endif() + +# +# Add a dev build type. +# +# All pre-defined build modes include optimizations or debug info, +# which make them slow to build. The dev build mode is intended for +# fast build/test iteration. +# + +if (CMAKE_CXX_COMPILER_ID MATCHES Clang) + set (CMAKE_CXX_FLAGS_DEV_OPT_LEVEL "-O2") +else () + set (CMAKE_CXX_FLAGS_DEV_OPT_LEVEL "-O1") +endif () + +set (CMAKE_CXX_FLAGS_DEV + "${CMAKE_CXX_FLAGS_DEV_OPT_LEVEL}" + CACHE + STRING + "Flags used by the C++ compiler during dev builds." + FORCE) + +set (CMAKE_C_FLAGS_DEV + "-O1" + CACHE + STRING + "Flags used by the C compiler during dev builds." + FORCE) + +set (CMAKE_EXE_LINKER_FLAGS_DEV + "" + CACHE + STRING + "Flags used for linking binaries during dev builds." + FORCE) + +set (CMAKE_SHARED_LINKER_FLAGS_DEV + "" + CACHE + STRING + "Flags used by the shared libraries linker during builds." + FORCE) + +mark_as_advanced ( + CMAKE_CXX_FLAGS_DEV + CMAKE_C_FLAGS_DEV + CMAKE_EXE_LINKER_FLAGS_DEV + CMAKE_SHARED_LINKER_FLAGS_DEV) + +set (CMAKE_CXX_FLAGS_SANITIZE + "-Os -g" + CACHE + STRING + "Flags used by the C++ compiler during sanitize builds." + FORCE) + +set (CMAKE_CXX_STANDARD + "20" + CACHE + STRING + "C++ standard to build with.") + +set (CMAKE_C_FLAGS_SANITIZE + "-Os -g" + CACHE + STRING + "Flags used by the C compiler during sanitize builds." + FORCE) + +set (CMAKE_EXE_LINKER_FLAGS_SANITIZE + "" + CACHE + STRING + "Flags used for linking binaries during sanitize builds." + FORCE) + +set (CMAKE_SHARED_LINKER_FLAGS_SANITIZE + "" + CACHE + STRING + "Flags used by the shared libraries linker during sanitize builds." + FORCE) + +mark_as_advanced ( + CMAKE_CXX_FLAGS_SANITIZE + CMAKE_C_FLAGS_SANITIZE + CMAKE_EXE_LINKER_FLAGS_SANITIZE + CMAKE_SHARED_LINKER_FLAGS_SANITIZE) + +set (CMAKE_BUILD_TYPE + "${CMAKE_BUILD_TYPE}" + CACHE + STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Dev Sanitize." + FORCE) + +if (NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE "Release") +endif () + +set (Seastar_ALLOC_PAGE_SIZE + "" + CACHE + STRING + "Override the Seastar allocator page size, in bytes.") + +function (set_option_if_package_is_found option_name package_name) + # if the package is found, set the option on behalf of user unless it is + # explicitly specified, + if (DEFINED ${option_name}) + return () + endif () + if (${package_name}_FOUND) + set (${option_name} ON CACHE BOOL "") + endif () +endfunction () + +# When Seastar is a top-level project, enable the non-library targets by default. +# If it is embedded with `add_subdirectory`, disable them. +if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set (Seastar_MASTER_PROJECT ON) +else () + set (Seastar_MASTER_PROJECT OFF) +endif () + +option (Seastar_APPS + "Enable application targets." + ${Seastar_MASTER_PROJECT}) + +set (Seastar_CXX_FLAGS + "" + CACHE + STRING + "Semicolon-separated list of extra compilation flags for Seastar itself.") + +option (Seastar_DEMOS + "Enable demonstration targets." + ${Seastar_MASTER_PROJECT}) + +option (Seastar_DOCS + "Enable documentation targets." + ${Seastar_MASTER_PROJECT}) + +option (Seastar_DPDK + "Enable DPDK support." + OFF) + +option (Seastar_EXCLUDE_APPS_FROM_ALL + "When enabled alongside Seastar_APPS, do not build applications by default." + OFF) + +option (Seastar_EXCLUDE_DEMOS_FROM_ALL + "When enabled alongside Seastar_DEMOS, do not build demonstrations by default." + OFF) + +option (Seastar_EXCLUDE_TESTS_FROM_ALL + "When enabled alongside Seastar_TESTING, do not build tests by default." + OFF) + +option (Seastar_EXECUTE_ONLY_FAST_TESTS + "Only execute tests which run quickly." + OFF) + +option (Seastar_HWLOC + "Enable hwloc support." + ON) + +if (DEFINED Seastar_IO_URING) + option (Seastar_IO_URING + "Enable io_uring support." + ON) +endif () + +set (Seastar_JENKINS + "" + CACHE + STRING + "If non-empty, the prefix for XML files containing the results of running tests (for Jenkins).") + +set (Seastar_LD_FLAGS + "" + CACHE + STRING + "Semicolon-separated list of extra linking flags for Seastar itself.") + +option (Seastar_INSTALL + "Install targets." + ${Seastar_MASTER_PROJECT}) + +option (Seastar_NUMA + "Enable NUMA support." + ON) + +option (Seastar_TESTING + "Enable testing targets." + ${Seastar_MASTER_PROJECT}) + +include (CMakeDependentOption) +cmake_dependent_option (Seastar_ENABLE_TESTS_ACCESSING_INTERNET + "Enable tests accessing internet." ON + "Seastar_TESTING" OFF) + +option (Seastar_COMPRESS_DEBUG + "Compress debug info." + ON) + +option (Seastar_SPLIT_DWARF + "Use split dwarf." + OFF) + +option (Seastar_HEAP_PROFILING + "Enable heap profiling. No effect when Seastar is compiled with the default allocator." + OFF) + +option (Seastar_DEFERRED_ACTION_REQUIRE_NOEXCEPT + "Enable noexcept requirement for deferred actions." + ON) + +set (Seastar_TEST_TIMEOUT + "300" + CACHE + STRING + "Maximum allowed time for a test to run, in seconds.") + +# We set the following environment variables +# * ASAN_OPTIONS=disable_coredump=0:abort_on_error=1:detect_stack_use_after_return=1 +# By default asan disables core dumps because they used to be +# huge. This is no longer the case since the shadow memory is +# excluded, so it is safe to enable them. +# * UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1 +# Fail the test if any undefined behavior is found and use abort +# instead of exit. Using abort is what causes core dumps to be +# produced. +# * BOOST_TEST_CATCH_SYSTEM_ERRORS=no +# Normally the boost test library handles SIGABRT and prevents core +# dumps from being produced. + +# This works great with clang and gcc 10.2, but unfortunately not any +# previous gcc. +set (Seastar_USE_AFTER_RETURN "") +if ((NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")) OR + (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.2)) + set (Seastar_USE_AFTER_RETURN ":detect_stack_use_after_return=1") +endif () + +set (Seastar_TEST_ENVIRONMENT + "ASAN_OPTIONS=disable_coredump=0:abort_on_error=1${Seastar_USE_AFTER_RETURN};UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1;BOOST_TEST_CATCH_SYSTEM_ERRORS=no" + CACHE + STRING + "Environment variables for running tests") + +option (Seastar_UNUSED_RESULT_ERROR + "Make [[nodiscard]] violations an error (instead of a warning)." + OFF) + +set (Seastar_STACK_GUARDS + "DEFAULT" + CACHE + STRING + "Enable stack guards. Can be ON, OFF or DEFAULT (which enables it for non release builds)") + +set (Seastar_SANITIZE + "DEFAULT" + CACHE + STRING + "Enable ASAN and UBSAN. Can be ON, OFF or DEFAULT (which enables it for Debug and Sanitize)") + +set (Seastar_DEBUG_SHARED_PTR + "DEFAULT" + CACHE + STRING + "Enable shared_ptr debugging. Can be ON, OFF or DEFAULT (which enables it for Debug and Sanitize)") + +# +# Useful (non-cache) variables. +# + +set (Seastar_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set (Seastar_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) +set (Seastar_GEN_BINARY_DIR ${Seastar_BINARY_DIR}/gen) + +# +# Dependencies. +# + +include (SeastarDependencies) +seastar_find_dependencies () + +# Private build dependencies not visible to consumers +find_package (ragel 6.10 REQUIRED) +find_package (Threads REQUIRED) +find_package (PthreadSetName REQUIRED) +find_package (Valgrind REQUIRED) + +# +# Code generation helpers. +# + +function (seastar_generate_ragel) + set (one_value_args TARGET VAR IN_FILE OUT_FILE) + cmake_parse_arguments (args "" "${one_value_args}" "" ${ARGN}) + get_filename_component (out_dir ${args_OUT_FILE} DIRECTORY) + + add_custom_command ( + DEPENDS ${args_IN_FILE} + OUTPUT ${args_OUT_FILE} + COMMAND ${CMAKE_COMMAND} -E make_directory ${out_dir} + COMMAND ${ragel_RAGEL_EXECUTABLE} -G2 -o ${args_OUT_FILE} ${args_IN_FILE} + COMMAND sed -i -e "'1h;2,$$H;$$!d;g'" -re "'s/static const char _nfa[^;]*;//g'" ${args_OUT_FILE}) + + add_custom_target (${args_TARGET} + DEPENDS ${args_OUT_FILE}) + + set (${args_VAR} ${args_OUT_FILE} PARENT_SCOPE) +endfunction () + +function (seastar_generate_swagger) + set (one_value_args TARGET VAR IN_FILE OUT_DIR) + cmake_parse_arguments (args "" "${one_value_args}" "" ${ARGN}) + get_filename_component (in_file_name ${args_IN_FILE} NAME) + set (generator ${Seastar_SOURCE_DIR}/scripts/seastar-json2code.py) + set (header_out ${args_OUT_DIR}/${in_file_name}.hh) + set (source_out ${args_OUT_DIR}/${in_file_name}.cc) + + add_custom_command ( + DEPENDS + ${args_IN_FILE} + ${generator} + OUTPUT ${header_out} ${source_out} + COMMAND ${CMAKE_COMMAND} -E make_directory ${args_OUT_DIR} + COMMAND ${generator} --create-cc -f ${args_IN_FILE} -o ${header_out}) + + add_custom_target (${args_TARGET} + DEPENDS + ${header_out} + ${source_out}) + + set (${args_VAR} ${header_out} ${source_out} PARENT_SCOPE) +endfunction () + +# +# The `seastar` library. +# + +seastar_generate_ragel ( + TARGET seastar_http_chunk_parsers + VAR http_chunk_parsers_file + IN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/http/chunk_parsers.rl + OUT_FILE ${Seastar_GEN_BINARY_DIR}/include/seastar/http/chunk_parsers.hh) + +seastar_generate_ragel ( + TARGET seastar_http_request_parser + VAR http_request_parser_file + IN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/http/request_parser.rl + OUT_FILE ${Seastar_GEN_BINARY_DIR}/include/seastar/http/request_parser.hh) + +seastar_generate_ragel ( + TARGET seastar_http_response_parser + VAR http_response_parser_file + IN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/http/response_parser.rl + OUT_FILE ${Seastar_GEN_BINARY_DIR}/include/seastar/http/response_parser.hh) + +if (Seastar_DPDK) + set (seastar_dpdk_obj seastar-dpdk.o) +endif () + +add_library (seastar STATIC + ${http_chunk_parsers_file} + ${http_request_parser_file} + ${seastar_dpdk_obj} + include/seastar/core/abort_source.hh + include/seastar/core/alien.hh + include/seastar/core/align.hh + include/seastar/core/aligned_buffer.hh + include/seastar/core/app-template.hh + include/seastar/core/array_map.hh + include/seastar/core/bitops.hh + include/seastar/core/bitset-iter.hh + include/seastar/core/byteorder.hh + include/seastar/core/cacheline.hh + include/seastar/core/checked_ptr.hh + include/seastar/core/chunked_fifo.hh + include/seastar/core/circular_buffer.hh + include/seastar/core/circular_buffer_fixed_capacity.hh + include/seastar/core/condition-variable.hh + include/seastar/core/deleter.hh + include/seastar/core/distributed.hh + include/seastar/core/do_with.hh + include/seastar/core/dpdk_rte.hh + include/seastar/core/enum.hh + include/seastar/core/exception_hacks.hh + include/seastar/core/execution_stage.hh + include/seastar/core/expiring_fifo.hh + include/seastar/core/fair_queue.hh + include/seastar/core/file.hh + include/seastar/core/file-types.hh + include/seastar/core/fsqual.hh + include/seastar/core/fstream.hh + include/seastar/core/function_traits.hh + include/seastar/core/future-util.hh + include/seastar/core/future.hh + include/seastar/core/gate.hh + include/seastar/core/iostream-impl.hh + include/seastar/core/iostream.hh + include/seastar/util/later.hh + include/seastar/core/layered_file.hh + include/seastar/core/linux-aio.hh + include/seastar/core/loop.hh + include/seastar/core/lowres_clock.hh + include/seastar/core/manual_clock.hh + include/seastar/core/map_reduce.hh + include/seastar/core/memory.hh + include/seastar/core/metrics.hh + include/seastar/core/metrics_api.hh + include/seastar/core/metrics_registration.hh + include/seastar/core/metrics_types.hh + include/seastar/core/pipe.hh + include/seastar/core/posix.hh + include/seastar/core/preempt.hh + include/seastar/core/prefetch.hh + include/seastar/core/print.hh + include/seastar/core/prometheus.hh + include/seastar/core/queue.hh + include/seastar/core/ragel.hh + include/seastar/core/reactor.hh + include/seastar/core/report_exception.hh + include/seastar/core/resource.hh + include/seastar/core/rwlock.hh + include/seastar/core/scattered_message.hh + include/seastar/core/scheduling.hh + include/seastar/core/scollectd.hh + include/seastar/core/scollectd_api.hh + include/seastar/core/seastar.hh + include/seastar/core/semaphore.hh + include/seastar/core/sharded.hh + include/seastar/core/shared_future.hh + include/seastar/core/shared_mutex.hh + include/seastar/core/shared_ptr.hh + include/seastar/core/shared_ptr_debug_helper.hh + include/seastar/core/shared_ptr_incomplete.hh + include/seastar/core/simple-stream.hh + include/seastar/core/slab.hh + include/seastar/core/sleep.hh + include/seastar/core/sstring.hh + include/seastar/core/stall_sampler.hh + include/seastar/core/stream.hh + include/seastar/core/systemwide_memory_barrier.hh + include/seastar/core/task.hh + include/seastar/core/temporary_buffer.hh + include/seastar/core/thread.hh + include/seastar/core/thread_cputime_clock.hh + include/seastar/core/thread_impl.hh + include/seastar/core/timed_out_error.hh + include/seastar/core/timer-set.hh + include/seastar/core/timer.hh + include/seastar/core/transfer.hh + include/seastar/core/unaligned.hh + include/seastar/core/units.hh + include/seastar/core/vector-data-sink.hh + include/seastar/core/weak_ptr.hh + include/seastar/core/when_all.hh + include/seastar/core/with_scheduling_group.hh + include/seastar/core/with_timeout.hh + include/seastar/http/api_docs.hh + include/seastar/http/common.hh + include/seastar/http/exception.hh + include/seastar/http/file_handler.hh + include/seastar/http/function_handlers.hh + include/seastar/http/handlers.hh + include/seastar/http/httpd.hh + include/seastar/http/json_path.hh + include/seastar/http/matcher.hh + include/seastar/http/matchrules.hh + include/seastar/http/mime_types.hh + include/seastar/http/reply.hh + include/seastar/http/request.hh + include/seastar/http/routes.hh + include/seastar/http/short_streams.hh + include/seastar/http/transformers.hh + include/seastar/http/client.hh + include/seastar/json/formatter.hh + include/seastar/json/json_elements.hh + include/seastar/net/api.hh + include/seastar/net/arp.hh + include/seastar/net/byteorder.hh + include/seastar/net/config.hh + include/seastar/net/const.hh + include/seastar/net/dhcp.hh + include/seastar/net/dns.hh + include/seastar/net/dpdk.hh + include/seastar/net/ethernet.hh + include/seastar/net/inet_address.hh + include/seastar/net/ip.hh + include/seastar/net/ip_checksum.hh + include/seastar/net/native-stack.hh + include/seastar/net/net.hh + include/seastar/net/packet-data-source.hh + include/seastar/net/packet-util.hh + include/seastar/net/packet.hh + include/seastar/net/posix-stack.hh + include/seastar/net/proxy.hh + include/seastar/net/socket_defs.hh + include/seastar/net/stack.hh + include/seastar/net/tcp-stack.hh + include/seastar/net/tcp.hh + include/seastar/net/tls.hh + include/seastar/net/toeplitz.hh + include/seastar/net/udp.hh + include/seastar/net/unix_address.hh + include/seastar/net/virtio-interface.hh + include/seastar/net/virtio.hh + include/seastar/rpc/lz4_compressor.hh + include/seastar/rpc/lz4_fragmented_compressor.hh + include/seastar/rpc/multi_algo_compressor_factory.hh + include/seastar/rpc/rpc.hh + include/seastar/rpc/rpc_impl.hh + include/seastar/rpc/rpc_types.hh + include/seastar/util/alloc_failure_injector.hh + include/seastar/util/backtrace.hh + include/seastar/util/concepts.hh + include/seastar/util/bool_class.hh + include/seastar/util/conversions.hh + include/seastar/util/defer.hh + include/seastar/util/eclipse.hh + include/seastar/util/function_input_iterator.hh + include/seastar/util/gcc6-concepts.hh + include/seastar/util/indirect.hh + include/seastar/util/is_smart_ptr.hh + include/seastar/util/lazy.hh + include/seastar/util/log-cli.hh + include/seastar/util/log-impl.hh + include/seastar/util/log.hh + include/seastar/util/noncopyable_function.hh + include/seastar/util/optimized_optional.hh + include/seastar/util/print_safe.hh + include/seastar/util/process.hh + include/seastar/util/program-options.hh + include/seastar/util/read_first_line.hh + include/seastar/util/reference_wrapper.hh + include/seastar/util/spinlock.hh + include/seastar/util/std-compat.hh + include/seastar/util/transform_iterator.hh + include/seastar/util/tuple_utils.hh + include/seastar/util/variant_utils.hh + include/seastar/util/closeable.hh + include/seastar/util/source_location-compat.hh + include/seastar/util/short_streams.hh + include/seastar/websocket/server.hh + src/core/alien.cc + src/core/file.cc + src/core/fair_queue.cc + src/core/reactor_backend.cc + src/core/thread_pool.cc + src/core/app-template.cc + src/core/dpdk_rte.cc + src/core/exception_hacks.cc + src/core/execution_stage.cc + src/core/file-impl.hh + src/core/fsnotify.cc + src/core/fsqual.cc + src/core/fstream.cc + src/core/future.cc + src/core/future-util.cc + src/core/linux-aio.cc + src/core/memory.cc + src/core/metrics.cc + src/core/on_internal_error.cc + src/core/posix.cc + src/core/prometheus.cc + src/core/program_options.cc + src/core/reactor.cc + src/core/resource.cc + src/core/sharded.cc + src/core/scollectd.cc + src/core/scollectd-impl.hh + src/core/systemwide_memory_barrier.cc + src/core/smp.cc + src/core/sstring.cc + src/core/thread.cc + src/core/uname.cc + src/core/vla.hh + src/core/io_queue.cc + src/core/semaphore.cc + src/core/condition-variable.cc + src/http/api_docs.cc + src/http/common.cc + src/http/file_handler.cc + src/http/httpd.cc + src/http/json_path.cc + src/http/matcher.cc + src/http/mime_types.cc + src/http/reply.cc + src/http/routes.cc + src/http/transformers.cc + src/http/url.cc + src/http/client.cc + src/http/request.cc + src/json/formatter.cc + src/json/json_elements.cc + src/net/arp.cc + src/net/config.cc + src/net/dhcp.cc + src/net/dns.cc + src/net/dpdk.cc + src/net/ethernet.cc + src/net/inet_address.cc + src/net/ip.cc + src/net/ip_checksum.cc + src/net/native-stack-impl.hh + src/net/native-stack.cc + src/net/net.cc + src/net/packet.cc + src/net/posix-stack.cc + src/net/proxy.cc + src/net/socket_address.cc + src/net/stack.cc + src/net/tcp.cc + src/net/tls.cc + src/net/udp.cc + src/net/unix_address.cc + src/net/virtio.cc + src/rpc/lz4_compressor.cc + src/rpc/lz4_fragmented_compressor.cc + src/rpc/rpc.cc + src/util/alloc_failure_injector.cc + src/util/backtrace.cc + src/util/conversions.cc + src/util/exceptions.cc + src/util/file.cc + src/util/log.cc + src/util/process.cc + src/util/program-options.cc + src/util/read_first_line.cc + src/util/tmp_file.cc + src/util/short_streams.cc + src/websocket/server.cc + ) + +add_library (Seastar::seastar ALIAS seastar) + +add_dependencies (seastar + seastar_http_chunk_parsers + seastar_http_request_parser + seastar_http_response_parser) + +target_include_directories (seastar + PUBLIC + $ + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src) + +set (Seastar_PRIVATE_CXX_FLAGS + -fvisibility=hidden + -UNDEBUG + -Wall + -Werror + -Wno-array-bounds # Disabled because of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93437 + -Wno-error=deprecated-declarations) + +if (Seastar_COMPRESS_DEBUG) + # -gz doesn't imply -g, so it is safe to add it regardless of debug + # info being enabled. + list (APPEND Seastar_PRIVATE_CXX_FLAGS -gz) +endif() + +target_link_libraries (seastar + PUBLIC + Boost::boost + Boost::program_options + Boost::thread + c-ares::cares + cryptopp::cryptopp + fmt::fmt + lz4::lz4 + SourceLocation::source_location + PRIVATE + ${CMAKE_DL_LIBS} + GnuTLS::gnutls + StdAtomic::atomic + lksctp-tools::lksctp-tools + rt::rt + yaml-cpp::yaml-cpp + "$" + Threads::Threads) + +set (Seastar_SANITIZE_MODES "Debug" "Sanitize") +if ((Seastar_SANITIZE STREQUAL "ON") OR + ((Seastar_SANITIZE STREQUAL "DEFAULT") AND + (CMAKE_BUILD_TYPE IN_LIST Seastar_SANITIZE_MODES))) + if (NOT Sanitizers_FOUND) + message (FATAL_ERROR "Sanitizers not found!") + endif () + set (Seastar_Sanitizers_OPTIONS ${Sanitizers_COMPILER_OPTIONS}) + target_link_libraries (seastar + PUBLIC + Sanitizers::address + Sanitizers::undefined_behavior) +endif () + +# We only need valgrind to find uninitialized memory uses, so disable +# the leak sanitizer. +# To test with valgrind run "ctest -T memcheck" +set( MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1 --leak-check=no --trace-children=yes" ) +include (CTest) + +# +# We want asserts enabled on all modes, but cmake defaults to passing +# -DNDEBUG in some modes. We add -UNDEBUG to our private options to +# reenable it. To force asserts off pass -DNDEBUG in +# Seastar_CXX_FLAGS. +# +# To disable -Werror, pass -Wno-error to Seastar_CXX_FLAGS. +# +# We disable _FORTIFY_SOURCE because it generates false positives with longjmp() (src/core/thread.cc) +# + +target_compile_options (seastar + PUBLIC + -U_FORTIFY_SOURCE) + +target_compile_definitions(seastar + PUBLIC + SEASTAR_API_LEVEL=${Seastar_API_LEVEL}) + +target_compile_features(seastar + PUBLIC + cxx_std_${CMAKE_CXX_STANDARD}) + +function (seastar_supports_flag flag var) + set (CMAKE_REQUIRED_FLAGS "${flag}") + check_cxx_source_compiles ("int main() { return 0; }" tmp_${var}) + set (${var} ${tmp_${var}} PARENT_SCOPE) +endfunction () + +seastar_supports_flag ("-Wno-maybe-uninitialized -Werror" MaybeUninitialized_FOUND) +if (MaybeUninitialized_FOUND) + target_compile_options (seastar + PUBLIC + # With std::experimental::optional it is easy to hit + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88897. We disable + # -Wmaybe-uninitialized in here since otherwise we would have to + # disable it on many types used inside optional<>. + -Wno-maybe-uninitialized) +endif () + +if (Seastar_SSTRING) + target_compile_options (seastar PUBLIC -DSEASTAR_SSTRING) +endif () + +if (LinuxMembarrier_FOUND) + list (APPEND Seastar_PRIVATE_COMPILE_DEFINITIONS SEASTAR_HAS_MEMBARRIER) + + target_link_libraries (seastar + PRIVATE LinuxMembarrier::membarrier) +endif () + +set (Seastar_ALLOC_FAILURE_INJECTION_MODES "Dev") +if ((Seastar_ALLOC_FAILURE_INJECTION IN_LIST True_STRING_VALUES) OR + ((Seastar_ALLOC_FAILURE_INJECTION STREQUAL "DEFAULT") AND + (CMAKE_BUILD_TYPE IN_LIST Seastar_ALLOC_FAILURE_INJECTION_MODES))) + target_compile_definitions (seastar + PUBLIC SEASTAR_ENABLE_ALLOC_FAILURE_INJECTION) +endif () + +if (Seastar_TASK_BACKTRACE) + target_compile_definitions (seastar + PUBLIC SEASTAR_TASK_BACKTRACE) +endif () + +if (Seastar_DEBUG_ALLOCATIONS) + target_compile_definitions (seastar + PRIVATE SEASTAR_DEBUG_ALLOCATIONS) +endif () + +if (Sanitizers_FIBER_SUPPORT) + list (APPEND Seastar_PRIVATE_COMPILE_DEFINITIONS SEASTAR_HAVE_ASAN_FIBER_SUPPORT) +endif () + +if (Seastar_ALLOC_PAGE_SIZE) + target_compile_definitions (seastar + PUBLIC SEASTAR_OVERRIDE_ALLOCATOR_PAGE_SIZE=${Seastar_ALLOC_PAGE_SIZE}) +endif () + +target_compile_definitions (seastar + PUBLIC SEASTAR_SCHEDULING_GROUPS_COUNT=${Seastar_SCHEDULING_GROUPS_COUNT}) + +if (Seastar_CXX_FLAGS) + list (APPEND Seastar_PRIVATE_CXX_FLAGS ${Seastar_CXX_FLAGS}) +endif () + +# When using split dwarf --gdb-index is effectively required since +# otherwise gdb is just too slow. We also want to use split dwarf in +# as many compilation units as possible. So while these flags don't +# have to be public, we don't expect anyone to want to build seastar +# with them and some client code without. +if (Seastar_SPLIT_DWARF AND (NOT (CMAKE_BUILD_TYPE STREQUAL "Dev"))) + set (Seastar_SPLIT_DWARF_FLAG "-Wl,--gdb-index") + target_link_libraries (seastar PUBLIC ${Seastar_SPLIT_DWARF_FLAG}) + target_compile_options (seastar PUBLIC "-gsplit-dwarf") +endif () + +if (Seastar_HEAP_PROFILING) + set_property ( + SOURCE "src/core/memory.cc" + PROPERTY + COMPILE_DEFINITIONS SEASTAR_HEAPPROF) + set_property ( + SOURCE "src/core/reactor.cc" + PROPERTY + COMPILE_DEFINITIONS SEASTAR_HEAPPROF) +endif () + +if (Seastar_DEFERRED_ACTION_REQUIRE_NOEXCEPT) + list (APPEND Seastar_PRIVATE_COMPILE_DEFINITIONS SEASTAR_DEFERRED_ACTION_REQUIRE_NOEXCEPT) +endif () + +if (Seastar_DPDK) + # + # The DPDK architecture needs to be transitively applied to consumers of Seastar as well. + # + + set (Seastar_ARCH_FOR_native "native") + set (Seastar_ARCH_FOR_nhm "nehalem") + set (Seastar_ARCH_FOR_wsm "westmere") + set (Seastar_ARCH_FOR_snb "sandybridge") + set (Seastar_ARCH_FOR_ivb "ivybridge") + set (Seastar_ARCH_FOR_armv8a "armv8-a") + set (Seastar_ARCH ${Seastar_ARCH_FOR_${Seastar_DPDK_MACHINE}}) + + if (NOT Seastar_ARCH) + message (FATAL_ERROR "Unrecognized DPDK machine identifier: ${Seastar_DPDK_MACHINE}") + endif () + + target_compile_options (seastar + PUBLIC -march=${Seastar_ARCH}) + + target_compile_definitions (seastar + PUBLIC SEASTAR_HAVE_DPDK) + + # No pmd driver code will be pulled in without "--whole-archive". To + # avoid exposing that to seastar users, combine dpdk into a single + # .o file. + add_custom_command ( + OUTPUT seastar-dpdk.o + COMMAND ld -r -o seastar-dpdk.o --whole-archive ${dpdk_LIBRARIES} --no-whole-archive + ) + + # This just provides the include path to cmake + target_link_libraries (seastar + PUBLIC dpdk::dpdk) +endif () + +if (Seastar_HWLOC) + list (APPEND Seastar_PRIVATE_COMPILE_DEFINITIONS SEASTAR_HAVE_HWLOC) + + target_link_libraries (seastar + PRIVATE hwloc::hwloc) +endif () + +set_option_if_package_is_found (Seastar_IO_URING LibUring) +if (Seastar_IO_URING) + list (APPEND Seastar_PRIVATE_COMPILE_DEFINITIONS SEASTAR_HAVE_URING) + target_link_libraries (seastar + PRIVATE URING::uring) +endif () + +if (Seastar_LD_FLAGS) + target_link_options (seastar + PRIVATE ${Seastar_LD_FLAGS}) +endif () + +if (Seastar_NUMA) + list (APPEND Seastar_PRIVATE_COMPILE_DEFINITIONS SEASTAR_HAVE_NUMA) + + target_link_libraries (seastar + PRIVATE numactl::numactl) +endif () + +if (lz4_HAVE_COMPRESS_DEFAULT) + list (APPEND Seastar_PRIVATE_COMPILE_DEFINITIONS SEASTAR_HAVE_LZ4_COMPRESS_DEFAULT) +endif () + +seastar_supports_flag ("-Werror=unused-result" ErrorUnused_FOUND) +if (ErrorUnused_FOUND) + if (Seastar_UNUSED_RESULT_ERROR) + target_compile_options (seastar + PUBLIC -Werror=unused-result) + else() + target_compile_options (seastar + PUBLIC -Wno-error=unused-result) + endif () +endif () + +seastar_supports_flag ("-Wno-error=#warnings" ErrorWarnings_FOUND) +if (ErrorWarnings_FOUND) + target_compile_options (seastar + PUBLIC "-Wno-error=#warnings") +endif () + +if ((CMAKE_BUILD_TYPE STREQUAL "Debug") OR (CMAKE_BUILD_TYPE STREQUAL "Sanitize")) + target_compile_definitions (seastar + PUBLIC + SEASTAR_DEBUG + SEASTAR_DEFAULT_ALLOCATOR + SEASTAR_SHUFFLE_TASK_QUEUE) +endif () + +set (Seastar_DEBUG_SHARED_PTR_MODES "Debug" "Sanitize") +if (Seastar_DEBUG_SHARED_PTR IN_LIST True_STRING_VALUES OR + ((Seastar_DEBUG_SHARED_PTR IN_LIST Default_STRING_VALUES) AND + (CMAKE_BUILD_TYPE IN_LIST Seastar_DEBUG_SHARED_PTR_MODES))) + target_compile_definitions (seastar + PUBLIC + SEASTAR_DEBUG_SHARED_PTR) +endif () + +set (Seastar_STACK_GUARD_MODES "Debug" "Sanitize" "Dev") +if ((Seastar_STACK_GUARDS STREQUAL "ON") OR + ((Seastar_STACK_GUARDS STREQUAL "DEFAULT") AND + (CMAKE_BUILD_TYPE IN_LIST Seastar_STACK_GUARD_MODES))) + # check for -fstack-clash-protection together with -Werror, because + # otherwise clang can soft-fail (return 0 but emit a warning) instead. + seastar_supports_flag ("-fstack-clash-protection -Werror" StackClashProtection_FOUND) + if (StackClashProtection_FOUND) + target_compile_options (seastar + PUBLIC + -fstack-clash-protection) + endif () + target_compile_definitions (seastar + PRIVATE + SEASTAR_THREAD_STACK_GUARDS) +endif () + +if ((CMAKE_BUILD_TYPE STREQUAL "Dev") OR (CMAKE_BUILD_TYPE STREQUAL "Debug")) + target_compile_definitions (seastar + PUBLIC + SEASTAR_TYPE_ERASE_MORE) +endif () + +target_compile_definitions (seastar + PRIVATE ${Seastar_PRIVATE_COMPILE_DEFINITIONS}) + +target_compile_options (seastar + PRIVATE ${Seastar_PRIVATE_CXX_FLAGS}) + +set_target_properties (seastar + PROPERTIES + CXX_STANDARD ${CMAKE_CXX_STANDARD} + CXX_EXTENSIONS ON) + +add_library (seastar_private INTERFACE) + +target_compile_definitions (seastar_private + INTERFACE ${Seastar_PRIVATE_COMPILE_DEFINITIONS}) + +target_compile_options (seastar_private + INTERFACE ${Seastar_PRIVATE_CXX_FLAGS}) + +target_link_libraries (seastar_private + INTERFACE seastar) + +# +# The testing library. +# + +if (Seastar_INSTALL OR Seastar_TESTING) + add_library (seastar_testing + include/seastar/testing/entry_point.hh + include/seastar/testing/exchanger.hh + include/seastar/testing/random.hh + include/seastar/testing/seastar_test.hh + include/seastar/testing/test_case.hh + include/seastar/testing/test_runner.hh + include/seastar/testing/thread_test_case.hh + src/testing/entry_point.cc + src/testing/random.cc + src/testing/seastar_test.cc + src/testing/test_runner.cc) + + add_library (Seastar::seastar_testing ALIAS seastar_testing) + + target_compile_definitions (seastar_testing + PUBLIC BOOST_TEST_DYN_LINK + PRIVATE ${Seastar_PRIVATE_COMPILE_DEFINITIONS}) + + target_compile_options (seastar_testing + PRIVATE ${Seastar_PRIVATE_CXX_FLAGS}) + + target_link_libraries (seastar_testing + PUBLIC + Boost::unit_test_framework + seastar) + + add_library(seastar_perf_testing + src/testing/random.cc + include/seastar/testing/perf_tests.hh + tests/perf/perf_tests.cc + tests/perf/linux_perf_event.cc) + add_library (Seastar::seastar_perf_testing ALIAS seastar_perf_testing) + target_compile_definitions (seastar_perf_testing + PRIVATE ${Seastar_PRIVATE_COMPILE_DEFINITIONS}) + target_compile_options (seastar_perf_testing + PRIVATE ${Seastar_PRIVATE_CXX_FLAGS}) + target_link_libraries (seastar_perf_testing + PUBLIC + seastar) + +endif () + +# +# The tests themselves. +# + +if (Seastar_TESTING) + enable_testing () + + if (Seastar_EXCLUDE_TESTS_FROM_ALL) + set (exclude EXCLUDE_FROM_ALL) + else () + set (exclude "") + endif () + + add_subdirectory (tests ${exclude}) +endif () + +# +# Demonstrations. +# + +if (Seastar_DEMOS) + if (Seastar_EXCLUDE_DEMOS_FROM_ALL) + set (exclude EXCLUDE_FROM_ALL) + else () + set (exclude "") + endif () + + add_subdirectory (demos ${exclude}) +endif () + +# +# Documentation. +# + +if (Seastar_DOCS) + add_subdirectory (doc) +endif () + +# +# Applications. +# + +if (Seastar_APPS) + if (Seastar_EXCLUDE_APPS_FROM_ALL) + set (exclude EXCLUDE_FROM_ALL) + else () + set (exclude "") + endif () + + add_subdirectory (apps ${exclude}) +endif () + +# +# Installation and export. +# + +if (Seastar_INSTALL) + # + # pkg-config generation. + # + # Note that unlike the CMake "config module", this description is not relocatable because + # some dependencies do not natively support pkg-config. + # + + # Necessary here for pkg-config. + include (GNUInstallDirs) + + # Set paths in pkg-config files for installation. + set (Seastar_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX}) + set (Seastar_PKG_CONFIG_LIBDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) + set (Seastar_PKG_CONFIG_SEASTAR_INCLUDE_FLAGS "-I${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") + + configure_file ( + ${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/seastar.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar-install.pc.in + @ONLY) + + configure_file ( + ${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/seastar-testing.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar-testing-install.pc.in + @ONLY) + + # Set paths in pkg-config files for direct use in the build directory. + set (Seastar_PKG_CONFIG_PREFIX ${CMAKE_CURRENT_BINARY_DIR}) + set (Seastar_PKG_CONFIG_LIBDIR ${CMAKE_CURRENT_BINARY_DIR}) + set (Seastar_PKG_CONFIG_SEASTAR_INCLUDE_FLAGS "-I${CMAKE_CURRENT_SOURCE_DIR}/include -I${CMAKE_CURRENT_BINARY_DIR}/gen/include") + + configure_file ( + ${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/seastar.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar.pc.in + @ONLY) + + configure_file ( + ${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/seastar-testing.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar-testing.pc.in + @ONLY) + + file (GENERATE + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/seastar.pc + INPUT ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar.pc.in) + + file (GENERATE + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/seastar-testing.pc + INPUT ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar-testing.pc.in) + + file (GENERATE + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/seastar-install.pc + INPUT ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar-install.pc.in) + + file (GENERATE + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/seastar-testing-install.pc + INPUT ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/seastar-testing-install.pc.in) + + include (CMakePackageConfigHelpers) + set (install_cmakedir ${CMAKE_INSTALL_LIBDIR}/cmake/Seastar) + + install ( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + install ( + DIRECTORY ${Seastar_GEN_BINARY_DIR}/include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + install ( + PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/seastar-json2code.py + DESTINATION ${CMAKE_INSTALL_BINDIR}) + + install ( + TARGETS + seastar + seastar_testing + seastar_perf_testing + EXPORT seastar-export + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + install ( + EXPORT seastar-export + FILE SeastarTargets.cmake + NAMESPACE Seastar:: + DESTINATION ${install_cmakedir}) + + write_basic_package_version_file ( + ${CMAKE_CURRENT_BINARY_DIR}/SeastarConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY ExactVersion) + + configure_package_config_file ( + ${CMAKE_CURRENT_LIST_DIR}/cmake/SeastarConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/SeastarConfig.cmake + INSTALL_DESTINATION ${install_cmakedir}) + + install ( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/SeastarConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/SeastarConfigVersion.cmake + DESTINATION ${install_cmakedir}) + + install ( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindGnuTLS.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindLinuxMembarrier.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindSanitizers.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindSourceLocation.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindStdAtomic.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findc-ares.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findcryptopp.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Finddpdk.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findhwloc.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findlksctp-tools.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findlz4.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findnumactl.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findragel.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findrt.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findyaml-cpp.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/SeastarDependencies.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindLibUring.cmake + DESTINATION ${install_cmakedir}) + + install ( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake/code_tests + DESTINATION ${install_cmakedir}) + + install ( + FILES ${CMAKE_CURRENT_BINARY_DIR}/seastar-install.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + RENAME seastar.pc) + + install ( + FILES ${CMAKE_CURRENT_BINARY_DIR}/seastar-testing-install.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + RENAME seastar-testing.pc) + + # + # Export targets from the build tree for the user package registry. + # + + export ( + EXPORT seastar-export + FILE ${CMAKE_CURRENT_BINARY_DIR}/SeastarTargets.cmake + NAMESPACE Seastar::) + + export (PACKAGE Seastar) + + # + # Packaging. + # + + set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) + set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) + set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) + + include (CPack) +endif () -- cgit v1.2.3