Hi, thanks for the reply - we've got a simple buildroot mk file down to:

################################################################################
#
# grpc
#
################################################################################

GRPC_CUSTOM_VERSION = v1.12.0
GRPC_CUSTOM_SITE = https://github.com/grpc/grpc.git
GRPC_CUSTOM_SITE_METHOD = git
GRPC_CUSTOM_LICENSE = BSD-3-Clause
GRPC_CUSTOM_LICENSE_FILES = LICENSE

GRPC_CUSTOM_DEPENDENCIES = gflags gtest c-ares openssl protobuf zlib

GRPC_CUSTOM_INSTALL_STAGING = YES

GRPC_CUSTOM_MAKE_ENV = \
$(TARGET_MAKE_ENV) \
CC="$(TARGET_CC)" \
CXX="$(TARGET_CXX)" \
LD="$(TARGET_CC)" \
CFLAGS="$(TARGET_CFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS)" \
STRIP="$(TARGET_STRIP)"

GRPC_CUSTOM_MAKE_OPTS = \
PROTOC="$(HOST_DIR)/usr/bin/protoc"

GRPC_CUSTOM_INSTALL_TARGET_OPTS = \
prefix="$(TARGET_DIR)/usr"

GRPC_CUSTOM_INSTALL_STAGING_OPTS = \
prefix="$(STAGING_DIR)/usr"

define GRPC_CUSTOM_BUILD_CMDS
$(GRPC_CUSTOM_MAKE_ENV) $(MAKE) $(GRPC_CUSTOM_MAKE_OPTS) -C $(@D) \
  static
endef

define GRPC_CUSTOM_INSTALL_STAGING_CMDS
$(GRPC_CUSTOM_MAKE_ENV) $(MAKE) $(GRPC_CUSTOM_INSTALL_STAGING_OPTS) -C
$(@D) \
  install-headers install-static_c install-static_cxx
endef

define GRPC_CUSTOM_INSTALL_TARGET_CMDS
$(GRPC_CUSTOM_MAKE_ENV) $(MAKE) $(GRPC_CUSTOM_INSTALL_TARGET_OPTS) -C $(@D)
\
  install-static_c install-static_cxx
endef

$(eval $(generic-package))

My understanding is that this should be calling *make static* against
grpc's root Makefile with the env setup. The target compiling seems to go
fine:

/piksi_buildroot/buildroot/output/host/bin/arm-linux-g++
-I/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include
-pthread   -Ithird_party/googletest/googletest/include
-Ithird_party/googletest/googlemock/include
-I/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include
 -Ithird_party/address_sorting/include -g -Wall -Wextra -Werror
-Wno-long-long -Wno-unused-parameter -DOSATOMIC_USE_INLINED=1
-Wno-deprecated-declarations -O2 -Wframe-larger-than=16384 -fPIC -I.
-Iinclude
-I/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/gens
-DPB_FIELD_16BIT -DNDEBUG -DINSTALL_PREFIX=\"/usr/local\"
 
-I/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include
 
-I/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include
 -std=c++11   -MMD -MF
/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/objs/opt/src/cpp/common/auth_property_iterator.dep
-c -o
/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/objs/opt/src/cpp/common/auth_property_iterator.o
src/cpp/common/auth_property_iterator.cc

But then we end up running into issues once we move to host compiling
around the plugins

[HOSTCXX] Compiling src/compiler/cpp_plugin.cc
[HOSTCXX] Compiling src/compiler/node_plugin.cc
[HOSTCXX] Compiling src/compiler/csharp_plugin.cc
[HOSTCXX] Compiling src/compiler/objective_c_plugin.cc
[HOSTCXX] Compiling src/compiler/php_plugin.cc
[HOSTCXX] Compiling src/compiler/python_plugin.cc
[HOSTCXX] Compiling src/compiler/ruby_plugin.cc
[HOSTLD]  Linking
/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/bins/opt/grpc_cpp_plugin

And have tried any number of settings get them to work. For instance, with
the above configuration we error on host linking:

c++
-L/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr//lib
 
-Wl,-rpath,/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr//lib
 -flto -flto -g  -fPIC -Llibs/opt -pthread
 
-L/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib
 
-L/piksi_buildroot/buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib
 
/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/objs/opt/src/compiler/cpp_plugin.o
/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/libs/opt/libgrpc_plugin_support.a
-lprotoc -lprotobuf -ldl -lrt -lm -lpthread -lz -lcares  -lprotoc
-lprotobuf -o
/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/bins/opt/grpc_cpp_plugin

is there some ENV we're missing here or should add to help things out?
Thanks for any help or advice!

Mark

On Thu, Aug 30, 2018 at 9:34 AM, Nicolas Noble <[email protected]> wrote:

> Yes, it's definitely doable to cross compile for ARM - in fact we do it
> regularly for some of our prebuilt binaries.
>
> Now each environment and case is different. What steps are you following
> exactly?
>
> On Thu, Aug 30, 2018 at 9:05 AM Mark Fine <[email protected]> wrote:
>
>> Hi!
>>
>> We're having issues cross compiling gRPC in buildroot. There's been some
>> prior work on getting gRPC into buildroot:
>>
>> https://gfiber.googlesource.com/buildroot/+/refs/heads/
>> master/package/grpc
>> http://lists.busybox.net/pipermail/buildroot/2017-April/189714.html
>> https://patchwork.ozlabs.org/patch/917779/
>>
>> but nothing seems to have made it to upstream. In particular, we're
>> running into issues around host compiling having target libraries included
>> and linked against. Here's an example of host linking against target
>> libraries:
>>
>> c++ -L/piksi_buildroot/buildroot/output/host/bin/../arm-
>> buildroot-linux-gnueabihf/sysroot/usr//lib   -Wl,-rpath,/piksi_buildroot/
>> buildroot/output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr//lib
>>  -flto -flto -g  -fPIC -Llibs/opt -pthread     -L/piksi_buildroot/buildroot/
>> output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/lib
>>  -L/piksi_buildroot/buildroot/output/host/bin/../arm-
>> buildroot-linux-gnueabihf/sysroot/usr/lib   /piksi_buildroot/buildroot/
>> output/build/grpc_custom-v1.12.0/objs/opt/src/compiler/cpp_plugin.o
>> /piksi_buildroot/buildroot/output/build/grpc_custom-v1.
>> 12.0/libs/opt/libgrpc_plugin_support.a  -lprotoc -lprotobuf -ldl -lrt
>> -lm -lpthread -lz -lcares  -lprotoc -lprotobuf -o
>> /piksi_buildroot/buildroot/output/build/grpc_custom-v1.
>> 12.0/bins/opt/grpc_cpp_plugin
>>
>> Here's an example of host including target libraries:
>>
>> /usr/bin/g++ -std=c++11   -I/piksi_buildroot/buildroot/
>> output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include
>> -pthread   -Ithird_party/googletest/googletest/include
>> -Ithird_party/googletest/googlemock/include -I/piksi_buildroot/buildroot/
>> output/host/bin/../arm-buildroot-linux-gnueabihf/sysroot/usr/include
>>  -Ithird_party/address_sorting/include -g -Wall -Wextra -Werror
>> -Wno-long-long -Wno-unused-parameter -DOSATOMIC_USE_INLINED=1
>> -Wno-deprecated-declarations -O2 -Wframe-larger-than=16384 -fPIC -I.
>> -Iinclude -I/piksi_buildroot/buildroot/output/build/grpc_custom-v1.12.0/gens
>> -DPB_FIELD_16BIT -DNDEBUG -DINSTALL_PREFIX=\"/usr/local\"
>>  -I/piksi_buildroot/buildroot/output/host/bin/../arm-
>> buildroot-linux-gnueabihf/sysroot/usr/include
>>  -I/piksi_buildroot/buildroot/output/host/bin/../arm-
>> buildroot-linux-gnueabihf/sysroot/usr/include   -MMD -MF
>> /piksi_buildroot/buildroot/output/build/grpc_custom-v1.
>> 12.0/objs/opt/src/compiler/cpp_generator.dep -c -o
>> /piksi_buildroot/buildroot/output/build/grpc_custom-v1.
>> 12.0/objs/opt/src/compiler/cpp_generator.o src/compiler/cpp_generator.cc
>> In file included from /piksi_buildroot/buildroot/output/host/bin/../arm-
>> buildroot-linux-gnueabihf/sysroot/usr/include/features.h:447:0,
>>                  from /usr/include/x86_64-linux-gnu/
>> c++/6/bits/os_defines.h:39,
>>                  from /usr/include/x86_64-linux-gnu/
>> c++/6/bits/c++config.h:507,
>>                  from /usr/include/c++/6/bits/stl_algobase.h:59,
>>                  from /usr/include/c++/6/bits/stl_tree.h:63,
>>                  from /usr/include/c++/6/map:60,
>>                  from src/compiler/cpp_generator.cc:19:
>> /piksi_buildroot/buildroot/output/host/bin/../arm-
>> buildroot-linux-gnueabihf/sysroot/usr/include/gnu/stubs.h:7:29: fatal
>> error: gnu/stubs-soft.h: No such file or directory
>>  # include <gnu/stubs-soft.h>
>>                              ^
>>
>> Has anyone had success cross compiling gRPC on buildroot? Or just cross
>> compiling gRPC on ARM? The interactions between the host and target
>> compiling with and without the GRPC_CROSS_COMPILE flag are causing us
>> issues, especially around the host plugins. Thanks for any help!
>>
>> Mark
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/grpc-io.
>> To view this discussion on the web visit https://groups.google.com/d/
>> msgid/grpc-io/6ef7f44c-60f9-4afe-92ff-2ba139febf12%40googlegroups.com
>> <https://groups.google.com/d/msgid/grpc-io/6ef7f44c-60f9-4afe-92ff-2ba139febf12%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CANRZ_fmJjG9fNGv6G56YSTE%2B7CBDkaU6L1UuvBQxUduT2o3YwA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to