From 145f0702e57ec6740d516b3fa3131b5555ce0128 Mon Sep 17 00:00:00 2001 From: Aleksei Levushkin Date: Fri, 27 Dec 2019 16:33:08 +0300 Subject: [PATCH 01/32] added grpc as submodule --- .gitmodules | 3 +++ contrib/CMakeLists.txt | 2 ++ contrib/grpc | 1 + 3 files changed, 6 insertions(+) create mode 160000 contrib/grpc diff --git a/.gitmodules b/.gitmodules index 0b80743cadb..97c2b27c364 100644 --- a/.gitmodules +++ b/.gitmodules @@ -106,3 +106,6 @@ [submodule "contrib/sparsehash-c11"] path = contrib/sparsehash-c11 url = https://github.com/sparsehash/sparsehash-c11.git +[submodule "contrib/grpc"] + path = contrib/grpc + url = https://github.com/grpc/grpc.git diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index b0a271b21ac..e434bdb3c07 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -332,6 +332,8 @@ if (USE_FASTOPS) add_subdirectory (fastops-cmake) endif() +add_subdirectory(grpc-cmake) + #if (USE_INTERNAL_ORC_LIBRARY) # add_subdirectory(orc-cmake) #endif () diff --git a/contrib/grpc b/contrib/grpc new file mode 160000 index 00000000000..c1d176528fd --- /dev/null +++ b/contrib/grpc @@ -0,0 +1 @@ +Subproject commit c1d176528fd8da9dd4066d16554bcd216d29033f From bbd368cdac18742e32830d16c72cc199d841180d Mon Sep 17 00:00:00 2001 From: Aleksei Levushkin Date: Fri, 27 Dec 2019 16:33:42 +0300 Subject: [PATCH 02/32] added grpc-cmake --- contrib/grpc-cmake/CMakeLists.txt | 1482 +++++++++++++++++++++++++++++ 1 file changed, 1482 insertions(+) create mode 100644 contrib/grpc-cmake/CMakeLists.txt diff --git a/contrib/grpc-cmake/CMakeLists.txt b/contrib/grpc-cmake/CMakeLists.txt new file mode 100644 index 00000000000..85f3e6c6737 --- /dev/null +++ b/contrib/grpc-cmake/CMakeLists.txt @@ -0,0 +1,1482 @@ +cmake_minimum_required(VERSION 3.5.1) + +set(GRPC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../grpc) +set(GRPC_INCLUDE_DIR ${GRPC_SOURCE_DIR}/include/) + +if(UNIX) + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set(_gRPC_PLATFORM_LINUX ON) + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(_gRPC_PLATFORM_MAC ON) + else() + set(_gRPC_PLATFORM_POSIX ON) + endif() +endif() + +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_gRPC_C_CXX_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_gRPC_C_CXX_FLAGS}") + +set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf") + +if(gRPC_BACKWARDS_COMPATIBILITY_MODE) + add_definitions(-DGPR_BACKWARDS_COMPATIBILITY_MODE) + if (_gRPC_PLATFORM_MAC) + # some C++11 constructs not supported before OS X 10.9 + set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) + endif() +endif() + +if (_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC) + set(_gRPC_CORE_NOSTDCXX_FLAGS -fno-exceptions -fno-rtti) +else() + set(_gRPC_CORE_NOSTDCXX_FLAGS "") +endif() + +# address_sorting.cmake +include(${GRPC_SOURCE_DIR}/cmake/address_sorting.cmake) +set(_gRPC_ADDRESS_SORTING_INCLUDE_DIR "${GRPC_SOURCE_DIR}/third_party/address_sorting/include") +set(_gRPC_ADDRESS_SORTING_LIBRARIES address_sorting) + +# cares.cmake +set(CARES_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/cares/cares) +set(CARES_SHARED OFF CACHE BOOL "disable shared library") +set(CARES_STATIC ON CACHE BOOL "link cares statically") +if(gRPC_BACKWARDS_COMPATIBILITY_MODE) + # See https://github.com/grpc/grpc/issues/17255 + set(HAVE_LIBNSL OFF CACHE BOOL "avoid cares dependency on libnsl") +endif() +add_subdirectory(${CARES_ROOT_DIR} ${CARES_ROOT_DIR}) +if(TARGET c-ares) + set(_gRPC_CARES_LIBRARIES c-ares) +endif() + +# protobuf.cmake +set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../protobuf) +if(NOT protobuf_BUILD_TESTS) + set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests") +endif() +if(NOT protobuf_WITH_ZLIB) + set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.") +endif() +set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "Link static runtime libraries") +if(NOT USE_INTERNAL_PROTOBUF_LIBRARY) + add_subdirectory(${PROTOBUF_ROOT_DIR}/cmake ${GRPC_SOURCE_DIR}/third_party/protobuf) +endif() +if(TARGET ${_gRPC_PROTOBUF_LIBRARY_NAME}) + set(_gRPC_PROTOBUF_LIBRARIES ${_gRPC_PROTOBUF_LIBRARY_NAME}) +endif() +if(TARGET libprotoc) + set(_gRPC_PROTOBUF_PROTOC_LIBRARIES libprotoc) +endif() +if(TARGET protoc) + set(_gRPC_PROTOBUF_PROTOC protoc) + set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $) +endif() +# For well-known .proto files distributed with protobuf +set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}/src") +if(gRPC_INSTALL) + message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_PROTOBUF_PROVIDER is \"module\"") + set(gRPC_INSTALL FALSE) +endif() + +# ssl.cmake +set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../ssl) +if(TARGET ssl) + set(_gRPC_SSL_LIBRARIES ssl) + set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/include) +endif() + +# upb.cmake +set(UPB_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/upb) +set(_gRPC_UPB_INCLUDE_DIR "${UPB_ROOT_DIR}") +set(_gRPC_UPB_GRPC_GENERATED_DIR "${GRPC_SOURCE_DIR}/src/core/ext/upb-generated") +set(_gRPC_UPB_LIBRARIES upb) + +# zlib.cmake +set(ZLIB_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/zlib) +include_directories("${ZLIB_ROOT_DIR}") +add_subdirectory(${ZLIB_ROOT_DIR} ${ZLIB_ROOT_DIR}) +set(_gRPC_ZLIB_LIBRARIES zlibstatic) +set(_gRPC_ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}") + + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +if(_gRPC_PLATFORM_MAC) + set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} m pthread) +elseif(UNIX) + set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} rt m pthread) +endif() + +add_library(address_sorting + ${GRPC_SOURCE_DIR}/third_party/address_sorting/address_sorting.c + ${GRPC_SOURCE_DIR}/third_party/address_sorting/address_sorting_posix.c + ${GRPC_SOURCE_DIR}/third_party/address_sorting/address_sorting_windows.c +) + +target_include_directories(address_sorting + PUBLIC $ $ + PRIVATE ${GRPC_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} +) +target_link_libraries(address_sorting + ${_gRPC_BASELIB_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} +) + +add_library(gpr + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/alloc.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/atm.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/cpu_iphone.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/cpu_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/cpu_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/cpu_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/env_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/env_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/env_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/log.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/log_android.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/log_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/log_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/log_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/murmur_hash.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/string_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/string_util_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/string_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/sync.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/sync_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/sync_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/time.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/time_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/time_precise.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/time_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/tls_pthread.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/tmpfile_msys.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/tmpfile_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/tmpfile_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gpr/wrap_memcpy.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gprpp/arena.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gprpp/fork.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gprpp/global_config_env.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gprpp/host_port.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gprpp/mpscq.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gprpp/thd_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/gprpp/thd_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/profiling/basic_timers.cc + ${GRPC_SOURCE_DIR}/src/core/lib/profiling/stap_timers.cc +) + +target_include_directories(gpr + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${GRPC_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} +) +target_link_libraries(gpr + ${_gRPC_ALLTARGETS_LIBRARIES} +) + +add_library(grpc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/init.cc + ${GRPC_SOURCE_DIR}/src/core/lib/avl/avl.cc + ${GRPC_SOURCE_DIR}/src/core/lib/backoff/backoff.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_args.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack_builder.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_trace.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz_registry.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/connected_channel.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker_registry.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/status_util.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_args.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_internal.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/message_compress.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_gzip.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_identity.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/stats.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/stats_data.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/format_request.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/httpcli.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/parser.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/buffer_list.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/call_combiner.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/cfstream_handle.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/combiner.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epoll1_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epollex_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_poll_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/exec_ctx.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/mpmcqueue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/threadpool.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_fallback.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_host_name_max.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_sysconf.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/internal_errqueue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iocp_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_internal.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/is_epollexclusive_available.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/load_file.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/lockfree_event.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/polling_entity.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resource_quota.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/sockaddr_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_factory_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_mutator.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_common_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_common.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/time_averaged_stats.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_generic.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_heap.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_manager.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/udp_server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix_noop.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_eventfd.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_nospecial.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_pipe.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_reader.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_writer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/b64.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/percent_encoding.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_buffer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_intern.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_string_helpers.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/api_trace.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer_reader.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call_details.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call_log_batch.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_init.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_ping.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_stack_type.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue_factory.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/event_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/lame_client.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/metadata_array.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/validate_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/version.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/bdp_estimator.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/byte_stream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/connectivity_state.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/error_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata_batch.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/pid_controller.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/static_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/status_conversion.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/status_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/timeout_encoding.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/transport.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/transport_op_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/uri/uri_parser.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/trace.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_decoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_encoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_transport.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/context_list.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/flow_control.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_data.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_goaway.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_ping.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_settings.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_window_update.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_encoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_parser.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_table.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/http2_settings.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/huffsyms.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/incoming_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/parsing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_lists.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_map.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/varint.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/writing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/alpn/alpn.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/client/http_client_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/http_filters_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/message_compress/message_compress_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/server/http_server_filter.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/httpcli_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/context/security_context.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/alts_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/composite/composite_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/credentials_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/fake/fake_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/google_default/credentials_generic.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/google_default/google_default_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/iam/iam_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/json_token.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/jwt_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/jwt_verifier.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/local/local_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/plugin/plugin_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/ssl/ssl_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/tls/spiffe_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/alts/alts_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/fake/fake_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/load_system_roots_fallback.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/load_system_roots_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/local/local_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl_utils_config.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/client_auth_filter.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/secure_endpoint.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/security_handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/server_auth_filter.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/target_authority_table.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/tsi_error.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/util/json_util.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/init_secure.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/crypt/aes_gcm.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/crypt/gsec.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_counter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_crypter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_frame_protector.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/frame_handler.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_handshaker_client.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_shared_resource.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_tsi_utils.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/transport_security_common_api.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/decode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/encode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/msg.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/port.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/table.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/upb.c + ${GRPC_SOURCE_DIR}/src/core/tsi/transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/authority.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/chttp2_connector.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backend_metric.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backup_poller.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/channel_connectivity.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_channelz.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_factory.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/connector.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/global_subchannel_pool.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/health/health_check_client.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_connect_handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_proxy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/local_subchannel_pool.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/parse_address.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_result_parsing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolving_lb_policy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/retry_throttle.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/server_address.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/service_config.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel_pool_interface.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/deadline/deadline_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/gogoproto/gogo.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/validate/validate.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/annotations.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/http.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/any.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/duration.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/empty.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/struct.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/rpc/status.upb.c + ${GRPC_SOURCE_DIR}/src/core/tsi/fake_transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/local_transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_cache.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl_transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/transport_security_grpc.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/server/chttp2_server.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/inproc/inproc_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/inproc/inproc_transport.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_api.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_client.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_client_stats.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/type/percent.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/type/range.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/census/grpc_context.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_idle/client_idle_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/max_age/max_age_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/message_size/message_size_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/client_authority_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/workarounds/workaround_utils.cc + ${GRPC_SOURCE_DIR}/src/core/plugin_registry/grpc_plugin_registry.cc +) + +target_compile_options(grpc PUBLIC -fpermissive) + +target_include_directories(grpc + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${GRPC_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} +) +target_link_libraries(grpc + ${_gRPC_BASELIB_LIBRARIES} + ${_gRPC_SSL_LIBRARIES} + ${_gRPC_ZLIB_LIBRARIES} + ${_gRPC_CARES_LIBRARIES} + ${_gRPC_ADDRESS_SORTING_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} + gpr +) +if (_gRPC_PLATFORM_MAC) + target_link_libraries(grpc "-framework CoreFoundation") +endif() + +add_library(grpc_cronet + ${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/plugin_registry/grpc_cronet_plugin_registry.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/init.cc + ${GRPC_SOURCE_DIR}/src/core/lib/avl/avl.cc + ${GRPC_SOURCE_DIR}/src/core/lib/backoff/backoff.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_args.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack_builder.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_trace.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz_registry.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/connected_channel.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker_registry.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/status_util.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_args.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_internal.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/message_compress.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_gzip.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_identity.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/stats.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/stats_data.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/format_request.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/httpcli.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/parser.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/buffer_list.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/call_combiner.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/cfstream_handle.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/combiner.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epoll1_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epollex_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_poll_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/exec_ctx.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/mpmcqueue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/threadpool.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_fallback.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_host_name_max.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_sysconf.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/internal_errqueue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iocp_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_internal.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/is_epollexclusive_available.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/load_file.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/lockfree_event.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/polling_entity.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resource_quota.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/sockaddr_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_factory_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_mutator.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_common_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_common.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/time_averaged_stats.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_generic.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_heap.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_manager.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/udp_server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix_noop.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_eventfd.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_nospecial.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_pipe.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_reader.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_writer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/b64.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/percent_encoding.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_buffer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_intern.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_string_helpers.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/api_trace.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer_reader.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call_details.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call_log_batch.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_init.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_ping.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_stack_type.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue_factory.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/event_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/lame_client.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/metadata_array.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/validate_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/version.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/bdp_estimator.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/byte_stream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/connectivity_state.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/error_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata_batch.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/pid_controller.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/static_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/status_conversion.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/status_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/timeout_encoding.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/transport.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/transport_op_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/uri/uri_parser.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/trace.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/transport/cronet_api_dummy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/transport/cronet_transport.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_decoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_encoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_transport.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/context_list.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/flow_control.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_data.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_goaway.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_ping.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_settings.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_window_update.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_encoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_parser.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_table.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/http2_settings.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/huffsyms.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/incoming_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/parsing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_lists.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_map.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/varint.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/writing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/alpn/alpn.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/client/http_client_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/http_filters_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/message_compress/message_compress_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/server/http_server_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backend_metric.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backup_poller.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/channel_connectivity.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_channelz.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_factory.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/connector.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/global_subchannel_pool.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/health/health_check_client.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_connect_handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_proxy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/local_subchannel_pool.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/parse_address.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_result_parsing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolving_lb_policy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/retry_throttle.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/server_address.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/service_config.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel_pool_interface.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/deadline/deadline_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/decode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/encode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/msg.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/port.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/table.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/gogoproto/gogo.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/validate/validate.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/annotations.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/http.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/any.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/duration.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/empty.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/struct.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/rpc/status.upb.c + ${GRPC_SOURCE_DIR}/src/core/lib/http/httpcli_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/context/security_context.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/alts_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/composite/composite_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/credentials_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/fake/fake_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/google_default/credentials_generic.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/google_default/google_default_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/iam/iam_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/json_token.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/jwt_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/jwt_verifier.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/local/local_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/plugin/plugin_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/ssl/ssl_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/tls/spiffe_credentials.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/alts/alts_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/fake/fake_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/load_system_roots_fallback.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/load_system_roots_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/local/local_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl_utils_config.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/client_auth_filter.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/secure_endpoint.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/security_handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/server_auth_filter.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/target_authority_table.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/transport/tsi_error.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/util/json_util.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/init_secure.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/crypt/aes_gcm.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/crypt/gsec.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_counter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_crypter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_frame_protector.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/frame_handler.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_handshaker_client.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_shared_resource.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc + ${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_tsi_utils.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/transport_security_common_api.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c + ${GRPC_SOURCE_DIR}/src/core/tsi/transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/authority.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/chttp2_connector.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/fake_transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/local_transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_cache.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/ssl_transport_security.cc + ${GRPC_SOURCE_DIR}/src/core/tsi/transport_security_grpc.cc +) + +target_include_directories(grpc_cronet + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${GRPC_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} +) +target_link_libraries(grpc_cronet + ${_gRPC_BASELIB_LIBRARIES} + ${_gRPC_SSL_LIBRARIES} + ${_gRPC_ZLIB_LIBRARIES} + ${_gRPC_CARES_LIBRARIES} + ${_gRPC_ADDRESS_SORTING_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} + gpr +) +if (_gRPC_PLATFORM_MAC) + target_link_libraries(grpc_cronet "-framework CoreFoundation") +endif() + +add_library(grpc_unsecure + ${GRPC_SOURCE_DIR}/src/core/lib/surface/init.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/init_unsecure.cc + ${GRPC_SOURCE_DIR}/src/core/lib/avl/avl.cc + ${GRPC_SOURCE_DIR}/src/core/lib/backoff/backoff.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_args.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack_builder.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_trace.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz_registry.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/connected_channel.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker_registry.cc + ${GRPC_SOURCE_DIR}/src/core/lib/channel/status_util.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_args.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_internal.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/message_compress.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_gzip.cc + ${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_identity.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/stats.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/stats_data.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/format_request.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/httpcli.cc + ${GRPC_SOURCE_DIR}/src/core/lib/http/parser.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/buffer_list.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/call_combiner.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/cfstream_handle.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/combiner.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epoll1_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epollex_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_poll_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/exec_ctx.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/mpmcqueue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/threadpool.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_fallback.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_host_name_max.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_sysconf.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/internal_errqueue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iocp_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_internal.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/is_epollexclusive_available.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/load_file.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/lockfree_event.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/polling_entity.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resource_quota.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/sockaddr_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_factory_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_mutator.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_common_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_linux.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_cfstream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_common.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_windows.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/time_averaged_stats.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_custom.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_generic.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_heap.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_manager.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_uv.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/udp_server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix_noop.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_eventfd.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_nospecial.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_pipe.cc + ${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_posix.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_reader.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/json/json_writer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/b64.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/percent_encoding.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_buffer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_intern.cc + ${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_string_helpers.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/api_trace.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer_reader.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call_details.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/call_log_batch.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_init.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_ping.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_stack_type.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue_factory.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/event_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/lame_client.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/metadata_array.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/server.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/validate_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/surface/version.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/bdp_estimator.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/byte_stream.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/connectivity_state.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/error_utils.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata_batch.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/pid_controller.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/static_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/status_conversion.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/status_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/timeout_encoding.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/transport.cc + ${GRPC_SOURCE_DIR}/src/core/lib/transport/transport_op_string.cc + ${GRPC_SOURCE_DIR}/src/core/lib/uri/uri_parser.cc + ${GRPC_SOURCE_DIR}/src/core/lib/debug/trace.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_decoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_encoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_transport.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/context_list.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/flow_control.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_data.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_goaway.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_ping.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_settings.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_window_update.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_encoder.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_parser.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_table.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/http2_settings.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/huffsyms.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/incoming_metadata.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/parsing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_lists.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_map.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/varint.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/writing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/alpn/alpn.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/client/http_client_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/http_filters_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/message_compress/message_compress_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/server/http_server_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/server/chttp2_server.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/authority.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/chttp2_connector.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backend_metric.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backup_poller.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/channel_connectivity.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_channelz.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_factory.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/connector.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/global_subchannel_pool.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/health/health_check_client.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_connect_handshaker.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_proxy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/local_subchannel_pool.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/parse_address.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_registry.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_result_parsing.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolving_lb_policy.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/retry_throttle.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/server_address.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/service_config.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel_pool_interface.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/deadline/deadline_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/decode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/encode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/msg.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/port.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/table.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/gogoproto/gogo.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/validate/validate.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/annotations.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/http.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/any.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/duration.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/empty.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/struct.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/rpc/status.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/transport/inproc/inproc_plugin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/transport/inproc/inproc_transport.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_api.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_channel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_client.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/xds/xds_client_stats.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/type/percent.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/envoy/type/range.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/census/grpc_context.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/client_idle/client_idle_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/max_age/max_age_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/message_size/message_size_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/http/client_authority_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc + ${GRPC_SOURCE_DIR}/src/core/ext/filters/workarounds/workaround_utils.cc + ${GRPC_SOURCE_DIR}/src/core/plugin_registry/grpc_unsecure_plugin_registry.cc +) + + +target_include_directories(grpc_unsecure + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${GRPC_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} +) +target_link_libraries(grpc_unsecure + ${_gRPC_BASELIB_LIBRARIES} + ${_gRPC_ZLIB_LIBRARIES} + ${_gRPC_CARES_LIBRARIES} + ${_gRPC_ADDRESS_SORTING_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} + gpr +) +if (_gRPC_PLATFORM_MAC) + target_link_libraries(grpc_unsecure "-framework CoreFoundation") +endif() + +add_library(grpc++ + ${GRPC_SOURCE_DIR}/src/cpp/client/insecure_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/secure_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/auth_property_iterator.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/secure_auth_context.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/secure_channel_arguments.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/secure_create_auth_context.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/tls_credentials_options.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/tls_credentials_options_util.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/insecure_server_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/secure_server_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/channel_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/client_context.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/client_interceptor.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/create_channel.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/create_channel_internal.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/create_channel_posix.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/credentials_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/generic_stub.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/alarm.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/channel_arguments.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/channel_filter.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/completion_queue_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/core_codegen.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/resource_quota_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/rpc_method.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/validate_service_config.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/version_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/async_generic_service.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/channel_argument_option.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/create_default_thread_pool.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/dynamic_thread_pool.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/external_connection_acceptor_impl.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/health/default_health_check_service.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/health/health_check_service.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/health/health_check_service_server_builder_option.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_builder.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_context.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_posix.cc + ${GRPC_SOURCE_DIR}/src/cpp/thread_manager/thread_manager.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/byte_buffer_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/status.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/string_ref.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/time_cc.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/decode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/encode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/msg.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/port.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/table.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/upb.c + ${GRPC_SOURCE_DIR}/src/cpp/codegen/codegen_init.cc +) + +target_compile_options(grpc++ PUBLIC -Wno-error=shadow) + +target_include_directories(grpc++ + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${GRPC_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTO_GENS_DIR} +) +target_link_libraries(grpc++ + ${_gRPC_BASELIB_LIBRARIES} + ${_gRPC_SSL_LIBRARIES} + ${_gRPC_PROTOBUF_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} + grpc + gpr +) + +add_library(grpc++_unsecure + ${GRPC_SOURCE_DIR}/src/cpp/client/insecure_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/insecure_create_auth_context.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/insecure_server_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/channel_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/client_context.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/client_interceptor.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/create_channel.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/create_channel_internal.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/create_channel_posix.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/credentials_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/client/generic_stub.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/alarm.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/channel_arguments.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/channel_filter.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/completion_queue_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/core_codegen.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/resource_quota_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/rpc_method.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/validate_service_config.cc + ${GRPC_SOURCE_DIR}/src/cpp/common/version_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/async_generic_service.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/channel_argument_option.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/create_default_thread_pool.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/dynamic_thread_pool.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/external_connection_acceptor_impl.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/health/default_health_check_service.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/health/health_check_service.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/health/health_check_service_server_builder_option.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_builder.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_context.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_credentials.cc + ${GRPC_SOURCE_DIR}/src/cpp/server/server_posix.cc + ${GRPC_SOURCE_DIR}/src/cpp/thread_manager/thread_manager.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/byte_buffer_cc.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/status.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/string_ref.cc + ${GRPC_SOURCE_DIR}/src/cpp/util/time_cc.cc + ${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/decode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/encode.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/msg.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/port.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/table.c + ${GRPC_SOURCE_DIR}/third_party/upb/upb/upb.c + ${GRPC_SOURCE_DIR}/src/cpp/codegen/codegen_init.cc +) + +target_compile_options(grpc++_unsecure PUBLIC -Wno-error=shadow) + +target_include_directories(grpc++_unsecure + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${GRPC_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTO_GENS_DIR} +) +target_link_libraries(grpc++_unsecure + ${_gRPC_BASELIB_LIBRARIES} + ${_gRPC_PROTOBUF_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} + gpr + grpc_unsecure +) + +add_library(grpc_plugin_support + ${GRPC_SOURCE_DIR}/src/compiler/cpp_generator.cc +) + +target_include_directories(grpc_plugin_support + PRIVATE ${GRPC_SOURCE_DIR} + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTO_GENS_DIR} +) +target_link_libraries(grpc_plugin_support + ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} + ${_gRPC_PROTOBUF_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} +) + +add_executable(grpc_cpp_plugin + ${GRPC_SOURCE_DIR}/src/compiler/cpp_plugin.cc +) + +target_include_directories(grpc_cpp_plugin + PRIVATE ${GRPC_SOURCE_DIR} + PUBLIC ${GRPC_INCLUDE_DIR} + PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR} + PRIVATE ${_gRPC_CARES_INCLUDE_DIR} + PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR} + PRIVATE ${_gRPC_SSL_INCLUDE_DIR} + PRIVATE ${_gRPC_UPB_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR} + PRIVATE ${_gRPC_UPB_INCLUDE_DIR} + PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR} + PRIVATE ${_gRPC_PROTO_GENS_DIR} +) + +target_link_libraries(grpc_cpp_plugin + ${_gRPC_PROTOBUF_PROTOC_LIBRARIES} + ${_gRPC_PROTOBUF_LIBRARIES} + ${_gRPC_ALLTARGETS_LIBRARIES} + grpc_plugin_support +) \ No newline at end of file From 13643d825ba3192323d337bbda2f4c71fba759b9 Mon Sep 17 00:00:00 2001 From: Aleksei Levushkin Date: Sun, 29 Dec 2019 14:40:55 +0300 Subject: [PATCH 03/32] added PROTOBUF_GENERATE_GRPC_CPP for generating grpc proto --- CMakeLists.txt | 1 + cmake/find/grpc.cmake | 57 +++++++++++++++++++++++++++++++ contrib/grpc-cmake/CMakeLists.txt | 3 +- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 cmake/find/grpc.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 986096ba9e8..229b83c947d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -323,6 +323,7 @@ endif() include (cmake/find/libxml2.cmake) include (cmake/find/brotli.cmake) include (cmake/find/protobuf.cmake) +include (cmake/find/grpc.cmake) include (cmake/find/pdqsort.cmake) include (cmake/find/hdfs3.cmake) # uses protobuf include (cmake/find/consistent-hashing.cmake) diff --git a/cmake/find/grpc.cmake b/cmake/find/grpc.cmake new file mode 100644 index 00000000000..e19cac5cf5f --- /dev/null +++ b/cmake/find/grpc.cmake @@ -0,0 +1,57 @@ +set(_PROTOBUF_PROTOC $) +set(_GRPC_CPP_PLUGIN_EXECUTABLE $) + +function(PROTOBUF_GENERATE_GRPC_CPP SRCS HDRS) + if(NOT ARGN) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files") + return() + endif() + + if(PROTOBUF_GENERATE_CPP_APPEND_PATH) + foreach(FIL ${ARGN}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(ABS_PATH ${ABS_FIL} PATH) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + else() + set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + if(DEFINED PROTOBUF_IMPORT_DIRS) + foreach(DIR ${Protobuf_IMPORT_DIRS}) + get_filename_component(ABS_PATH ${DIR} ABSOLUTE) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + endif() + + set(${SRCS}) + set(${HDRS}) + foreach(FIL ${ARGN}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(FIL_WE ${FIL} NAME_WE) + + list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.cc") + list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.h") + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.cc" + "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.h" + COMMAND ${_PROTOBUF_PROTOC} + ARGS --grpc_out=${CMAKE_CURRENT_BINARY_DIR} + --plugin=protoc-gen-grpc=${_GRPC_CPP_PLUGIN_EXECUTABLE} + ${_protobuf_include_path} ${ABS_FIL} + DEPENDS ${ABS_FIL} + COMMENT "Running gRPC C++ protocol buffer compiler on ${FIL}" + VERBATIM) + endforeach() + + set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) + set(${SRCS} ${${SRCS}} PARENT_SCOPE) + set(${HDRS} ${${HDRS}} PARENT_SCOPE) +endfunction() diff --git a/contrib/grpc-cmake/CMakeLists.txt b/contrib/grpc-cmake/CMakeLists.txt index 85f3e6c6737..cc1c2b52b51 100644 --- a/contrib/grpc-cmake/CMakeLists.txt +++ b/contrib/grpc-cmake/CMakeLists.txt @@ -1479,4 +1479,5 @@ target_link_libraries(grpc_cpp_plugin ${_gRPC_PROTOBUF_LIBRARIES} ${_gRPC_ALLTARGETS_LIBRARIES} grpc_plugin_support -) \ No newline at end of file +) + From 236f461420c121172783ffa63a369aa527c06582 Mon Sep 17 00:00:00 2001 From: millb Date: Thu, 30 Jan 2020 14:15:43 +0300 Subject: [PATCH 04/32] attempt --- dbms/src/Interpreters/Cluster.cpp | 24 +++++++++++++++++------- dbms/src/Interpreters/Cluster.h | 7 ++++--- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index 71bd89b2b6f..5473c3f7762 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -72,7 +72,8 @@ bool Cluster::Address::isLocal(UInt16 clickhouse_port) const } -Cluster::Address::Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix) +Cluster::Address::Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix, UInt32 shard_number_, UInt32 replica_number_) : + shard_number(shard_number_), replica_number(replica_number_) { host_name = config.getString(config_prefix + ".host"); port = static_cast(config.getInt(config_prefix + ".port")); @@ -137,12 +138,13 @@ std::pair Cluster::Address::fromString(const String & host_port_ String Cluster::Address::toFullString() const { return - escapeForFileName(user) + - (password.empty() ? "" : (':' + escapeForFileName(password))) + '@' + + ((shard_number == 0) ? "" : "shard" + std::to_string(shard_number)) + + ((replica_number == 0) ? "" : "_replica" + std::to_string(replica_number)) + '@' + escapeForFileName(host_name) + ':' + std::to_string(port) + - (default_database.empty() ? "" : ('#' + escapeForFileName(default_database))) - + ((secure == Protocol::Secure::Enable) ? "+secure" : ""); + (default_database.empty() ? "" : ('#' + + escapeForFileName(default_database))) + + ((secure == Protocol::Secure::Enable) ? "+secure" : ""); } Cluster::Address Cluster::Address::fromFullString(const String & full_string) @@ -158,8 +160,14 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) secure = Protocol::Secure::Enable; } + + const char * underscore = strchr(full_string.data(), '_'); + const char * slash = strchr(full_string.data(), '/'); const char * user_pw_end = strchr(full_string.data(), '@'); const char * colon = strchr(full_string.data(), ':'); + const bool has_shard = startsWith(full_string, "shard"); + if (has_shard && !slash) + throw Exception("Incorrect [shard{shard_number}[_replica{replica_number}]]/user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); if (!user_pw_end || !colon) throw Exception("Incorrect user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); @@ -175,9 +183,11 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) address.secure = secure; address.port = parse(host_end + 1, port_end - (host_end + 1)); address.host_name = unescapeForFileName(std::string(user_pw_end + 1, host_end)); - address.user = unescapeForFileName(std::string(address_begin, has_pw ? colon : user_pw_end)); + address.user = unescapeForFileName(std::string(slash + 1, has_pw ? colon : user_pw_end)); address.password = has_pw ? unescapeForFileName(std::string(colon + 1, user_pw_end)) : std::string(); address.default_database = has_db ? unescapeForFileName(std::string(has_db + 1, address_end)) : std::string(); + address.shard_number = has_shard ? parse(address_begin + 5) : 0; + address.replica_number = underscore ? parse(underscore + 8) : 0; return address; } @@ -309,7 +319,7 @@ Cluster::Cluster(const Poco::Util::AbstractConfiguration & config, const Setting if (startsWith(replica_key, "replica")) { - replica_addresses.emplace_back(config, partial_prefix + replica_key); + replica_addresses.emplace_back(config, partial_prefix + replica_key, current_shard_num, current_replica_num); ++current_replica_num; if (!replica_addresses.back().is_local) diff --git a/dbms/src/Interpreters/Cluster.h b/dbms/src/Interpreters/Cluster.h index ef12f9fe78f..3d769bf9c7b 100644 --- a/dbms/src/Interpreters/Cluster.h +++ b/dbms/src/Interpreters/Cluster.h @@ -57,6 +57,8 @@ public: UInt16 port; String user; String password; + UInt32 shard_number{}; + UInt32 replica_number{}; /// This database is selected when no database is specified for Distributed table String default_database; /// The locality is determined at the initialization, and is not changed even if DNS is changed @@ -67,9 +69,8 @@ public: Protocol::Secure secure = Protocol::Secure::Disable; Address() = default; - Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix); + Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix, UInt32 shard_number_ = 0, UInt32 replica_number_ = 0); Address(const String & host_port_, const String & user_, const String & password_, UInt16 clickhouse_port, bool secure_ = false); - /// Returns 'escaped_host_name:port' String toString() const; @@ -80,7 +81,7 @@ public: static std::pair fromString(const String & host_port_string); - /// Retrurns escaped user:password@resolved_host_address:resolved_host_port#default_database + /// Retrurns escaped shard{shard_number}_replica{replica_number}@resolved_host_address:resolved_host_port#default_database String toFullString() const; static Address fromFullString(const String & address_full_string); From 165afabdd247150df6bb9763cf3015a546d16a94 Mon Sep 17 00:00:00 2001 From: millb Date: Fri, 31 Jan 2020 12:22:30 +0300 Subject: [PATCH 05/32] second attempt --- dbms/src/Interpreters/Cluster.cpp | 42 ++----------------- dbms/src/Interpreters/Cluster.h | 5 ++- .../Storages/Distributed/DirectoryMonitor.cpp | 19 ++------- 3 files changed, 10 insertions(+), 56 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index 5473c3f7762..e8b95a4dc47 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -139,53 +139,17 @@ String Cluster::Address::toFullString() const { return ((shard_number == 0) ? "" : "shard" + std::to_string(shard_number)) + - ((replica_number == 0) ? "" : "_replica" + std::to_string(replica_number)) + '@' + - escapeForFileName(host_name) + ':' + - std::to_string(port) + - (default_database.empty() ? "" : ('#' + - escapeForFileName(default_database))) + - ((secure == Protocol::Secure::Enable) ? "+secure" : ""); + ((replica_number == 0) ? "" : "_replica" + std::to_string(replica_number)); } Cluster::Address Cluster::Address::fromFullString(const String & full_string) { const char * address_begin = full_string.data(); - const char * address_end = address_begin + full_string.size(); - Protocol::Secure secure = Protocol::Secure::Disable; - const char * secure_tag = "+secure"; - if (endsWith(full_string, secure_tag)) - { - address_end -= strlen(secure_tag); - secure = Protocol::Secure::Enable; - } - - - const char * underscore = strchr(full_string.data(), '_'); - const char * slash = strchr(full_string.data(), '/'); - const char * user_pw_end = strchr(full_string.data(), '@'); - const char * colon = strchr(full_string.data(), ':'); - const bool has_shard = startsWith(full_string, "shard"); - if (has_shard && !slash) - throw Exception("Incorrect [shard{shard_number}[_replica{replica_number}]]/user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); - if (!user_pw_end || !colon) - throw Exception("Incorrect user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); - - const bool has_pw = colon < user_pw_end; - const char * host_end = has_pw ? strchr(user_pw_end + 1, ':') : colon; - if (!host_end) - throw Exception("Incorrect address '" + full_string + "', it does not contain port", ErrorCodes::SYNTAX_ERROR); - - const char * has_db = strchr(full_string.data(), '#'); - const char * port_end = has_db ? has_db : address_end; + bool has_shard = startsWith("shard", full_string); + bool underscore = strchr(full_string.data(), '_'); Address address; - address.secure = secure; - address.port = parse(host_end + 1, port_end - (host_end + 1)); - address.host_name = unescapeForFileName(std::string(user_pw_end + 1, host_end)); - address.user = unescapeForFileName(std::string(slash + 1, has_pw ? colon : user_pw_end)); - address.password = has_pw ? unescapeForFileName(std::string(colon + 1, user_pw_end)) : std::string(); - address.default_database = has_db ? unescapeForFileName(std::string(has_db + 1, address_end)) : std::string(); address.shard_number = has_shard ? parse(address_begin + 5) : 0; address.replica_number = underscore ? parse(underscore + 8) : 0; return address; diff --git a/dbms/src/Interpreters/Cluster.h b/dbms/src/Interpreters/Cluster.h index 3d769bf9c7b..b1cbdb22e9a 100644 --- a/dbms/src/Interpreters/Cluster.h +++ b/dbms/src/Interpreters/Cluster.h @@ -57,8 +57,9 @@ public: UInt16 port; String user; String password; - UInt32 shard_number{}; - UInt32 replica_number{}; + UInt32 shard_number{}; /// shard serial number in configuration file + UInt32 replica_number{}; /// replica serial number in this shard + /// This database is selected when no database is specified for Distributed table String default_database; /// The locality is determined at the initialization, and is not changed even if DNS is changed diff --git a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp index 43a595cde6f..ea9a659314b 100644 --- a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp +++ b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp @@ -188,25 +188,14 @@ ConnectionPoolPtr StorageDistributedDirectoryMonitor::createPool(const std::stri { const auto & cluster = storage.getCluster(); const auto & shards_info = cluster->getShardsInfo(); - const auto & shards_addresses = cluster->getShardsAddresses(); + // const auto & shards_addresses = cluster->getShardsInfo(); /// existing connections pool have a higher priority - for (size_t shard_index = 0; shard_index < shards_info.size(); ++shard_index) - { - const Cluster::Addresses & replicas_addresses = shards_addresses[shard_index]; + return shards_info[address.shard_number].per_replica_pools[address.replica_number]; - for (size_t replica_index = 0; replica_index < replicas_addresses.size(); ++replica_index) - { - const Cluster::Address & replica_address = replicas_addresses[replica_index]; - - if (address == replica_address) - return shards_info[shard_index].per_replica_pools[replica_index]; - } - } - - return std::make_shared( + /*return std::make_shared( 1, address.host_name, address.port, address.default_database, address.user, address.password, - storage.getName() + '_' + address.user, Protocol::Compression::Enable, address.secure); + storage.getName() + '_' + address.user, Protocol::Compression::Enable, address.secure);*/ }; auto pools = createPoolsForAddresses(name, pool_factory); From 613b7314f64f8d4c23ce9dc985e1a0ed3fa43d33 Mon Sep 17 00:00:00 2001 From: millb Date: Fri, 31 Jan 2020 12:29:28 +0300 Subject: [PATCH 06/32] fixed bugs --- dbms/src/Interpreters/Cluster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index e8b95a4dc47..18657bc94cf 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -147,7 +147,7 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) const char * address_begin = full_string.data(); bool has_shard = startsWith("shard", full_string); - bool underscore = strchr(full_string.data(), '_'); + const char * underscore = strchr(full_string.data(), '_'); Address address; address.shard_number = has_shard ? parse(address_begin + 5) : 0; From 2dab300ad4b86c29942d77f51087db4217ef8396 Mon Sep 17 00:00:00 2001 From: millb Date: Fri, 31 Jan 2020 13:49:10 +0300 Subject: [PATCH 07/32] attempt --- dbms/src/Interpreters/Cluster.cpp | 47 +++++++++++++++++++++++++++---- dbms/src/Interpreters/Cluster.h | 10 ++++--- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index 18657bc94cf..d390ce8cbaa 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -72,8 +72,8 @@ bool Cluster::Address::isLocal(UInt16 clickhouse_port) const } -Cluster::Address::Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix, UInt32 shard_number_, UInt32 replica_number_) : - shard_number(shard_number_), replica_number(replica_number_) +Cluster::Address::Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix, UInt32 shard_index_, UInt32 replica_index_) : + shard_index(shard_index_), replica_index(replica_index_) { host_name = config.getString(config_prefix + ".host"); port = static_cast(config.getInt(config_prefix + ".port")); @@ -145,13 +145,48 @@ String Cluster::Address::toFullString() const Cluster::Address Cluster::Address::fromFullString(const String & full_string) { const char * address_begin = full_string.data(); + const char * address_end = address_begin + full_string.size(); - bool has_shard = startsWith("shard", full_string); - const char * underscore = strchr(full_string.data(), '_'); + Protocol::Secure secure = Protocol::Secure::Disable; + const char * secure_tag = "+secure"; + if (endsWith(full_string, secure_tag)) + { + address_end -= strlen(secure_tag); + secure = Protocol::Secure::Enable; + } + + const char * user_pw_end = strchr(full_string.data(), '@'); + + /// parsing with format [shard{shard_number}[_replica{replica_number}]] + if (!user_pw_end && startsWith("shard", full_string)) + { + const char * underscore = strchr(full_string.data(), '_'); + + Address address; + address.shard_index = parse(address_begin + 5); + address.replica_index = underscore ? parse(underscore + 8) : 0; + return address; + } + + const char * colon = strchr(full_string.data(), ':'); + if (!user_pw_end || !colon) + throw Exception("Incorrect user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); + + const bool has_pw = colon < user_pw_end; + const char * host_end = has_pw ? strchr(user_pw_end + 1, ':') : colon; + if (!host_end) + throw Exception("Incorrect address '" + full_string + "', it does not contain port", ErrorCodes::SYNTAX_ERROR); + + const char * has_db = strchr(full_string.data(), '#'); + const char * port_end = has_db ? has_db : address_end; Address address; - address.shard_number = has_shard ? parse(address_begin + 5) : 0; - address.replica_number = underscore ? parse(underscore + 8) : 0; + address.secure = secure; + address.port = parse(host_end + 1, port_end - (host_end + 1)); + address.host_name = unescapeForFileName(std::string(user_pw_end + 1, host_end)); + address.user = unescapeForFileName(std::string(address_begin, has_pw ? colon : user_pw_end)); + address.password = has_pw ? unescapeForFileName(std::string(colon + 1, user_pw_end)) : std::string(); + address.default_database = has_db ? unescapeForFileName(std::string(has_db + 1, address_end)) : std::string(); return address; } diff --git a/dbms/src/Interpreters/Cluster.h b/dbms/src/Interpreters/Cluster.h index b1cbdb22e9a..e1ee1994d65 100644 --- a/dbms/src/Interpreters/Cluster.h +++ b/dbms/src/Interpreters/Cluster.h @@ -57,8 +57,8 @@ public: UInt16 port; String user; String password; - UInt32 shard_number{}; /// shard serial number in configuration file - UInt32 replica_number{}; /// replica serial number in this shard + UInt32 shard_index{}; /// shard serial number in configuration file + UInt32 replica_index{}; /// replica serial number in this shard /// This database is selected when no database is specified for Distributed table String default_database; @@ -70,7 +70,7 @@ public: Protocol::Secure secure = Protocol::Secure::Disable; Address() = default; - Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix, UInt32 shard_number_ = 0, UInt32 replica_number_ = 0); + Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix, UInt32 shard_index_ = 0, UInt32 replica_index_ = 0); Address(const String & host_port_, const String & user_, const String & password_, UInt16 clickhouse_port, bool secure_ = false); /// Returns 'escaped_host_name:port' String toString() const; @@ -82,8 +82,10 @@ public: static std::pair fromString(const String & host_port_string); - /// Retrurns escaped shard{shard_number}_replica{replica_number}@resolved_host_address:resolved_host_port#default_database + /// Returns escaped shard{shard_index}_replica{replica_index} String toFullString() const; + + /// Returns address with only shard index and replica index or full address without shard index and replica index static Address fromFullString(const String & address_full_string); /// Returns resolved address if it does resolve. From d05642575d50d9a4ca6d904b03e4110976e7b728 Mon Sep 17 00:00:00 2001 From: millb Date: Fri, 31 Jan 2020 14:16:46 +0300 Subject: [PATCH 08/32] fixed --- dbms/src/Interpreters/Cluster.cpp | 6 ++-- .../Storages/Distributed/DirectoryMonitor.cpp | 36 +++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index d390ce8cbaa..a972fe294d5 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -138,8 +138,8 @@ std::pair Cluster::Address::fromString(const String & host_port_ String Cluster::Address::toFullString() const { return - ((shard_number == 0) ? "" : "shard" + std::to_string(shard_number)) + - ((replica_number == 0) ? "" : "_replica" + std::to_string(replica_number)); + ((shard_index == 0) ? "" : "shard" + std::to_string(shard_index)) + + ((replica_index == 0) ? "" : "_replica" + std::to_string(replica_index)); } Cluster::Address Cluster::Address::fromFullString(const String & full_string) @@ -157,7 +157,7 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) const char * user_pw_end = strchr(full_string.data(), '@'); - /// parsing with format [shard{shard_number}[_replica{replica_number}]] + /// parsing with format [shard{shard_index}[_replica{replica_index}]] if (!user_pw_end && startsWith("shard", full_string)) { const char * underscore = strchr(full_string.data(), '_'); diff --git a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp index ea9a659314b..5d4c8d36254 100644 --- a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp +++ b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp @@ -188,21 +188,45 @@ ConnectionPoolPtr StorageDistributedDirectoryMonitor::createPool(const std::stri { const auto & cluster = storage.getCluster(); const auto & shards_info = cluster->getShardsInfo(); - // const auto & shards_addresses = cluster->getShardsInfo(); + const auto & shards_addresses = cluster->getShardsAddresses(); + + /// check format shard{shard_index}_number{number_index} + if (address.shard_index != 0) + { + return shards_info[address.shard_index].per_replica_pools[address.replica_index]; + } /// existing connections pool have a higher priority - return shards_info[address.shard_number].per_replica_pools[address.replica_number]; + for (size_t shard_index = 0; shard_index < shards_info.size(); ++shard_index) + { + const Cluster::Addresses & replicas_addresses = shards_addresses[shard_index]; - /*return std::make_shared( - 1, address.host_name, address.port, address.default_database, address.user, address.password, - storage.getName() + '_' + address.user, Protocol::Compression::Enable, address.secure);*/ + for (size_t replica_index = 0; replica_index < replicas_addresses.size(); ++replica_index) + { + const Cluster::Address & replica_address = replicas_addresses[replica_index]; + + if (address.user == replica_address.user && + address.password == replica_address.password && + address.host_name == replica_address.host_name && + address.port == replica_address.port && + address.default_database == replica_address.default_database && + address.secure == replica_address.secure) + { + return shards_info[shard_index].per_replica_pools[replica_index]; + } + } + } + + return std::make_shared( + 1, address.host_name, address.port, address.default_database, address.user, address.password, + storage.getName() + '_' + address.user, Protocol::Compression::Enable, address.secure); }; auto pools = createPoolsForAddresses(name, pool_factory); const auto settings = storage.global_context.getSettings(); return pools.size() == 1 ? pools.front() : std::make_shared(pools, LoadBalancing::RANDOM, - settings.distributed_replica_error_half_life.totalSeconds(), settings.distributed_replica_error_cap); + settings.distributed_replica_error_half_life.totalSeconds(), settings.distributed_replica_error_cap); } From 5c5b76d2b083194916eb1ffa5182640e187e6b04 Mon Sep 17 00:00:00 2001 From: Mikhail Korotov <55493615+millb@users.noreply.github.com> Date: Fri, 31 Jan 2020 14:28:39 +0300 Subject: [PATCH 09/32] Update DirectoryMonitor.cpp --- dbms/src/Storages/Distributed/DirectoryMonitor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp index 5d4c8d36254..2ef0d64e73c 100644 --- a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp +++ b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp @@ -226,7 +226,7 @@ ConnectionPoolPtr StorageDistributedDirectoryMonitor::createPool(const std::stri const auto settings = storage.global_context.getSettings(); return pools.size() == 1 ? pools.front() : std::make_shared(pools, LoadBalancing::RANDOM, - settings.distributed_replica_error_half_life.totalSeconds(), settings.distributed_replica_error_cap); + settings.distributed_replica_error_half_life.totalSeconds(), settings.distributed_replica_error_cap); } From 14acdffb0e8432f0164a3e5b2b7dfb505e1bbf0f Mon Sep 17 00:00:00 2001 From: Mikhail Korotov <55493615+millb@users.noreply.github.com> Date: Fri, 31 Jan 2020 14:29:21 +0300 Subject: [PATCH 10/32] Update DirectoryMonitor.cpp --- dbms/src/Storages/Distributed/DirectoryMonitor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp index 2ef0d64e73c..a9ebdb02076 100644 --- a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp +++ b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp @@ -218,8 +218,8 @@ ConnectionPoolPtr StorageDistributedDirectoryMonitor::createPool(const std::stri } return std::make_shared( - 1, address.host_name, address.port, address.default_database, address.user, address.password, - storage.getName() + '_' + address.user, Protocol::Compression::Enable, address.secure); + 1, address.host_name, address.port, address.default_database, address.user, address.password, + storage.getName() + '_' + address.user, Protocol::Compression::Enable, address.secure); }; auto pools = createPoolsForAddresses(name, pool_factory); From 0eca2dd5caa7d0600a2f8ec511cd2deff59cc51b Mon Sep 17 00:00:00 2001 From: Aleksei Levushkin Date: Sun, 2 Feb 2020 16:29:02 +0300 Subject: [PATCH 11/32] added branch to grpc contrib --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index 02b1146871b..b4bc3dc33a5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -107,6 +107,7 @@ [submodule "contrib/grpc"] path = contrib/grpc url = https://github.com/grpc/grpc.git + branch = v1.25.0 [submodule "contrib/aws"] path = contrib/aws url = https://github.com/aws/aws-sdk-cpp.git From 439ef6af9a7e455565e7247db8adeb2b10a70521 Mon Sep 17 00:00:00 2001 From: Aleksei Levushkin Date: Sun, 2 Feb 2020 16:36:59 +0300 Subject: [PATCH 12/32] turn off protobuf tests --- contrib/grpc-cmake/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contrib/grpc-cmake/CMakeLists.txt b/contrib/grpc-cmake/CMakeLists.txt index cc1c2b52b51..b1941ae508f 100644 --- a/contrib/grpc-cmake/CMakeLists.txt +++ b/contrib/grpc-cmake/CMakeLists.txt @@ -54,9 +54,10 @@ endif() # protobuf.cmake set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../protobuf) -if(NOT protobuf_BUILD_TESTS) - set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests") -endif() +# if(NOT protobuf_BUILD_TESTS) + # set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests") +# endif() +set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests") if(NOT protobuf_WITH_ZLIB) set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.") endif() From e0eb2f542842b3fce5b9d86b6f4a29ed64ed7f1e Mon Sep 17 00:00:00 2001 From: Mikhail Korotov <55493615+millb@users.noreply.github.com> Date: Mon, 3 Feb 2020 16:18:00 +0300 Subject: [PATCH 13/32] Update Cluster.cpp --- dbms/src/Interpreters/Cluster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index a972fe294d5..665ee5af1ed 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -158,7 +158,7 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) const char * user_pw_end = strchr(full_string.data(), '@'); /// parsing with format [shard{shard_index}[_replica{replica_index}]] - if (!user_pw_end && startsWith("shard", full_string)) + if (!user_pw_end && startsWith(full_string, "shard")) { const char * underscore = strchr(full_string.data(), '_'); From 663e944b33c0a1dbc8002a53fa6011d0a6dfd2f0 Mon Sep 17 00:00:00 2001 From: millb Date: Mon, 3 Feb 2020 19:03:42 +0300 Subject: [PATCH 14/32] Attempt --- dbms/src/Interpreters/Cluster.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index a972fe294d5..61b28252f8b 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -139,7 +139,8 @@ String Cluster::Address::toFullString() const { return ((shard_index == 0) ? "" : "shard" + std::to_string(shard_index)) + - ((replica_index == 0) ? "" : "_replica" + std::to_string(replica_index)); + ((replica_index == 0) ? "" : "_replica" + std::to_string(replica_index)) + + ((secure == Protocol::Secure::Enable) ? "+secure" : ""); } Cluster::Address Cluster::Address::fromFullString(const String & full_string) From 2723057e809c6a4cd3085734f4e1b6b2cbac3889 Mon Sep 17 00:00:00 2001 From: Aleksei Levushkin Date: Wed, 5 Feb 2020 14:48:59 +0300 Subject: [PATCH 15/32] added zlib-ng instead zlib --- contrib/grpc-cmake/CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contrib/grpc-cmake/CMakeLists.txt b/contrib/grpc-cmake/CMakeLists.txt index b1941ae508f..950bcb2b7f6 100644 --- a/contrib/grpc-cmake/CMakeLists.txt +++ b/contrib/grpc-cmake/CMakeLists.txt @@ -15,8 +15,8 @@ endif() set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_gRPC_C_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_gRPC_C_CXX_FLAGS}") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_gRPC_C_CXX_FLAGS} -w") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_gRPC_C_CXX_FLAGS} -w") set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf") @@ -96,9 +96,9 @@ set(_gRPC_UPB_GRPC_GENERATED_DIR "${GRPC_SOURCE_DIR}/src/core/ext/upb-generated" set(_gRPC_UPB_LIBRARIES upb) # zlib.cmake -set(ZLIB_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/zlib) +set(ZLIB_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/zlib-ng) include_directories("${ZLIB_ROOT_DIR}") -add_subdirectory(${ZLIB_ROOT_DIR} ${ZLIB_ROOT_DIR}) +# add_subdirectory(${ZLIB_ROOT_DIR} ${ZLIB_ROOT_DIR}) set(_gRPC_ZLIB_LIBRARIES zlibstatic) set(_gRPC_ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}") @@ -1333,7 +1333,7 @@ add_library(grpc++ ${GRPC_SOURCE_DIR}/src/cpp/codegen/codegen_init.cc ) -target_compile_options(grpc++ PUBLIC -Wno-error=shadow) +target_compile_options(grpc++ PUBLIC -w) target_include_directories(grpc++ PUBLIC ${GRPC_INCLUDE_DIR} @@ -1406,7 +1406,7 @@ add_library(grpc++_unsecure ${GRPC_SOURCE_DIR}/src/cpp/codegen/codegen_init.cc ) -target_compile_options(grpc++_unsecure PUBLIC -Wno-error=shadow) +target_compile_options(grpc++_unsecure PUBLIC -w) target_include_directories(grpc++_unsecure PUBLIC ${GRPC_INCLUDE_DIR} From 92fc1a9b2b7749c0b70db45793b70af1699f18eb Mon Sep 17 00:00:00 2001 From: millb Date: Wed, 12 Feb 2020 13:06:09 +0300 Subject: [PATCH 16/32] fixed bugs --- dbms/src/Storages/Distributed/DirectoryMonitor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp index a9ebdb02076..77467da511e 100644 --- a/dbms/src/Storages/Distributed/DirectoryMonitor.cpp +++ b/dbms/src/Storages/Distributed/DirectoryMonitor.cpp @@ -190,10 +190,10 @@ ConnectionPoolPtr StorageDistributedDirectoryMonitor::createPool(const std::stri const auto & shards_info = cluster->getShardsInfo(); const auto & shards_addresses = cluster->getShardsAddresses(); - /// check format shard{shard_index}_number{number_index} + /// check new format shard{shard_index}_number{number_index} if (address.shard_index != 0) { - return shards_info[address.shard_index].per_replica_pools[address.replica_index]; + return shards_info[address.shard_index - 1].per_replica_pools[address.replica_index - 1]; } /// existing connections pool have a higher priority From 6abeabc1f2503817c167c12a77ef37116584994c Mon Sep 17 00:00:00 2001 From: millb Date: Wed, 12 Feb 2020 13:13:11 +0300 Subject: [PATCH 17/32] fixed bugs --- dbms/src/Interpreters/Cluster.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index b57d2ab5b50..b569a5eed81 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -139,8 +139,7 @@ String Cluster::Address::toFullString() const { return ((shard_index == 0) ? "" : "shard" + std::to_string(shard_index)) + - ((replica_index == 0) ? "" : "_replica" + std::to_string(replica_index)) + - ((secure == Protocol::Secure::Enable) ? "+secure" : ""); + ((replica_index == 0) ? "" : "_replica" + std::to_string(replica_index)); } Cluster::Address Cluster::Address::fromFullString(const String & full_string) @@ -148,17 +147,9 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) const char * address_begin = full_string.data(); const char * address_end = address_begin + full_string.size(); - Protocol::Secure secure = Protocol::Secure::Disable; - const char * secure_tag = "+secure"; - if (endsWith(full_string, secure_tag)) - { - address_end -= strlen(secure_tag); - secure = Protocol::Secure::Enable; - } - const char * user_pw_end = strchr(full_string.data(), '@'); - /// parsing with format [shard{shard_index}[_replica{replica_index}]] + /// parsing with [shard{shard_index}[_replica{replica_index}]] format if (!user_pw_end && startsWith(full_string, "shard")) { const char * underscore = strchr(full_string.data(), '_'); @@ -169,6 +160,15 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) return address; } + /// parsing with old user[:password]@host:port#default_database format + Protocol::Secure secure = Protocol::Secure::Disable; + const char * secure_tag = "+secure"; + if (endsWith(full_string, secure_tag)) + { + address_end -= strlen(secure_tag); + secure = Protocol::Secure::Enable; + } + const char * colon = strchr(full_string.data(), ':'); if (!user_pw_end || !colon) throw Exception("Incorrect user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); From c4b45ddff88367a04a467289b19d93ca75958727 Mon Sep 17 00:00:00 2001 From: millb Date: Wed, 12 Feb 2020 17:11:03 +0300 Subject: [PATCH 18/32] fixed tests --- dbms/tests/integration/test_distributed_format/test.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dbms/tests/integration/test_distributed_format/test.py b/dbms/tests/integration/test_distributed_format/test.py index 2bcc8ab8063..eb296463376 100644 --- a/dbms/tests/integration/test_distributed_format/test.py +++ b/dbms/tests/integration/test_distributed_format/test.py @@ -26,12 +26,12 @@ def test_single_file(started_cluster): node.query("create table distr_1 (x UInt64, s String) engine = Distributed('test_cluster', database, table)") node.query("insert into distr_1 values (1, 'a'), (2, 'bb'), (3, 'ccc')") - query = "select * from file('/var/lib/clickhouse/data/default/distr_1/default@not_existing:9000/1.bin', 'Distributed')" + query = "select * from file('/var/lib/clickhouse/data/default/distr_1/shard1_replica1/1.bin', 'Distributed')" out = node.exec_in_container(['/usr/bin/clickhouse', 'local', '--stacktrace', '-q', query]) assert out == '1\ta\n2\tbb\n3\tccc\n' - query = "create table t (dummy UInt32) engine = File('Distributed', '/var/lib/clickhouse/data/default/distr_1/default@not_existing:9000/1.bin');" \ + query = "create table t (dummy UInt32) engine = File('Distributed', '/var/lib/clickhouse/data/default/distr_1/shard1_replica1/1.bin');" \ "select * from t" out = node.exec_in_container(['/usr/bin/clickhouse', 'local', '--stacktrace', '-q', query]) @@ -45,12 +45,12 @@ def test_two_files(started_cluster): node.query("insert into distr_2 values (0, '_'), (1, 'a')") node.query("insert into distr_2 values (2, 'bb'), (3, 'ccc')") - query = "select * from file('/var/lib/clickhouse/data/default/distr_2/default@not_existing:9000/{1,2,3,4}.bin', 'Distributed') order by x" + query = "select * from file('/var/lib/clickhouse/data/default/distr_2/shard1_replica1/{1,2,3,4}.bin', 'Distributed') order by x" out = node.exec_in_container(['/usr/bin/clickhouse', 'local', '--stacktrace', '-q', query]) assert out == '0\t_\n1\ta\n2\tbb\n3\tccc\n' - query = "create table t (dummy UInt32) engine = File('Distributed', '/var/lib/clickhouse/data/default/distr_2/default@not_existing:9000/{1,2,3,4}.bin');" \ + query = "create table t (dummy UInt32) engine = File('Distributed', '/var/lib/clickhouse/data/default/distr_2/shard1_replica1/{1,2,3,4}.bin');" \ "select * from t order by x" out = node.exec_in_container(['/usr/bin/clickhouse', 'local', '--stacktrace', '-q', query]) From 5d1396ca33dd6d9e09bc0dc62b8c3d437e62c010 Mon Sep 17 00:00:00 2001 From: Mikhail Korotov <55493615+millb@users.noreply.github.com> Date: Wed, 12 Feb 2020 17:32:18 +0300 Subject: [PATCH 19/32] Update Cluster.h --- dbms/src/Interpreters/Cluster.h | 1 + 1 file changed, 1 insertion(+) diff --git a/dbms/src/Interpreters/Cluster.h b/dbms/src/Interpreters/Cluster.h index e1ee1994d65..bfebdf99136 100644 --- a/dbms/src/Interpreters/Cluster.h +++ b/dbms/src/Interpreters/Cluster.h @@ -72,6 +72,7 @@ public: Address() = default; Address(const Poco::Util::AbstractConfiguration & config, const String & config_prefix, UInt32 shard_index_ = 0, UInt32 replica_index_ = 0); Address(const String & host_port_, const String & user_, const String & password_, UInt16 clickhouse_port, bool secure_ = false); + /// Returns 'escaped_host_name:port' String toString() const; From 62be802ea9e509b549fbc108fc6974221a87de46 Mon Sep 17 00:00:00 2001 From: Mikhail Korotov Date: Wed, 12 Feb 2020 17:35:23 +0300 Subject: [PATCH 20/32] tests fixed --- .../integration/test_distributed_storage_configuration/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/tests/integration/test_distributed_storage_configuration/test.py b/dbms/tests/integration/test_distributed_storage_configuration/test.py index a7c33b059c3..ad20e28271a 100644 --- a/dbms/tests/integration/test_distributed_storage_configuration/test.py +++ b/dbms/tests/integration/test_distributed_storage_configuration/test.py @@ -25,7 +25,7 @@ def _files_in_dist_mon(node, root, table): 'bash', '-c', # `-maxdepth 1` to avoid /tmp/ subdirectory - 'find /{root}/data/default/{table}/default@127%2E0%2E0%2E2:9000 -maxdepth 1 -type f | wc -l'.format(root=root, table=table) + 'find /{root}/data/default/{table}/shard2_replica1 -maxdepth 1 -type f | wc -l'.format(root=root, table=table) ]).split('\n')[0]) def test_different_versions(start_cluster): From 6916caf7cd609102587357a59db2093fc1221d73 Mon Sep 17 00:00:00 2001 From: Mikhail Korotov Date: Wed, 12 Feb 2020 18:12:50 +0300 Subject: [PATCH 21/32] empty commit From 480881563acd3061f0765a0e112a2ec82933050c Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Sun, 16 Feb 2020 07:11:19 +0300 Subject: [PATCH 22/32] Slightly more readable. --- dbms/src/Interpreters/Cluster.cpp | 65 +++++++++++++++++-------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index b569a5eed81..4c96b2b98c8 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -149,7 +149,7 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) const char * user_pw_end = strchr(full_string.data(), '@'); - /// parsing with [shard{shard_index}[_replica{replica_index}]] format + /// parsing with the new [shard{shard_index}[_replica{replica_index}]] format if (!user_pw_end && startsWith(full_string, "shard")) { const char * underscore = strchr(full_string.data(), '_'); @@ -157,38 +157,45 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) Address address; address.shard_index = parse(address_begin + 5); address.replica_index = underscore ? parse(underscore + 8) : 0; + return address; } - - /// parsing with old user[:password]@host:port#default_database format - Protocol::Secure secure = Protocol::Secure::Disable; - const char * secure_tag = "+secure"; - if (endsWith(full_string, secure_tag)) + else { - address_end -= strlen(secure_tag); - secure = Protocol::Secure::Enable; + /// parsing with the old user[:password]@host:port#default_database format + /// This format is appeared to be inconvenient for the following reasons: + /// - credentials are exposed in file name; + /// - the file name can be too long. + + Protocol::Secure secure = Protocol::Secure::Disable; + const char * secure_tag = "+secure"; + if (endsWith(full_string, secure_tag)) + { + address_end -= strlen(secure_tag); + secure = Protocol::Secure::Enable; + } + + const char * colon = strchr(full_string.data(), ':'); + if (!user_pw_end || !colon) + throw Exception("Incorrect user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); + + const bool has_pw = colon < user_pw_end; + const char * host_end = has_pw ? strchr(user_pw_end + 1, ':') : colon; + if (!host_end) + throw Exception("Incorrect address '" + full_string + "', it does not contain port", ErrorCodes::SYNTAX_ERROR); + + const char * has_db = strchr(full_string.data(), '#'); + const char * port_end = has_db ? has_db : address_end; + + Address address; + address.secure = secure; + address.port = parse(host_end + 1, port_end - (host_end + 1)); + address.host_name = unescapeForFileName(std::string(user_pw_end + 1, host_end)); + address.user = unescapeForFileName(std::string(address_begin, has_pw ? colon : user_pw_end)); + address.password = has_pw ? unescapeForFileName(std::string(colon + 1, user_pw_end)) : std::string(); + address.default_database = has_db ? unescapeForFileName(std::string(has_db + 1, address_end)) : std::string(); + return address; } - - const char * colon = strchr(full_string.data(), ':'); - if (!user_pw_end || !colon) - throw Exception("Incorrect user[:password]@host:port#default_database format " + full_string, ErrorCodes::SYNTAX_ERROR); - - const bool has_pw = colon < user_pw_end; - const char * host_end = has_pw ? strchr(user_pw_end + 1, ':') : colon; - if (!host_end) - throw Exception("Incorrect address '" + full_string + "', it does not contain port", ErrorCodes::SYNTAX_ERROR); - - const char * has_db = strchr(full_string.data(), '#'); - const char * port_end = has_db ? has_db : address_end; - - Address address; - address.secure = secure; - address.port = parse(host_end + 1, port_end - (host_end + 1)); - address.host_name = unescapeForFileName(std::string(user_pw_end + 1, host_end)); - address.user = unescapeForFileName(std::string(address_begin, has_pw ? colon : user_pw_end)); - address.password = has_pw ? unescapeForFileName(std::string(colon + 1, user_pw_end)) : std::string(); - address.default_database = has_db ? unescapeForFileName(std::string(has_db + 1, address_end)) : std::string(); - return address; } From 5ebabe519f4ee7f21be39ad4baf1a0666a5f6510 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Sun, 16 Feb 2020 07:12:48 +0300 Subject: [PATCH 23/32] Update Cluster.cpp --- dbms/src/Interpreters/Cluster.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.cpp b/dbms/src/Interpreters/Cluster.cpp index 4c96b2b98c8..3261c0caf59 100644 --- a/dbms/src/Interpreters/Cluster.cpp +++ b/dbms/src/Interpreters/Cluster.cpp @@ -155,8 +155,8 @@ Cluster::Address Cluster::Address::fromFullString(const String & full_string) const char * underscore = strchr(full_string.data(), '_'); Address address; - address.shard_index = parse(address_begin + 5); - address.replica_index = underscore ? parse(underscore + 8) : 0; + address.shard_index = parse(address_begin + strlen("shard")); + address.replica_index = underscore ? parse(underscore + strlen("_replica")) : 0; return address; } From 4ebb240be6bdb06089ba9dfa2fe2754243925b06 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Sun, 16 Feb 2020 07:13:54 +0300 Subject: [PATCH 24/32] Update Cluster.h --- dbms/src/Interpreters/Cluster.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbms/src/Interpreters/Cluster.h b/dbms/src/Interpreters/Cluster.h index bfebdf99136..8b1fd49d303 100644 --- a/dbms/src/Interpreters/Cluster.h +++ b/dbms/src/Interpreters/Cluster.h @@ -57,8 +57,8 @@ public: UInt16 port; String user; String password; - UInt32 shard_index{}; /// shard serial number in configuration file - UInt32 replica_index{}; /// replica serial number in this shard + UInt32 shard_index{}; /// shard serial number in configuration file, starting from 1. + UInt32 replica_index{}; /// replica serial number in this shard, starting from 1; zero means no replicas. /// This database is selected when no database is specified for Distributed table String default_database; From ee78690b5070128e22ac566f735583b7c970ffb7 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Sun, 16 Feb 2020 09:09:22 +0300 Subject: [PATCH 25/32] Update bit_functions.md --- docs/en/query_language/functions/bit_functions.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/en/query_language/functions/bit_functions.md b/docs/en/query_language/functions/bit_functions.md index 941ba44cf30..5774375a546 100644 --- a/docs/en/query_language/functions/bit_functions.md +++ b/docs/en/query_language/functions/bit_functions.md @@ -82,8 +82,11 @@ Returns result of [logical conjuction](https://en.wikipedia.org/wiki/Logical_con The conjuction for bitwise operations: 0 AND 0 = 0 + 0 AND 1 = 0 + 1 AND 0 = 0 + 1 AND 1 = 1 **Syntax** @@ -144,8 +147,11 @@ Returns result of [logical disjunction](https://en.wikipedia.org/wiki/Logical_di The disjunction for bitwise operations: 0 OR 0 = 0 + 0 OR 1 = 1 + 1 OR 0 = 1 + 1 OR 1 = 1 **Syntax** From 63b7d6e5acece92a75666aab074320257d256829 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sun, 16 Feb 2020 09:49:24 +0300 Subject: [PATCH 26/32] Describe reasons when query profiler cannot work --- dbms/programs/server/Server.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dbms/programs/server/Server.cpp b/dbms/programs/server/Server.cpp index 0cd357bbd94..3fd4efe2039 100644 --- a/dbms/programs/server/Server.cpp +++ b/dbms/programs/server/Server.cpp @@ -578,6 +578,25 @@ int Server::main(const std::vector & /*args*/) global_context->initializeTraceCollector(); #endif + /// Describe multiple reasons when query profiler cannot work. + +#if !USE_UNWIND + LOG_INFO(log, "Query Profiler and TraceCollector are disabled because they cannot work without bundled unwind library."); +#endif + +#if WITH_COVERAGE + LOG_INFO(log, "Query Profiler and TraceCollector are disabled because they work extremely slow with test coverage."); +#endif + +#if defined(SANITIZER) + LOG_INFO(log, "Query Profiler and TraceCollector are disabled because they cannot work under sanitizers" + " when two different stack unwinding methods will interfere with each other."); +#endif + + if (!hasPHDRCache()) + LOG_INFO(log, "Query Profiler and TraceCollector are disabled because they require PHDR cache to be created" + " (otherwise the function 'dl_iterate_phdr' is not lock free and async-signal safe)."); + global_context->setCurrentDatabase(default_database); if (has_zookeeper && config().has("distributed_ddl")) From 3772ffdc9d019fd612afd50f12d5546826457f90 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sun, 16 Feb 2020 09:51:52 +0300 Subject: [PATCH 27/32] Describe reasons when query profiler cannot work --- dbms/programs/server/Server.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dbms/programs/server/Server.cpp b/dbms/programs/server/Server.cpp index 3fd4efe2039..b97ed1cea2a 100644 --- a/dbms/programs/server/Server.cpp +++ b/dbms/programs/server/Server.cpp @@ -581,7 +581,7 @@ int Server::main(const std::vector & /*args*/) /// Describe multiple reasons when query profiler cannot work. #if !USE_UNWIND - LOG_INFO(log, "Query Profiler and TraceCollector are disabled because they cannot work without bundled unwind library."); + LOG_INFO(log, "Query Profiler and TraceCollector are disabled because they cannot work without bundled unwind (stack unwinding) library."); #endif #if WITH_COVERAGE @@ -595,7 +595,7 @@ int Server::main(const std::vector & /*args*/) if (!hasPHDRCache()) LOG_INFO(log, "Query Profiler and TraceCollector are disabled because they require PHDR cache to be created" - " (otherwise the function 'dl_iterate_phdr' is not lock free and async-signal safe)."); + " (otherwise the function 'dl_iterate_phdr' is not lock free and not async-signal safe)."); global_context->setCurrentDatabase(default_database); From 2a6e838ed06da33d5f3d89b7ae3c1774836ea498 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sun, 16 Feb 2020 10:13:52 +0300 Subject: [PATCH 28/32] Enabled colors in terminal by default; changed the setting name #9031 --- libs/libloggers/loggers/Loggers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/libloggers/loggers/Loggers.cpp b/libs/libloggers/loggers/Loggers.cpp index b8cd941f827..b0cd35c9541 100644 --- a/libs/libloggers/loggers/Loggers.cpp +++ b/libs/libloggers/loggers/Loggers.cpp @@ -138,7 +138,7 @@ void Loggers::buildLoggers(Poco::Util::AbstractConfiguration & config, Poco::Log if (config.getBool("logger.console", false) || (!config.hasProperty("logger.console") && !is_daemon && is_tty)) { - bool color_enabled = config.getBool("logger.colored_console", false) && is_tty; + bool color_enabled = config.getBool("logger.color_terminal", true) && is_tty; Poco::AutoPtr pf = new OwnPatternFormatter(this, OwnPatternFormatter::ADD_NOTHING, color_enabled); Poco::AutoPtr log = new DB::OwnFormattingChannel(pf, new Poco::ConsoleChannel); From 37d382c9373b145755de81e1a9c0f13c058b572c Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sun, 16 Feb 2020 11:44:34 +0300 Subject: [PATCH 29/32] Better colors in terminal --- .../loggers/OwnPatternFormatter.cpp | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/libs/libloggers/loggers/OwnPatternFormatter.cpp b/libs/libloggers/loggers/OwnPatternFormatter.cpp index 968b0344fe1..6340facab68 100644 --- a/libs/libloggers/loggers/OwnPatternFormatter.cpp +++ b/libs/libloggers/loggers/OwnPatternFormatter.cpp @@ -2,40 +2,31 @@ #include #include +#include #include #include #include #include -#include #include #include #include "Loggers.h" -static const char * setColor(UInt64 num) +static std::string setColor(UInt64 num) { - /// ANSI escape sequences to set foreground font color in terminal. + /// Make a random RGB color that has constant brightness. + /// https://en.wikipedia.org/wiki/YCbCr - static constexpr auto num_colors = 12; - static const char * colors[num_colors] = - { - /// Black on black is meaningless - "\033[0;31m", - "\033[0;32m", - "\033[0;33m", - /// Low intense blue on black is too dark. - "\033[0;35m", - "\033[0;36m", - "\033[1;31m", - "\033[1;32m", - "\033[1;33m", - "\033[1;34m", - "\033[1;35m", - "\033[1;36m", - "\033[1m", /// Not as white but just as high intense - for readability on white background. - }; + UInt8 y = 128; + UInt8 cb = num % 256; + UInt8 cr = num / 256 % 256; - return colors[num % num_colors]; + UInt8 r = std::max(0.0, std::min(255.0, y + 1.402 * (cr - 128))); + UInt8 g = std::max(0.0, std::min(255.0, y - 0.344136 * (cb - 128) - 0.714136 * (cr - 128))); + UInt8 b = std::max(0.0, std::min(255.0, y + 1.772 * (cb - 128))); + + /// ANSI escape sequence to set 24-bit foreground font color in terminal. + return "\033[38;2;" + DB::toString(r) + ";" + DB::toString(g) + ";" + DB::toString(b) + "m"; } static const char * setColorForLogPriority(int priority) @@ -104,7 +95,7 @@ void OwnPatternFormatter::formatExtended(const DB::ExtendedLogMessage & msg_ext, writeCString(" [ ", wb); if (color) - writeCString(setColor(intHash64(msg_ext.thread_id)), wb); + writeString(setColor(intHash64(msg_ext.thread_id)), wb); DB::writeIntText(msg_ext.thread_id, wb); if (color) writeCString(resetColor(), wb); @@ -114,7 +105,7 @@ void OwnPatternFormatter::formatExtended(const DB::ExtendedLogMessage & msg_ext, /// just to be convenient for various log parsers. writeCString("{", wb); if (color) - writeCString(setColor(std::hash()(msg_ext.query_id)), wb); + writeString(setColor(std::hash()(msg_ext.query_id)), wb); DB::writeString(msg_ext.query_id, wb); if (color) writeCString(resetColor(), wb); From 355ff00c2eb74eeebf4cdb46f795efa05c9ffbd7 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Sun, 16 Feb 2020 11:48:01 +0300 Subject: [PATCH 30/32] Revert "Build fixes" --- cmake/find/h3.cmake | 3 ++- cmake/find/zlib.cmake | 2 +- cmake/tools.cmake | 8 +++----- contrib/CMakeLists.txt | 14 +++++--------- contrib/arrow-cmake/CMakeLists.txt | 1 - contrib/boost-cmake/CMakeLists.txt | 1 - contrib/libxml2-cmake/CMakeLists.txt | 2 +- contrib/replxx-cmake/CMakeLists.txt | 5 +---- dbms/CMakeLists.txt | 8 ++------ dbms/src/Functions/geoToH3.cpp | 6 +----- dbms/src/Functions/h3EdgeAngle.cpp | 6 +----- dbms/src/Functions/h3EdgeLengthM.cpp | 9 ++------- dbms/src/Functions/h3GetResolution.cpp | 6 +----- dbms/src/Functions/h3IsValid.cpp | 6 +----- dbms/src/Functions/h3kRing.cpp | 6 +----- debian/pbuilder-hooks/B90test-server | 7 +++++++ 16 files changed, 29 insertions(+), 61 deletions(-) diff --git a/cmake/find/h3.cmake b/cmake/find/h3.cmake index e01f0269507..6abe1ee657c 100644 --- a/cmake/find/h3.cmake +++ b/cmake/find/h3.cmake @@ -15,8 +15,9 @@ if (USE_INTERNAL_H3_LIBRARY) set (H3_LIBRARY h3) set (H3_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/h3/src/h3lib/include) elseif (NOT MISSING_INTERNAL_H3_LIBRARY) + set (H3_INCLUDE_PATHS /usr/local/include/h3) find_library (H3_LIBRARY h3) - find_path (H3_INCLUDE_DIR NAMES h3/h3api.h PATHS ${H3_INCLUDE_PATHS}) + find_path (H3_INCLUDE_DIR NAMES h3api.h PATHS ${H3_INCLUDE_PATHS}) endif () if (H3_LIBRARY AND H3_INCLUDE_DIR) diff --git a/cmake/find/zlib.cmake b/cmake/find/zlib.cmake index 7fc30fbfe42..42cfce871d7 100644 --- a/cmake/find/zlib.cmake +++ b/cmake/find/zlib.cmake @@ -29,7 +29,7 @@ if (NOT ZLIB_FOUND AND NOT MISSING_INTERNAL_ZLIB_LIBRARY) set (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR}) # for poco set (ZLIB_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIR}) # for protobuf set (ZLIB_FOUND 1) # for poco - if (USE_STATIC_LIBRARIES AND DEFINED BUILD_SHARED_LIBS) + if (USE_STATIC_LIBRARIES) set (ZLIB_LIBRARIES zlibstatic CACHE INTERNAL "") else () set (ZLIB_LIBRARIES zlib CACHE INTERNAL "") diff --git a/cmake/tools.cmake b/cmake/tools.cmake index 6aaeb5b8a16..025aac79b53 100644 --- a/cmake/tools.cmake +++ b/cmake/tools.cmake @@ -32,9 +32,8 @@ else () find_program (GOLD_PATH NAMES "ld.gold" "gold") endif () -if (NOT OS_FREEBSD) # We prefer LLD linker over Gold or BFD. - if (NOT LINKER_NAME) +if (NOT LINKER_NAME) if (LLD_PATH) if (COMPILER_GCC) # GCC driver requires one of supported linker names like "lld". @@ -44,9 +43,9 @@ if (NOT OS_FREEBSD) set (LINKER_NAME ${LLD_PATH}) endif () endif () - endif () +endif () - if (NOT LINKER_NAME) +if (NOT LINKER_NAME) if (GOLD_PATH) if (COMPILER_GCC) set (LINKER_NAME "gold") @@ -54,7 +53,6 @@ if (NOT OS_FREEBSD) set (LINKER_NAME ${GOLD_PATH}) endif () endif () - endif () endif () if (LINKER_NAME) diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index b0e734f5f7b..155c96b1446 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -54,6 +54,7 @@ if (USE_INTERNAL_BTRIE_LIBRARY) endif () if (USE_INTERNAL_ZLIB_LIBRARY) + unset (BUILD_SHARED_LIBS CACHE) set (ZLIB_ENABLE_TESTS 0 CACHE INTERNAL "") set (SKIP_INSTALL_ALL 1 CACHE INTERNAL "") set (ZLIB_COMPAT 1 CACHE INTERNAL "") # also enables WITH_GZFILEOP @@ -69,14 +70,10 @@ if (USE_INTERNAL_ZLIB_LIBRARY) add_subdirectory (${INTERNAL_ZLIB_NAME}) # We should use same defines when including zlib.h as used when zlib compiled target_compile_definitions (zlib PUBLIC ZLIB_COMPAT WITH_GZFILEOP) - if (TARGET zlibstatic) - target_compile_definitions (zlibstatic PUBLIC ZLIB_COMPAT WITH_GZFILEOP) - endif () + target_compile_definitions (zlibstatic PUBLIC ZLIB_COMPAT WITH_GZFILEOP) if (ARCH_AMD64 OR ARCH_AARCH64) - target_compile_definitions (zlib PUBLIC X86_64 UNALIGNED_OK) - if (TARGET zlibstatic) - target_compile_definitions (zlibstatic PUBLIC X86_64 UNALIGNED_OK) - endif () + target_compile_definitions (zlib PUBLIC X86_64 UNALIGNED_OK) + target_compile_definitions (zlibstatic PUBLIC X86_64 UNALIGNED_OK) endif () endif () @@ -119,7 +116,7 @@ function(mysql_support) endif() if (USE_INTERNAL_ZLIB_LIBRARY) set(ZLIB_FOUND ON) - set(ZLIB_LIBRARY ${ZLIB_LIBRARIES}) + set(ZLIB_LIBRARY zlibstatic) set(WITH_EXTERNAL_ZLIB ON) endif() add_subdirectory (mariadb-connector-c) @@ -262,7 +259,6 @@ if (USE_EMBEDDED_COMPILER AND USE_INTERNAL_LLVM_LIBRARY) set (LLVM_ENABLE_PIC 0 CACHE INTERNAL "") set (LLVM_TARGETS_TO_BUILD "X86;AArch64" CACHE STRING "") add_subdirectory (llvm/llvm) - target_include_directories(LLVMSupport SYSTEM BEFORE PRIVATE ${ZLIB_INCLUDE_DIR}) endif () if (USE_INTERNAL_LIBGSASL_LIBRARY) diff --git a/contrib/arrow-cmake/CMakeLists.txt b/contrib/arrow-cmake/CMakeLists.txt index 20ff5c49eea..1f09bba8d31 100644 --- a/contrib/arrow-cmake/CMakeLists.txt +++ b/contrib/arrow-cmake/CMakeLists.txt @@ -348,7 +348,6 @@ if (ARROW_WITH_ZLIB) endif () if (ARROW_WITH_ZSTD) target_link_libraries(${ARROW_LIBRARY} PRIVATE ${ZSTD_LIBRARY}) - target_include_directories(${ARROW_LIBRARY} SYSTEM BEFORE PRIVATE ${ZLIB_INCLUDE_DIR}) endif () target_include_directories(${ARROW_LIBRARY} PRIVATE SYSTEM ${ORC_INCLUDE_DIR}) diff --git a/contrib/boost-cmake/CMakeLists.txt b/contrib/boost-cmake/CMakeLists.txt index 582cc84a552..54dcd750320 100644 --- a/contrib/boost-cmake/CMakeLists.txt +++ b/contrib/boost-cmake/CMakeLists.txt @@ -41,5 +41,4 @@ endif() if (USE_INTERNAL_AVRO_LIBRARY) add_boost_lib(iostreams) target_link_libraries(boost_iostreams_internal PUBLIC ${ZLIB_LIBRARIES}) - target_include_directories(boost_iostreams_internal SYSTEM BEFORE PRIVATE ${ZLIB_INCLUDE_DIR}) endif() diff --git a/contrib/libxml2-cmake/CMakeLists.txt b/contrib/libxml2-cmake/CMakeLists.txt index f0b2135a7c8..71127fb9e35 100644 --- a/contrib/libxml2-cmake/CMakeLists.txt +++ b/contrib/libxml2-cmake/CMakeLists.txt @@ -59,4 +59,4 @@ endif() target_include_directories(libxml2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/linux_x86_64/include) target_include_directories(libxml2 PUBLIC ${LIBXML2_SOURCE_DIR}/include) -target_include_directories(libxml2 SYSTEM BEFORE PRIVATE ${ZLIB_INCLUDE_DIR}) +target_include_directories(libxml2 PRIVATE ${ZLIB_INCLUDE_DIR}/include) diff --git a/contrib/replxx-cmake/CMakeLists.txt b/contrib/replxx-cmake/CMakeLists.txt index cc428d957cf..1240eb56b39 100644 --- a/contrib/replxx-cmake/CMakeLists.txt +++ b/contrib/replxx-cmake/CMakeLists.txt @@ -45,10 +45,7 @@ if (ENABLE_REPLXX) endif () endif () - if (NOT (COMPILER_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)) - target_compile_options(replxx PUBLIC -Wno-documentation) - endif () - + target_compile_options(replxx PUBLIC -Wno-documentation) target_compile_definitions(replxx PUBLIC USE_REPLXX=1) message (STATUS "Using replxx") diff --git a/dbms/CMakeLists.txt b/dbms/CMakeLists.txt index 16c38400ba2..eeda7aa6a1f 100644 --- a/dbms/CMakeLists.txt +++ b/dbms/CMakeLists.txt @@ -176,12 +176,8 @@ elseif (COMPILER_GCC) add_cxx_compile_options(-Wsizeof-array-argument) # Warn for suspicious length parameters to certain string and memory built-in functions if the argument uses sizeof add_cxx_compile_options(-Wsizeof-pointer-memaccess) - - if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9) - # Warn about overriding virtual functions that are not marked with the override keyword - add_cxx_compile_options(-Wsuggest-override) - endif () - + # Warn about overriding virtual functions that are not marked with the override keyword + add_cxx_compile_options(-Wsuggest-override) # Warn whenever a switch statement has an index of boolean type and the case values are outside the range of a boolean type add_cxx_compile_options(-Wswitch-bool) # Warn if a self-comparison always evaluates to true or false diff --git a/dbms/src/Functions/geoToH3.cpp b/dbms/src/Functions/geoToH3.cpp index 7fc00f2ccbe..40c267d8656 100644 --- a/dbms/src/Functions/geoToH3.cpp +++ b/dbms/src/Functions/geoToH3.cpp @@ -10,11 +10,7 @@ #include #include -#if __has_include(

) -# include

-#else -# include -#endif +#include namespace DB diff --git a/dbms/src/Functions/h3EdgeAngle.cpp b/dbms/src/Functions/h3EdgeAngle.cpp index 130081f50ed..18abc864c3e 100644 --- a/dbms/src/Functions/h3EdgeAngle.cpp +++ b/dbms/src/Functions/h3EdgeAngle.cpp @@ -7,11 +7,7 @@ # include # include -# if __has_include(

) -# include

-# else -# include -# endif +# include namespace DB diff --git a/dbms/src/Functions/h3EdgeLengthM.cpp b/dbms/src/Functions/h3EdgeLengthM.cpp index 72cbc98bc65..d3c0db4b4b5 100644 --- a/dbms/src/Functions/h3EdgeLengthM.cpp +++ b/dbms/src/Functions/h3EdgeLengthM.cpp @@ -8,13 +8,8 @@ # include # include -# if __has_include(

) -# include

-# include

-# else -# include -# include -# endif +# include +# include namespace DB diff --git a/dbms/src/Functions/h3GetResolution.cpp b/dbms/src/Functions/h3GetResolution.cpp index 1334c7dab5a..dfa84e8e076 100644 --- a/dbms/src/Functions/h3GetResolution.cpp +++ b/dbms/src/Functions/h3GetResolution.cpp @@ -7,11 +7,7 @@ # include # include -# if __has_include(

) -# include

-# else -# include -# endif +# include namespace DB diff --git a/dbms/src/Functions/h3IsValid.cpp b/dbms/src/Functions/h3IsValid.cpp index 26ec272a6ae..0c4123caf00 100644 --- a/dbms/src/Functions/h3IsValid.cpp +++ b/dbms/src/Functions/h3IsValid.cpp @@ -7,11 +7,7 @@ # include # include -# if __has_include(

) -# include

-# else -# include -# endif +# include namespace DB diff --git a/dbms/src/Functions/h3kRing.cpp b/dbms/src/Functions/h3kRing.cpp index 1b9ae132897..55571472c16 100644 --- a/dbms/src/Functions/h3kRing.cpp +++ b/dbms/src/Functions/h3kRing.cpp @@ -11,11 +11,7 @@ # include # include -# if __has_include(

) -# include

-# else -# include -# endif +# include namespace DB diff --git a/debian/pbuilder-hooks/B90test-server b/debian/pbuilder-hooks/B90test-server index e36c255f9fc..670b0c15fcc 100755 --- a/debian/pbuilder-hooks/B90test-server +++ b/debian/pbuilder-hooks/B90test-server @@ -8,6 +8,11 @@ PACKAGE_INSTALL=${PACKAGE_INSTALL=1} TEST_PORT_RANDOM=${TEST_PORT_RANDOM=1} if [ "${PACKAGE_INSTALL}" ]; then + #for PKG in $(ls /tmp/buildd/*.deb | sed -e's,.*/,,;s,_.*,,' ); do + # apt-get install -y --force-yes "$PKG" ||: + # apt-get remove -y "$PKG" ||: + #done + dpkg --auto-deconfigure -i /tmp/buildd/*.deb ||: apt install -y -f --allow-downgrades ||: dpkg -l | grep clickhouse ||: @@ -40,6 +45,8 @@ export CLICKHOUSE_PORT_TCP_SECURE=${CLICKHOUSE_PORT_TCP_SECURE:=9440} export CLICKHOUSE_PORT_HTTPS=${CLICKHOUSE_PORT_HTTPS:=8443} if [ "${TEST_CONNECT}" ]; then + sed -i 's/ssl_conf = ssl_sect/#ssl_conf = ssl_sect/g' /etc/ssl/openssl.cnf ||: + [ "${TEST_PORT_RANDOM}" ] && echo "${CLICKHOUSE_PORT_HTTP}${CLICKHOUSE_PORT_TCP}${CLICKHOUSE_PORT_INTERSERVER}" > /etc/clickhouse-server/config.d/port.xml if [ "${TEST_SSL}" ]; then From ecbc3c5f336f8a2f83e84229b9716b8656751e70 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sun, 16 Feb 2020 11:54:41 +0300 Subject: [PATCH 31/32] Fixed non-deterministic test --- .../00999_full_join_dup_keys_crash.reference | 12 ++--- .../00999_full_join_dup_keys_crash.sql | 48 +++++++++---------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.reference b/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.reference index 3d66698c45d..60b0f048cf3 100644 --- a/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.reference +++ b/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.reference @@ -1,20 +1,20 @@ +0 0 1 2 1 2 0 0 -0 0 1 2 - 0 0 1 2 - +0 0 1 2 1 2 0 0 -0 0 1 2 - 0 0 1 2 - -1 0 +1 - 0 - -1 0 +1 - 0 - @@ -48,13 +48,13 @@ - \N - +1 \N -1 - 1 - +1 \N -1 - 1 - diff --git a/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.sql b/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.sql index a04c4e7de1b..cd323a3cc6c 100644 --- a/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.sql +++ b/dbms/tests/queries/0_stateless/00999_full_join_dup_keys_crash.sql @@ -1,63 +1,63 @@ SET join_use_nulls = 0; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; SET join_use_nulls = 1; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT * FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a, foo.b, bar.a, bar.b; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT foo.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY foo.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.a = bar.b) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo FULL JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; -SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b); +SELECT bar.a FROM (SELECT 1 AS a, 2 AS b) AS foo RIGHT JOIN (SELECT 1 AS a, 2 AS b) AS bar ON (foo.b = bar.a) AND (foo.b = bar.b) ORDER BY bar.a; SELECT '-'; From dd7c0e13d867cc485a75c59d5aaa5a4c8a6bb119 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sun, 16 Feb 2020 13:45:15 +0300 Subject: [PATCH 32/32] Better build instruction #9054 --- docs/en/development/build.md | 104 ++++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 25 deletions(-) diff --git a/docs/en/development/build.md b/docs/en/development/build.md index 107116e6a7c..2e45a25517d 100644 --- a/docs/en/development/build.md +++ b/docs/en/development/build.md @@ -1,35 +1,13 @@ -# How to Build ClickHouse Release Package - -## Install Git and Pbuilder - -```bash -$ sudo apt-get update -$ sudo apt-get install git pbuilder debhelper lsb-release fakeroot sudo debian-archive-keyring debian-keyring -``` - -## Checkout ClickHouse Sources - -```bash -$ git clone --recursive --branch master https://github.com/ClickHouse/ClickHouse.git -$ cd ClickHouse -``` - -## Run Release Script - -```bash -$ ./release -``` - # How to Build ClickHouse for Development The following tutorial is based on the Ubuntu Linux system. With appropriate changes, it should also work on any other Linux distribution. Supported platforms: x86_64 and AArch64. Support for Power9 is experimental. -## Install Git, CMake and Ninja +## Install Git, CMake, Python and Ninja ```bash -$ sudo apt-get install git cmake ninja-build +$ sudo apt-get install git cmake python ninja-build ``` Or cmake3 instead of cmake on older systems. @@ -66,12 +44,12 @@ $ git clone --recursive git@github.com:ClickHouse/ClickHouse.git or ```bash $ git clone --recursive https://github.com/ClickHouse/ClickHouse.git -$ cd ClickHouse ``` ## Build ClickHouse ```bash +$ cd ClickHouse $ mkdir build $ cd build $ cmake .. @@ -83,4 +61,80 @@ To create an executable, run `ninja clickhouse`. This will create the `dbms/programs/clickhouse` executable, which can be used with `client` or `server` arguments. +# How to Build ClickHouse on Any Linux + +The build requires the following componenets: + +- Git (is used only to checkout the sources, it's not needed for build) +- CMake 3.10 or newer +- Ninja (recommended) or Make +- C++ compiler: gcc 9 or clang 8 or newer +- Linker: lld or gold (the classic GNU ld won't work) +- Python (is only used inside LLVM build and it is optional) + +If all the components are installed, you may build in the same way as the steps above. + +Example for Ubuntu Eoan: + +``` +sudo apt update +sudo apt install git cmake ninja-build g++ python +git clone --recursive https://github.com/ClickHouse/ClickHouse.git +mkdir build && cd build +cmake ../ClickHouse +ninja +``` + +Example for OpenSUSE Tumbleweed: + +``` +sudo zypper install git cmake ninja gcc-c++ python lld +git clone --recursive https://github.com/ClickHouse/ClickHouse.git +mkdir build && cd build +cmake ../ClickHouse +ninja +``` + +Example for CentOS 8: + +``` +sudo yum update +yum install git cmake make gcc-c++ python2 +git clone --recursive https://github.com/ClickHouse/ClickHouse.git +cmake ../ClickHouse +make +``` + +# You Don't Have to Build ClickHouse + +ClickHouse is available in pre-built binaries and packages. Binaries are portable and can be run on any Linux flavour. + +They are build for stable, prestable and testing releases as long as for every commit to master and for every pull request. + +To find the most fresh build from `master`, go to [commits page](https://github.com/ClickHouse/ClickHouse/commits/master), click on the first green check mark or red cross near commit, and click to the "Details" link right after "ClickHouse Build Check". + + +# How to Build ClickHouse Debian Package + +## Install Git and Pbuilder + +```bash +$ sudo apt-get update +$ sudo apt-get install git python pbuilder debhelper lsb-release fakeroot sudo debian-archive-keyring debian-keyring +``` + +## Checkout ClickHouse Sources + +```bash +$ git clone --recursive --branch master https://github.com/ClickHouse/ClickHouse.git +$ cd ClickHouse +``` + +## Run Release Script + +```bash +$ ./release +``` + + [Original article](https://clickhouse.tech/docs/en/development/build/)