nativelibs4java / BridJ

BridJ: blazing fast Java / C / C++ interop
https://code.google.com/archive/p/bridj/
Other
297 stars 77 forks source link

Problem to build BridJ on Raspberry Pi and Cubietruck #43

Open ochafik opened 9 years ago

ochafik commented 9 years ago

From @jo-do on September 29, 2014 17:30

Hello,

I try to rebuild BridJ's native library for Raspberry Pi (Raspian, Linux raspberrypi 3.12.28+ #709 PREEMPT Mon Sep 8 15:28:00 BST 2014 armv6l GNU/Linux, (gnueabihf)) , using the wiki page. After I applied the BridJ-specific patches (and after CleanNative), I run ./BuildNative and get an error:

[...]
cd dyncallback && make all
make[1]: Entering directory '/home/pi/bridj/nativelibs4java/libraries/BridJ/dyncall/dyncall/dyncallback'
cc -fPIC -I/home/pi/bridj2/nativelibs4java/libraries/BridJ/dyncall/dyncall/././dyncallback/../dyncall    -c -o dyncall_alloc_wx.o dyncall_alloc_wx.c
cc -fPIC -I/home/pi/bridj2/nativelibs4java/libraries/BridJ/dyncall/dyncall/././dyncallback/../dyncall    -c -o dyncall_args.o dyncall_args.c
In file included from dyncall_args.c:36:0:
dyncall_args_arm32_arm_armhf.c: In function ‘arm_float’:
dyncall_args_arm32_arm_armhf.c:62:8: error: ‘DCArgs’ has no member named ‘s’
dyncall_args_arm32_arm_armhf.c:63:22: error: ‘DCArgs’ has no member named ‘S’
dyncall_args_arm32_arm_armhf.c:63:27: error: ‘DCArgs’ has no member named ‘s’
dyncall_args_arm32_arm_armhf.c:64:10: error: ‘DCArgs’ has no member named ‘d’
dyncall_args_arm32_arm_armhf.c:64:17: error: ‘DCArgs’ has no member named ‘s’
dyncall_args_arm32_arm_armhf.c:65:8: error: ‘DCArgs’ has no member named ‘d’
dyncall_args_arm32_arm_armhf.c:65:16: error: ‘DCArgs’ has no member named ‘s’
dyncall_args_arm32_arm_armhf.c:67:8: error: ‘DCArgs’ has no member named ‘s’
dyncall_args_arm32_arm_armhf.c:67:15: error: ‘DCArgs’ has no member named ‘d’
dyncall_args_arm32_arm_armhf.c: In function ‘arm_double’:
dyncall_args_arm32_arm_armhf.c:77:8: error: ‘DCArgs’ has no member named ‘d’
dyncall_args_arm32_arm_armhf.c:79:36: error: ‘DCArgs’ has no member named ‘S’
dyncall_args_arm32_arm_armhf.c:79:41: error: ‘DCArgs’ has no member named ‘d’
dyncall_args_arm32_arm_armhf.c:80:6: error: ‘DCArgs’ has no member named ‘d’
dyncall_args_arm32_arm_armhf.c:81:12: error: ‘DCArgs’ has no member named ‘s’
dyncall_args_arm32_arm_armhf.c:85:8: error: ‘DCArgs’ has no member named ‘s’
dyncall_args_arm32_arm_armhf.c:85:15: error: ‘DCArgs’ has no member named ‘d’
dyncall_args_arm32_arm_armhf.c:89:6: error: ‘DCArgs’ has no member named ‘s’
<builtin>: recipe for target 'dyncall_args.o' failed
make[1]: *** [dyncall_args.o] Error 1
make[1]: Leaving directory '/home/pi/bridj2/nativelibs4java/libraries/BridJ/dyncall/dyncall/dyncallback'
/home/pi/bridj2/nativelibs4java/libraries/BridJ/dyncall/dyncall/././Makefile.generic:7: recipe for target 'libdyncallback' failed
make: *** [libdyncallback] Error 2
Failed building dyncall

(With git revision 79b7deb612f7bd9b1602a48d917fdd5df9920bec)

It seems that the wrong header in dyncall.diff, line 141, is included. After replacing +#include "dyncall_args_arm32_arm.h" with +#include "dyncall_args_arm32_arm_armhf.h" everything goes fine. (Or, alternatively, alter the header include in dyncallback/dyncall_args_arm32_arm_armhf.c after patching.)

mvn clean install -DskipTests ends with Build success.

However, when I test it via mvn test, I get many many errors and failures, especially segmentation faults! I append the output of mvn -X test, see file test_result_only_bridj_native_build.txt. If I build BridJ only (but not the native library) the test result is far better: No segmentation faults, but the Java Virtual Machine often crashes (please see again the output of this test run, file test_result_only_bridj_no_native.txt.)

I tried all this with java openjdk-6 version "1.6.0_32".

Does anybode have an idea what the problem is? Is there anything that I have to do in addition to build Bridj? (I.e. install software.) @ochafik Would it be possible that you update the binaries for Linux armv6l, maybe its getting better with your dyncall_callback_arm32_arm_armhf included?

I did the same procedure on the Cubietruck (Linux Cubian 3.4.75-sun7i #36 SMP PREEMPT Mon Feb 10 02:47:28 CST 2014 armv7l GNU/Linux, Processor: ARMv7 Processor rev 4 (v7l), Features: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt, (also gnueabihf)). Patching and building the BridJ native libraries goes without errors, because dyncall/dyncallback/dyncall_args.c includes dyncall_args_arm32_thumb.c instead of dyncall_args_arm32_arm_armhf.c. But rebuilding BridJ's native library and BridJ leads basically to the same errors as above, except that in the raspberry pi case I get some kind of benchmark output in addition:

[...]
# Fields read/write :
# Optimal took 135015.559074 millis to read/write 1000000 simple structs : 135.015559074 microsecond per struct
# BridJ took 29599.200284 millis to read/write 1000000 simple structs : 29.599200284000002 microsecond per struct
[...]

Best regards, thank you in advance for your help!

Jonas

Copied from original issue: ochafik/nativelibs4java#531