Hello, I'm using [Yocto 2.6.1](https://www.yoctoproject.org/) with [meta-raspberrypi](http://git.yoctoproject.org/cgit/cgit.cgi/meta-raspberrypi) layer to build the image for RaspberryPi Zero.
The gcc is `8.2.0` and the `node` is `8.12.0`. The `grpc-node` is a dependency for a Node package I'm building. However, I'm now focused on getting the `grpc-node` to work. It is the only package which contains native code to be compiled. The precompiled version is for `armv7` as explained here: https://github.com/googleapis/nodejs-speech/issues/12 I'm well aware of the issue with `node-pre-gyp` mentioned there: https://github.com/mapbox/node-pre-gyp/issues/348 However, I think that it might not be the problem in my case since I'm building my own toolchain, specifically tweaked for the target (RPI 0) architecture. In fact, I'm already getting the `armv6` binary crosscompiled: ``` Attribute Section: aeabi File Attributes Tag_CPU_name: "6" Tag_CPU_arch: v6 Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: VFPv2 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_VFP_args: VFP registers Tag_CPU_unaligned_access: v6 ``` While the `arm` precompiled binary from the npm registry looks like: ``` Attribute Section: aeabi File Attributes Tag_CPU_name: "7-A" Tag_CPU_arch: v7 Tag_CPU_arch_profile: Application Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-2 Tag_FP_arch: VFPv3-D16 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_VFP_args: VFP registers Tag_CPU_unaligned_access: v6 ``` The runtime error I'm getting right now (`Illegall instruction` error is gone) is: ``` root@raspberrypi0-wifi:~# node > require('/usr/lib/node/firebase/node_modules/grpc') Error: /usr/lib/node/firebase/node_modules/grpc/src/node/extension_binary/node-v57-linux-arm-glibc/grpc_node.node: undefined symbol: CRYPTO_set_locking_callback at Object.Module._extensions..node (module.js:682:18) at Module.load (module.js:566:32) at tryModuleLoad (module.js:506:12) at Function.Module._load (module.js:498:3) at Module.require (module.js:597:17) at require (internal/module.js:11:18) ``` However, both pre-compiled (for `armv7`) and the cross-compiled (for `armv6`) binaries seem to have this symbol undefined: precompiled: ``` 25: 00000000 0 NOTYPE GLOBAL DEFAULT UND CRYPTO_set_locking_callba ``` cross-compiled: ``` 27: 00000000 0 NOTYPE GLOBAL DEFAULT UND CRYPTO_set_locking_callba ``` Do I need anything more than the `grpc_node.node` binary correctly compiled for the target architecture? Now I'm wondering what's the OpenSSL requirement of the `grpc`. Does it require OpenSSL at compile time / at runtime? I can see that there is an option for `BoringSSL` (I assume linked statically?) or to use the `OpenSSL` dynamic library from the system - is that correct? How one can choose which one to use? What would be the "default" setting for the Node package on ARM Linux system, which depends on the `grpc-node` package? As a side note, I faced some issues as descriebd in various GCC 8 issues like this one: https://github.com/grpc/grpc/issues/18689 and silenced them down with gcc flags: `"-Wno-class-memaccess -Wno-ignored-qualifiers -Wno-cast-function-type"` to keep going. Please note that I'm far from Node expert / dev. I work on various build systems, mostly in embedded area. I'm willing to help in resolving the cross-compilation issues. However, I would need to get some better understanding of how the `grpc` is being built - especially it's requirements on the OpenSSL. Thanks for any feedback -- 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/26285314-420b-41cf-905d-1dd9eac8632a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
