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.
