From mboxrd@z Thu Jan 1 00:00:00 1970 From: Charles Hardin Date: Thu, 28 Jun 2018 21:45:32 +0000 Subject: [Buildroot] [PATCH v2 4/5] grpc: new package In-Reply-To: <20180628233612.26e24014@windsurf> References: <20180521175310.18563-1-charles.hardin@storagecraft.com> <20180521175310.18563-5-charles.hardin@storagecraft.com> <20180628233612.26e24014@windsurf> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Hmm?. > On Jun 28, 2018, at 2:36 PM, Thomas Petazzoni wrote: > > Hello Charles, > > On Mon, 21 May 2018 10:53:09 -0700, charles.hardin at storagecraft.com > wrote: >> From: Charles Hardin >> >> add the gRPC package from Google's github repo. This is >> currently just installing the C and C++ libraries on the >> target installation for now. Some effort could be made >> to add the python bindings as a subsequent patch. >> >> This also adds a patch to specify the protoc to use since >> that is provided by buildroot and not the host in addition >> to overriding the ldconfig command since that doesn't apply >> to the buildroot compile. >> >> NOTE: This doesn't add the python or any other bindings >> >> Signed-off-by: Charles Hardin > > I tried this here, and unfortunately it doesn't build. > Ok - never tried ?arm? builds - only mips and x86, so this is likely going to be a bit more involved. But, I think this is a HOSTCXX problem - what is that version because I barely recall that I have to build the gRPC proto gen tools on the host to generate the stubs for the cross. It?s entirely possible I just assumed the host toolchain will work - this is what we use on the host. > vagrant at dev:~/buildroot$ cc --version > cc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 > Copyright (C) 2015 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > vagrant at dev:~/buildroot$ c++ --version > c++ (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 > Copyright (C) 2015 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > So, it looks like it is a gcc 7 build on this host side? > First, the CFLAGS/CXXFLAGS/LDFLAGS passed as make options were > completely overriding the ones from GRPC makefile, causing a build > failure. I fixed that with: > > diff --git a/package/grpc/grpc.mk b/package/grpc/grpc.mk > index 738cd7f851..da5def4ceb 100644 > --- a/package/grpc/grpc.mk > +++ b/package/grpc/grpc.mk > @@ -15,7 +15,8 @@ HOST_GRPC_DEPENDENCIES = host-c-ares host-protobuf host-openssl > > GRPC_INSTALL_STAGING = YES > > -GRPC_CROSS_MAKE_OPTS_BASE = \ > +GRPC_MAKE_ENV = \ > + $(TARGET_MAKE_ENV) \ > GRPC_CROSS_COMPILE="true" \ > LDCONFIG=/bin/true \ > HOST_CC="$(HOSTCC)" \ > @@ -34,15 +35,12 @@ GRPC_CROSS_MAKE_OPTS_BASE = \ > STRIP=/bin/true > > GRPC_MAKE_OPTS = \ > - $(GRPC_CROSS_MAKE_OPTS_BASE) \ > PROTOC="$(HOST_DIR)/usr/bin/protoc" > > GRPC_INSTALL_TARGET_OPTS = \ > - $(GRPC_CROSS_MAKE_OPTS_BASE) \ > prefix="$(TARGET_DIR)/usr" > > GRPC_INSTALL_STAGING_OPTS = \ > - $(GRPC_CROSS_MAKE_OPTS_BASE) \ > prefix="$(STAGING_DIR)/usr" > > ifeq ($(BR2_SHARED_LIBS),y) > @@ -60,17 +58,17 @@ GRPC_INSTALL_TARGETS = install-shared_c install-shared_cxx > endif > > define GRPC_BUILD_CMDS > - $(TARGET_MAKE_ENV) $(MAKE) $(GRPC_MAKE_OPTS) -C $(@D) \ > + $(GRPC_MAKE_ENV) $(MAKE) $(GRPC_MAKE_OPTS) -C $(@D) \ > $(GRPC_BUILD_TARGETS) > endef > > define GRPC_INSTALL_STAGING_CMDS > - $(TARGET_MAKE_ENV) $(MAKE) $(GRPC_INSTALL_STAGING_OPTS) -C $(@D) \ > + $(GRPC_MAKE_ENV) $(MAKE) $(GRPC_INSTALL_STAGING_OPTS) -C $(@D) \ > $(GRPC_STAGING_TARGETS) > endef > > define GRPC_INSTALL_TARGET_CMDS > - $(TARGET_MAKE_ENV) $(MAKE) $(GRPC_INSTALL_TARGET_OPTS) -C $(@D) \ > + $(GRPC_MAKE_ENV) $(MAKE) $(GRPC_INSTALL_TARGET_OPTS) -C $(@D) \ > $(GRPC_INSTALL_TARGETS) > endef > > With that in place, the GRPC build moved on, but failed at a later point, with: > > [HOSTCXX] Compiling src/compiler/cpp_generator.cc > [HOSTCXX] Compiling src/compiler/csharp_generator.cc > [HOSTCXX] Compiling src/compiler/node_generator.cc > In file included from /usr/include/c++/7/ext/string_conversions.h:41:0, > from /usr/include/c++/7/bits/basic_string.h:6349, > from /usr/include/c++/7/string:52, > from /usr/include/c++/7/stdexcept:39, > from /usr/include/c++/7/array:39, > from /usr/include/c++/7/tuple:39, > from /usr/include/c++/7/bits/stl_map.h:63, > from /usr/include/c++/7/map:61, > from src/compiler/cpp_generator.cc:19: > /usr/include/c++/7/cstdlib:131:11: error: ?::at_quick_exit? has not been declared > using ::at_quick_exit; > ^~~~~~~~~~~~~ > /usr/include/c++/7/cstdlib:154:11: error: ?::quick_exit? has not been declared > using ::quick_exit; > ^~~~~~~~~~ > [HOSTCXX] Compiling src/compiler/objective_c_generator.cc > In file included from /usr/include/c++/7/ext/string_conversions.h:41:0, > from /usr/include/c++/7/bits/basic_string.h:6349, > from /usr/include/c++/7/string:52, > from /usr/include/c++/7/stdexcept:39, > from /usr/include/c++/7/array:39, > from /usr/include/c++/7/tuple:39, > from /usr/include/c++/7/bits/stl_map.h:63, > from /usr/include/c++/7/map:61, > from src/compiler/csharp_generator.cc:20: > /usr/include/c++/7/cstdlib:131:11: error: ?::at_quick_exit? has not been declared > using ::at_quick_exit; > ^~~~~~~~~~~~~ > /usr/include/c++/7/cstdlib:154:11: error: ?::quick_exit? has not been declared > using ::quick_exit; > ^~~~~~~~~~ > In file included from ./src/compiler/cpp_generator.h:26:0, > from src/compiler/cpp_generator.cc:21: > /usr/include/c++/7/memory: In function ?void* std::align(std::size_t, std::size_t, void*&, std::size_t&)?: > /usr/include/c++/7/memory:116:58: error: cast from ?void*? to ?uintptr_t {aka unsigned int}? loses precision [-fpermissive] > const auto __intptr = reinterpret_cast(__ptr); > > And more of those issues. Here is the defconfig I have used: > > BR2_arm=y > BR2_TOOLCHAIN_EXTERNAL=y > BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y > BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y > BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2018.02-891-g046c5e2.tar.bz2" > BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y > BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1=y > BR2_TOOLCHAIN_EXTERNAL_LOCALE=y > # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set > BR2_TOOLCHAIN_EXTERNAL_CXX=y > BR2_INIT_NONE=y > BR2_SYSTEM_BIN_SH_NONE=y > # BR2_PACKAGE_BUSYBOX is not set > BR2_PACKAGE_GRPC=y > # BR2_TARGET_ROOTFS_TAR is not set > > Could you have a look ? > > I'll also do a regular review of the package in a separate e-mail, so > that you can take into account other comments at the same time. > > Thanks! > > Thomas > -- > Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) > Embedded Linux and Kernel engineering > https://bootlin.com