diff --git a/package/collectd/Config.in b/package/collectd/Config.in index 697dc51f7e..67413ffde0 100644 --- a/package/collectd/Config.in +++ b/package/collectd/Config.in @@ -680,7 +680,6 @@ config BR2_PACKAGE_COLLECTD_GRPC depends on BR2_INSTALL_LIBSTDCPP # grpc -> protobuf depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # grpc -> protobuf depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # grpc -> libabseil-cpp - depends on BR2_HOST_GCC_AT_LEAST_4_9 # grpc -> host-libabseil-cpp depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS # grpc select BR2_PACKAGE_GRPC help diff --git a/package/grpc/0004-host-grpc-only-cpp-plugin.patch b/package/grpc/0004-host-grpc-only-cpp-plugin.patch new file mode 100644 index 0000000000..43fad7e3d6 --- /dev/null +++ b/package/grpc/0004-host-grpc-only-cpp-plugin.patch @@ -0,0 +1,223 @@ +From a1922eadfc87da3dd221ff631f94ddd4a8ee7049 Mon Sep 17 00:00:00 2001 +From: Thomas De Schampheleire +Date: Tue, 25 May 2021 14:55:23 +0200 +Subject: [PATCH] Add option to restrict building of (host-)grpc to + grpc_cpp_plugin only. + +This avoids unnecessary dependencies on big packages like libabseil-cpp and +others. + +Upstream-status: not accepted (see https://github.com/grpc/grpc/issues/25322) + +Signed-off-by: Thomas De Schampheleire +--- + CMakeLists.txt | 43 +++++++++++++++++++++++++++++++++++-------- + 1 file changed, 35 insertions(+), 8 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e8934a3e03..c2df332cc6 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -48,12 +48,16 @@ option(gRPC_BUILD_TESTS "Build tests" OFF) + option(gRPC_BUILD_CODEGEN "Build codegen" ON) + option(gRPC_BUILD_CSHARP_EXT "Build C# extensions" ON) + option(gRPC_BACKWARDS_COMPATIBILITY_MODE "Build libraries that are binary compatible across a larger number of OS and libc versions" OFF) ++option(gRPC_BUILD_PLUGIN_SUPPORT_ONLY "Build plugin support only" OFF) + + set(gRPC_INSTALL_default ON) + if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + # Disable gRPC_INSTALL by default if building as a submodule + set(gRPC_INSTALL_default OFF) + endif() ++if(gRPC_BUILD_PLUGIN_SUPPORT_ONLY) ++ set(gRPC_INSTALL_default OFF) ++endif() + set(gRPC_INSTALL ${gRPC_INSTALL_default} CACHE BOOL + "Generate installation target") + +@@ -367,6 +371,8 @@ add_custom_target(plugins + DEPENDS ${_gRPC_PLUGIN_LIST} + ) + ++if (NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) ++ + add_custom_target(tools_c + DEPENDS + check_epollexclusive +@@ -382,6 +388,8 @@ add_custom_target(tools_cxx + add_custom_target(tools + DEPENDS tools_c tools_cxx) + ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY ++ + protobuf_generate_grpc_cpp( + src/proto/grpc/channelz/channelz.proto + ) +@@ -1000,6 +1008,7 @@ if(gRPC_BUILD_TESTS) + DEPENDS buildtests_c buildtests_cxx) + endif() + ++if (NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) + + add_library(address_sorting + third_party/address_sorting/address_sorting.c +@@ -1051,6 +1060,8 @@ if(gRPC_INSTALL) + ) + endif() + ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY ++ + if(gRPC_BUILD_TESTS) + + add_library(end2end_nosec_tests +@@ -1313,6 +1324,8 @@ target_link_libraries(end2end_tests + + endif() + ++if(NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) ++ + add_library(gpr + src/core/lib/gpr/alloc.cc + src/core/lib/gpr/atm.cc +@@ -2106,6 +2119,8 @@ if(gRPC_INSTALL) + ) + endif() + ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY ++ + if(gRPC_BUILD_CSHARP_EXT) + + add_library(grpc_csharp_ext SHARED +@@ -2288,6 +2303,8 @@ endif() + + endif() + ++if(NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) ++ + add_library(grpc_unsecure + src/core/ext/filters/census/grpc_context.cc + src/core/ext/filters/client_channel/backend_metric.cc +@@ -2650,6 +2667,8 @@ if(gRPC_INSTALL) + ) + endif() + ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY ++ + if(gRPC_BUILD_TESTS) + + if(gRPC_BUILD_CODEGEN) +@@ -2717,6 +2736,8 @@ endif() + + endif() + ++if(NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) ++ + add_library(grpc++ + src/cpp/client/channel_cc.cc + src/cpp/client/client_callback.cc +@@ -3134,6 +3155,7 @@ if(gRPC_INSTALL) + ) + endif() + ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY + + if(gRPC_BUILD_CODEGEN) + add_library(grpc++_reflection +@@ -3374,6 +3396,8 @@ target_link_libraries(grpc++_test_util + + endif() + ++if(NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) ++ + add_library(grpc++_unsecure + src/cpp/client/channel_cc.cc + src/cpp/client/client_callback.cc +@@ -3656,6 +3680,7 @@ if(gRPC_INSTALL) + ) + endif() + ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY + + add_library(grpc_plugin_support + src/compiler/cpp_generator.cc +@@ -3715,7 +3740,7 @@ foreach(_hdr + endforeach() + + +-if(gRPC_INSTALL) ++if(gRPC_INSTALL OR gRPC_BUILD_PLUGIN_SUPPORT_ONLY) + install(TARGETS grpc_plugin_support EXPORT gRPCTargets + RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} + LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} +@@ -3795,6 +3820,8 @@ endif() + + endif() + ++if(NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) ++ + add_library(upb + third_party/upb/upb/decode_fast.c + third_party/upb/upb/decode.c +@@ -3852,8 +3879,6 @@ if(gRPC_INSTALL) + ) + endif() + +- +- + add_executable(check_epollexclusive + test/build/check_epollexclusive.c + ) +@@ -3906,8 +3931,6 @@ target_link_libraries(gen_hpack_tables + gpr + ) + +- +- + add_executable(gen_legal_metadata_characters + tools/codegen/core/gen_legal_metadata_characters.cc + ) +@@ -3958,6 +3981,8 @@ target_link_libraries(gen_percent_encoding_tables + ${_gRPC_ALLTARGETS_LIBRARIES} + ) + ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY ++ + + if(gRPC_BUILD_TESTS) + +@@ -10722,7 +10747,7 @@ target_link_libraries(grpc_cli + + + endif() +-if(gRPC_BUILD_CODEGEN AND gRPC_BUILD_GRPC_CPP_PLUGIN) ++if(gRPC_BUILD_GRPC_CPP_PLUGIN) + + add_executable(grpc_cpp_plugin + src/compiler/cpp_plugin.cc +@@ -10752,7 +10777,7 @@ target_link_libraries(grpc_cpp_plugin + + + +-if(gRPC_INSTALL) ++if(gRPC_INSTALL OR gRPC_BUILD_PLUGIN_SUPPORT_ONLY) + install(TARGETS grpc_cpp_plugin EXPORT gRPCTargets + RUNTIME DESTINATION ${gRPC_INSTALL_BINDIR} + LIBRARY DESTINATION ${gRPC_INSTALL_LIBDIR} +@@ -15420,7 +15445,7 @@ endif() + + + +- ++if (NOT gRPC_BUILD_PLUGIN_SUPPORT_ONLY) + + if(gRPC_INSTALL) + install(EXPORT gRPCTargets +@@ -15517,3 +15542,5 @@ generate_pkgconfig( + "-lgrpc++_unsecure -labsl_statusor -labsl_status -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_synchronization -labsl_time -labsl_time_zone -labsl_civil_time -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_malloc_internal -labsl_stacktrace -labsl_debugging_internal -labsl_exponential_biased -labsl_cord -labsl_str_format_internal -labsl_hash -labsl_bad_variant_access -labsl_bad_optional_access -labsl_strings -labsl_strings_internal -labsl_base -labsl_spinlock_wait -labsl_int128 -labsl_city -labsl_throw_delegate -labsl_raw_logging_internal -labsl_log_severity" + "" + "grpc++_unsecure.pc") ++ ++endif() # gRPC_BUILD_PLUGIN_SUPPORT_ONLY +-- +2.26.3 + diff --git a/package/grpc/Config.in b/package/grpc/Config.in index d1bf0d078d..ad3ddbcf19 100644 --- a/package/grpc/Config.in +++ b/package/grpc/Config.in @@ -4,7 +4,6 @@ config BR2_PACKAGE_GRPC depends on BR2_TOOLCHAIN_HAS_THREADS # protobuf, re2 depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # protobuf depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # protobuf, re2, libabseil-cpp - depends on BR2_HOST_GCC_AT_LEAST_4_9 # host-libabseil-cpp depends on !BR2_STATIC_LIBS # protobuf, libabseil-cpp depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS @@ -20,10 +19,9 @@ config BR2_PACKAGE_GRPC http://github.com/grpc/grpc -comment "grpc needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.9, host gcc >= 4.9" +comment "grpc needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.9" depends on BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS depends on BR2_TOOLCHAIN_HAS_SYNC_4 || BR2_TOOLCHAIN_HAS_ATOMIC depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS \ - || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 \ - || !BR2_HOST_GCC_AT_LEAST_4_9 + || BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS diff --git a/package/grpc/grpc.mk b/package/grpc/grpc.mk index 2e8bc5049f..5d8201f12f 100644 --- a/package/grpc/grpc.mk +++ b/package/grpc/grpc.mk @@ -14,8 +14,7 @@ GRPC_INSTALL_STAGING = YES # Need to use host grpc_cpp_plugin during cross compilation. GRPC_DEPENDENCIES = c-ares host-grpc libabseil-cpp openssl protobuf re2 zlib -HOST_GRPC_DEPENDENCIES = host-c-ares host-libabseil-cpp host-openssl host-protobuf \ - host-re2 host-zlib +HOST_GRPC_DEPENDENCIES = host-protobuf # gRPC_CARES_PROVIDER=package won't work because it requires c-ares to have # installed a cmake config file, but buildroot uses c-ares' autotools build, @@ -70,14 +69,26 @@ GRPC_CONF_OPTS += \ -DCMAKE_C_FLAGS="$(GRPC_CFLAGS)" \ -DCMAKE_CXX_FLAGS="$(GRPC_CXXFLAGS)" +# For host-grpc, we only need the 'grpc_cpp_plugin' binary, which is needed for +# target grpc compilation. To avoid unnecessary build steps and host +# dependencies, supply enough options to pass the configure checks without +# requiring other host packages, unless those needed by grpc_cpp_plugin. HOST_GRPC_CONF_OPTS = \ - -DgRPC_ABSL_PROVIDER=package \ - -D_gRPC_CARES_LIBRARIES=cares \ - -DgRPC_CARES_PROVIDER=none \ -DgRPC_PROTOBUF_PROVIDER=package \ - -DgRPC_RE2_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ - -DgRPC_ZLIB_PROVIDER=package + -DgRPC_ABSL_PROVIDER=none \ + -DgRPC_CARES_PROVIDER=none \ + -DgRPC_RE2_PROVIDER=none \ + -DgRPC_SSL_PROVIDER=none \ + -DgRPC_ZLIB_PROVIDER=none \ + -DgRPC_BUILD_CODEGEN=OFF \ + -DgRPC_BUILD_CSHARP_EXT=OFF \ + -DgRPC_BUILD_PLUGIN_SUPPORT_ONLY=ON \ + -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF \ + -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF $(eval $(cmake-package)) $(eval $(host-cmake-package))