philippe44 / AirConnect

Use AirPlay to stream to UPnP/Sonos & Chromecast devices
Other
3.5k stars 216 forks source link

A default toolchain example would be amazing #267

Closed Hofyyy closed 3 years ago

Hofyyy commented 4 years ago

Hello,

I tried some evenings to compile AirConnect from scatch without a success. At the moment I stuck at some openssl errors in your dynamic linker class.

I would like to improve the compability with my "Raumfeld / Teufel" setup and maybe add one feature. I think an optional silent mode which disables the mutlicast polling on the chromecast side would be cool. It would only use information from the config file, which should be enough For all network guys.

Because of the reason that your normal documentation is more or less complete, I thought maybe you can add a from scatch howto for the toolchain (including dependencies) for a debian x86_64?

Best regards from Germany

philippe44 commented 4 years ago

It's a lot of extra work, especially when you use all the codecs. I don't have much time available these days

Hofyyy commented 4 years ago

Thank you for the reply. I have no hurry on that, but would like to contribute a little bit. If you will find some time over the next weeks, this would be cool. Or maybe a step by step approach would work so that other persons can complete the howto.

My current showstoper is the openssl installation. I get multiple errors in combination with your dynamic linking code. And I tried multiple versions which are listet in your header struct.

philippe44 commented 4 years ago

It's compile or load errors?

Hofyyy commented 4 years ago

I try to compile aircast on Debian x86-64. And the last compile errors are in openSSL. If i remove the problematic lines I can compile all .o. files but then i receive multiple linking errors. You will find 3 steps below. The question would be, what openssl version do you use, because it is nothing in the makefile and every version i tried did not work ...

1. Inlcude problems with Openssl

_In file included from ./src/castcore.c:27:0: ./src/castcore.h:30:28: fatal error: openssl/crypto.h: No such file or directory

include "openssl/crypto.h"

                        ^

compilation terminated. Makefile:76: recipe for target 'bin/x86-64/castcore.o' failed make: *** [bin/x86-64/castcore.o] Error 1_

2. Fixed with Makefile adjustments

UPNP = $(BASE)/libupnp/1.6.19 SHINE = $(BASE)/shine/src/lib DMAP_PARSER = $(BASE)/dmap-parser FLAC = $(BASE)/flac OPENSSL = $(BASE)/openssl

DEFINES += -D_FILE_OFFSET_BITS=64 -DPB_FIELD_16BIT -DHAVE_STDINT_H -DNDEBUG -D_GNU_SOURCE -D_USEXML

CFLAGS += -fdata-sections -ffunction-sections

ifeq ($(OS),Darwin) LDFLAGS += -Wl,-dead_strip else ifneq ($(OS), SunOS) LDFLAGS += -Wl,--gc-sections endif

vpath %.c $(TOOLS):$(COMMON):$(SRC):$(SQUEEZETINY):$(JANSSON)/src:$(NANOPB):$(MDNSSD):$(TINYSVCMDNS):$(DMAP_PARSER)

INCLUDE = -I. \ -I$(SHINE) \ -I$(DMAP_PARSER) \ -I$(VALGRIND)/memcheck -I$(VALGRIND)/include \ -I$(TOOLS) \ -I$(COMMON) \ -I$(SRC) -I$(SRC)/inc \ -I$(UPNP)/ixml/inc -I$(UPNP)/upnp/inc -I$(UPNP)/build/inc -I$(UPNP)/threadutil/inc \ -I$(JANSSON)/src \ -I$(NANOPB) \ -I$(MDNSSD) \ -I$(FLAC)/include\ -I$(OPENSSL)/include\ -I$(TINYSVCMDNS)

### 3. Now I get real errors dutil/inc -I../../jansson/src -I../../nanopb -I../../mdnssd -I../../flac/include -I../../openssl/include -I../../tinysvcmdns ../tools/sslsym.c -c -o bin/x86-64/sslsym.o ../tools/sslsym.c:113:1: error: macro "SSL_library_init" passed 1 arguments, but takes just 0 SYMDECL(SSL_library_init, int, 0); ^~ ../tools/sslsym.c:89:27: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token ret fn(P(n,__VA_ARGS__)) { \ ^ ../tools/sslsym.c:113:1: note: in expansion of macro ‘SYMDECL’ SYMDECL(SSL_library_init, int, 0); ^~~ Makefile:79: recipe for target 'bin/x86-64/sslsym.o' failed make: *** [bin/x86-64/sslsym.o] Error 1

pwt commented 4 years ago

Just to note that it took me half a day to get a working build chain just for airupnp-arm.

As for your openssl question, this fragment of my notes might help:

15. openssl 1.0.x: only the header files are required, but build as follows:
    download and extract the tar file
    ./config —prefix=/home/pwt/AirConnect-Build/openssl-local make;
    make install
16. Point the Makefile INCLUDE statements at the openssl-local/include directory
Hofyyy commented 4 years ago

Thats sounds bad, you should not support so much platforms :-)

Now I get the followingm but I used versio 1.1 i will rety with 1.0.x

../tools/sslsym.c:111:9: error: redefinition of ‘TLS_client_method’ SYMDECL(TLS_client_method, const SSL_METHOD*, 0); ^ ../tools/sslsym.c:89:6: note: in definition of macro ‘SYMDECL’ ret fn(P(n,__VA_ARGS__)) { \ ^~ ../../airconnect/openssl/include/openssl/ssl.h:1619:33: note: previous definition of ‘TLS_client_method’ was here

define SSLv23_client_method TLS_client_method

                             ^

../tools/sslsym.c:89:6: note: in definition of macro ‘SYMDECL’ ret fn(P(n,VA_ARGS__)) { \ ^~ ../tools/sslsym.c:110:9: note: in expansion of macro ‘SSLv23_client_method’ SYMDECL(SSLv23_client_method, const SSL_METHOD*, 0); ^~~~~~~~ ../tools/sslsym.c:113:1: error: macro "SSL_library_init" passed 1 arguments, but takes just 0 SYMDECL(SSL_library_init, int, 0); ^~ ../tools/sslsym.c:89:27: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘{’ token ret fn(P(n,VA_ARGS__)) { \ ^ ../tools/sslsym.c:113:1: note: in expansion of macro ‘SYMDECL’ SYMDECL(SSL_library_init, int, 0); ^~~ Makefile:79: recipe for target 'bin/x86-64/sslsym.o' failed make: *** [bin/x86-64/sslsym.o] Error 1

Hofyyy commented 4 years ago

Bähm! The newest version 1.0.2u from 20.12.2019 is compatible. Maybe you can add this to your dependency list on the main page.

Hofyyy commented 4 years ago

It seems to be that I have no compile error anymore. Also all *.a files are in place. Hopefully one last linker error: Again with openssl :-P

any idea?

bin/x86-64/castcore.o: In function InitSSL': /home/parallels/Sourcecode/AirConnect-master/aircast/./src/castcore.c:120: undefined reference toOPENSSL_init_ssl' /home/parallels/Sourcecode/AirConnect-master/aircast/./src/castcore.c:126: undefined reference to `SSL_CTX_set_options' collect2: error: ld returned 1 exit status Makefile:65: recipe for target '../bin/aircast-x86-64' failed

timtn commented 4 years ago

Had a similar issue with airupnp.

I believe I needed to compile OpenSSL_1_0_2-stable.

Hofyyy commented 4 years ago

Thx for all the support. I was able to compile and link airconnect on debian x86-64.

philippe44 commented 3 years ago

Would you mind closing this one (I'll look at the PR soon)