Problem compiling OLA

Rui Barreiros rbarreiros at gmail.com
Mon May 16 12:56:26 CEST 2016


Hello Ronny,

I compiled everything with the latest patches to the devel git branch, 
and everything is working perfectly, all plugins I tested are working 
(couldn't test all of them) and I enabled most of them, at least the 
useful ones.
Attached is a patch against the last git revision on the devel branch, 
to compile OSC plugin, which requires liblo the patch adds lo-lib dir 
with Makefile and Rules.mk, it doesn't add the liblo package since I 
opted to download it from git instead of using the latest stable version.

I am having a problem on OLA though, but that's regarding the 
development branch, I'm cloning my own repo which is a fork from the 
original repo, I do the same as liblo for extracting

$(PKG_VER)/.nard-extract: $(PKG_VER)
         if test -e "$(dir $@)"; then cd $(dir $@) ; git pull; else git 
clone /home/myuser/Projects/ola/ola $(dir $@);fi

I don't do an autoreconf right after because it's done in the configure 
target, the rest of the makefile is pretty much the same as yours, it 
runs the autoreconf, then the configure, then does the echo's of the 
protoc plugin fix, but when the make starts, it re-runs configure, 
rewrites the Makefiles, and the echo's are lost, so it doesn't compile 
complaining the plugin is of the wrong arch obviously, know any easy way 
for me to prevent this ? or am I doing something wrong ?

Best regards,
Rui Barreiros

On 13-05-2016 10:53, Ronny Nilsson wrote:
> Hi Rui
> I gave OLA a spin and you are quite right. OLA cross compiling is effectively
> broken! Several  patches was necessary to make it build... I've included it
> in my git devel branch now; would you like to check that it actually works?
> OLA starts fine, but I have no DMX HW for testing. Most of the plugins and
> examples should be available too.
>
> I have only tried Debian 8 as build PC so far. It works if you install these
> packages: libprotoc-dev and protobuf-compiler. Then you don't need to build
> everything twice. :)
>
> Add these lines to your product recipe:
> 	PKGS_APPS += protobuf/protobuf-2.6.1
> 	PKGS_APPS += uuid-lib/uuid-lib-1.0.3
> 	PKGS_APPS += usb-lib/usb-lib-1.0.20
> 	PKGS_APPS += microhttpd-lib/microhttpd-lib-0.9.49
> 	PKGS_APPS += openLightingArchitecture/openLightingArchitecture-0.10.1
>
> /Ronny
>
>
>
>
> ------------------------------------------
>> Hi Ronny,
>>
>> I managed to make it work, I have no idea if this is the right way of
>> doing it, or if it's just a hack to make it work. By using rlink and
>> rlink-path I managed to change the order at which the binary will search
>> for the libraries at startup, by using the following configure on ola:
>>
>>           cd $(dir $@) && env PKG_CONFIG_DIR=""
>> PKG_CONFIG_LIBDIR="$(PATH_FS)/usr/lib/pkgconfig:$(PATH_FS)/usr/share/pkgcon
>> fig" PKG_CONFIG_SYSROOT_DIR="$(PATH_FS)" \
>>                   CFLAGS="$(CROSS_CFLAGS)" \
>>                   CPPFLAGS="$(CROSS_CFLAGS)" \
>>                   LDFLAGS="-Wl,-rpath -Wl,/lib -Wl,-rpath -Wl,/usr/lib
>> -Wl,-rpath-link -Wl,/lib -Wl,-rpath-link -Wl,/usr/lib -L/lib -L/usr/lib" \
>>                   PKG_CONFIG="/usr/bin/pkg-config" \
>>                   ./configure \
>>                   ac_cv_func_malloc_0_nonnull=yes
>> ac_cv_func_realloc_0_nonnull=yes \
>>                   libprotobuf_CFLAGS="-I$(PATH_FS)/usr/include
>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>>                   libprotobuf_LIBS="-L$(PATH_FS)/usr/lib -lprotobuf
>> -lprotoc" \
>>                   base_uuid_CFLAGS="-I$(PATH_FS)/usr/include
>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>>                   base_uuid_LIBS="-L$(PATH_FS)/usr/lib -luuid" \
>>                   --prefix=/usr \
>>                   --host=$(CROSS_TUPLE) \
>>                   --target=$(CROSS_TUPLE) \
>>                   --disable-dependency-tracking \
>>                   --without-dns-sd \
>> --with-protoc=$(PATH_APPS)/protobuf/native/src/protoc \
>> --with-ola-protoc-plugin=$(PATH_APPS)/ola/native/protoc/ola_protoc_plugin \
>>                   --disable-unittests \
>>                   --disable-examples \
>>                   --disable-rdm-tests \
>>                   --disable-doxygen-doc \
>>                   --disable-gcov \
>>                   --disable-tcmalloc \
>>                   --disable-root-check \
>>                   --disable-java-libs \
>>                   --disable-python-libs \
>>                   --disable-fatal-warnings \
>>                   --disable-all-plugins
>>
>> Notice LDFLAGS, I added /lib and then /usr/lib, this way all libs are
>> found and it's working properly on the target system.
>>
>> Besides this problem, there seems to be a bug in libtool when cross
>> compiling you might encounter on your tests, that the package libs won't
>> be found, for that, a hack is necessary, one needs to substitute all
>> instances of link_all_deplibs=(yes|no) to link_all_deplibs=unknown in
>> config/libtool.m4
>>
>> Here is the short version of the minimum requirements to be able to
>> cross compile OLA
>>
>> - build uuid (any works, I'm using util-linux)
>> - build protobuf
>>     To build protobuf one needs to build 2 versions, one of them needs to
>> be native to the host system since binaries are compiled and used while
>> building itself, then, the second version is indeed the cross compiled
>> one while passing the --with-protoc=PATH_TO_NATIVE/src/protoc
>>     I'm also using protobuf 2.5.0 since newer versions won't compile and
>> I haven't bothered much finding out why yet.
>> - build ola, 2 versions also, one native and the cross compiled one. The
>> native is needed because of a protobuf plugin used by the protoc binary,
>> needs to be compiled in the host machine. I do this with the following
>> configure:
>>
>>           if [ ! -e native/protoc/ola_protoc_plugin ]; then \
>>           cd native && env CFLAGS="" CPPFLAGS="" LDFLAGS=""
>> PKG_CONFIG="/usr/bin/pkg-config" \
>>                   ./configure \
>>                   --disable-all-plugins \
>>                   --disable-osc \
>>                   --disable-uart \
>>                   --disable-libusb \
>>                   --disable-libftdi \
>>                   --disable-http  \
>>                   --disable-examples \
>>                   --disable-unittests \
>>                   --disable-doxygen-html \
>>                   --disable-doxygen-doc \
>>                   --without-dns-sd \
>>                   && $(MAKE) -j "$(CPUS)" protoc/ola_protoc_plugin; fi
>>
>>     Just disable everything, and only build the ola_protoc_plugin. Then I
>> proceed to build the cross compile version of OLA with the earlier
>> configure.
>>
>> I'm tidying up all the build process, for everything (including OLA
>> plugins and such) to have a clean install of the whole system, and when
>> I do I'll build a patch against nard git and will send if you're
>> interested.
>>
>> For now, I'll move forward in the other tasks I have planned to do (some
>> command line tools to manage ola and the OS network with a few buttons
>> and an LCD to have a standalone system without the need of remote ssh
>> management or web and a few other utilities since I managed to have OLA
>> for now working, but I'll definitely investigate further about this
>> rlink/rlink-path hack or fix or whatever.
>>
>> If you do give it a whirl and want me to, I can package my current apps
>> Makefiles and attach them so you can have a starting point.
>>
>> Best regards.
>> Rui Barreiros
>>
>> On 05-05-2016 19:32, Ronny Nilsson wrote:
>>> Hi Rui
>>> This is looks like a tough one! I don't blame you for having problems...
>>> I'll try to find some time next week to help.
>>> /Ronny
>>>
>>>
>>>
>>> -----------------------------------------
>>>
>>>> Hi,
>>>>
>>>> I've been trying to compile OLA (https://www.openlighting.org) but been
>>>> having so many problems I'm melting my brains out !!
>>>>
>>>> To build OLA without any plugins, and all superfluous stuff disabled
>>>> (doc, examples, etc) requires protobuf and uuid, I managed successfully
>>>> to build and install this libraries (uuid is provided by util-linux), I
>>>> just make a plain DESTDIR=$(PATH_FS) make install for uuid and protobuf.
>>>>
>>>> OLA relies on either pkg-config or env variables to find protobuf and
>>>> uuid, I tried both and the problem I have happens on any.
>>>>
>>>> My problem is, OLA binaries have the lib path hardcoded and when I run
>>>> them on the raspberry pi, it just hangs forever, an strace reveals:
>>>>
>>>> root at tridmx_raspi_b_rev2-952bbb2c:~> strace olad
>>>> execve("/usr/bin/olad", ["olad"], [/* 15 vars */]) = 0
>>>> brk(0)                                  = 0x15000
>>>> uname({sys="Linux", node="tridmx_raspi_b_rev2-952bbb2c", ...}) = 0
>>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
>>>> 0) = 0xa6ffc000
>>>> access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or
>>>> directory)
>>>> open("/home/rbarreiros/Projectos/RaspberryPi/nard/nard-git/intermediate/
>>>> fs/ usr/lib/tls/v6l/vfp/libolaserver.so.0", O_RDONLY|O_CLOEXEC) = -1
>>>> ELOOP (Too many levels of symbolic links)
>>>> stat64("/home/rbarreiros/Projectos/RaspberryPi/nard/nard-git/intermediat
>>>> e/f s/usr/lib/tls/v6l/vfp",
>>>>
>>>> Everytime an open/stat call is made, it takes a long long time, until it
>>>> receives the ELOOP error and attempts another path to try and open
>>>> libolaserver.so.0
>>>>
>>>>
>>>> Here is the configure/build section for ola Makefile
>>>>
>>>> To properly build ola for another system, one needs to build
>>>> ola_protoc_plugin natively first, as it's used by the protoc (which
>>>> needs to be built natively first also) to parse from protobuf message
>>>> files during build, then the cross compilation is done.
>>>>
>>>>            # Need to build a native ola-protoc-plugin first
>>>>            if [ ! -e native/protoc/ola_protoc_plugin ]; then \
>>>>            cd native && env CFLAGS="" CPPFLAGS="" LDFLAGS=""
>>>> PKG_CONFIG="/usr/bin/pkg-config" \
>>>>                    ./configure \
>>>>                    --disable-all-plugins \
>>>>                    --disable-osc \
>>>>                    --disable-uart \
>>>>                    --disable-libusb \
>>>>                    --disable-libftdi \
>>>>                    --disable-http  \
>>>>                    --disable-examples \
>>>>                    --disable-unittests \
>>>>                    --disable-doxygen-html \
>>>>                    --disable-doxygen-doc \
>>>>                    --without-dns-sd \
>>>>                    && $(MAKE) -j "$(CPUS)" protoc/ola_protoc_plugin; fi
>>>>
>>>>            cd $(dir $@) && env PKG_CONFIG_DIR=""
>>>> PKG_CONFIG_LIBDIR="$(PATH_FS)/usr/lib/pkgconfig:$(PATH_FS)/usr/share/pkg
>>>> con fig" PKG_CONFIG_SYSROOT_DIR="$(PATH_FS)" \
>>>>                    CFLAGS="$(CROSS_CFLAGS)" \
>>>>                    CPPFLAGS="$(CROSS_CFLAGS)" \
>>>>                    LDFLAGS="-Wl,-rpath -Wl,/usr/lib -Wl,-rpath-link
>>>> -Wl,$(PATH_FS)/usr/lib -L$(PATH_FS)/lib -L$(PATH_FS)/usr/lib" \
>>>>                    PKG_CONFIG="/usr/bin/pkg-config" \
>>>>                    ./configure \
>>>>                    ac_cv_func_malloc_0_nonnull=yes
>>>> ac_cv_func_realloc_0_nonnull=yes \
>>>>                    libprotobuf_CFLAGS="-I$(PATH_FS)/usr/include
>>>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>>>>                    libprotobuf_LIBS="-L$(PATH_FS)/usr/lib -lprotobuf
>>>> -lprotoc" \
>>>>                    base_uuid_CFLAGS="-I$(PATH_FS)/usr/include
>>>> -L$(PATH_FS)/usr/lib -Wl,-rpath-link,$(PATH_FS)/usr/lib" \
>>>>                    base_uuid_LIBS="-L$(PATH_FS)/usr/lib -luuid" \
>>>>                    --prefix=/usr \
>>>>                    --host=$(CROSS_TUPLE) \
>>>>                    --target=$(CROSS_TUPLE) \
>>>>                    --disable-dependency-tracking \
>>>>                    --without-dns-sd \
>>>> --with-protoc=$(PATH_APPS)/protobuf/native/src/protoc \
>>>> --with-ola-protoc-plugin=$(PATH_APPS)/ola/native/protoc/ola_protoc_plugi
>>>> n \ --disable-unittests \
>>>>                    --disable-examples \
>>>>                    --disable-rdm-tests \
>>>>                    --disable-doxygen-doc \
>>>>                    --disable-gcov \
>>>>                    --disable-tcmalloc \
>>>>                    --disable-root-check \
>>>>                    --disable-java-libs \
>>>>                    --disable-python-libs \
>>>>                    --disable-fatal-warnings \
>>>>                    --disable-all-plugins
>>>>            $(MAKE) -C "$(PKG_VER)" -j $(CPUS)
>>>>
>>>> Worthy of note, I couldn't finish OLA compilation because I kept getting
>>>> an error where libtool couldn't find it's libraries (OLA libraries) and
>>>> suggested using rpath or rpath-link, I managed to fix this issue by
>>>> implementing a fix found here http://bugs.lttng.org/issues/321 in which
>>>> the configure script goes through all occurrences of link_all_deplibs in
>>>> config/libtool.m4 and replace all 'no|yes' to unknown.
>>>>
>>>> Does anyone have any idea what I'm doing wrong ? or where the bug is ?
>>>>
>>>> Best regards.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: lo-lib_ola-more-plugins.patch
Type: text/x-patch
Size: 4278 bytes
Desc: not available
Url : http://www.arbetsmyra.dyndns.org/pipermail/nard/attachments/20160516/4dfeb844/attachment.bin 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2109 bytes
Desc: S/MIME Cryptographic Signature
Url : http://www.arbetsmyra.dyndns.org/pipermail/nard/attachments/20160516/4dfeb844/attachment-0001.bin 


More information about the Nard mailing list