1 ------------------------------------------------------------------------
2 AGL-UNICENS binding expose UNICENS-V2 APIs through AGL framework
3 ------------------------------------------------------------------------
5 Cloning Audio-Binding from Git
6 -------------------------------------------------------
9 git clone --recurse-submodules https://github.com/iotbzh/unicens2-binding
13 AFB_daemon dependency on Standard Linux Distributions
14 -------------------------------------------------------
15 # handle dependencies > (OpenSuse-42.2, Fedora-25, Ubuntu 16.04.2LTS)
17 systemd-devel (libsystemd-dev>=222)
19 file-devel(OpenSuSe) or libmagic-dev(Ubuntu)
22 ElectricFence (BUG should not be mandatory)
23 libopenssl-devel libgcrypt-devel libgnutls-devel (optional but requested by libmicrohttpd for https)
26 zypper in gcc5 gdb gcc5-c++ git cmake make ElectricFence systemd-devel libopenssl-devel libuuid-devel alsa-devel libgcrypt-devel libgnutls-devel libjson-c-devel file-devel mxml-devel
28 Ubuntu >= 16.4 libuuid-devel
29 apt-get install cmake git electric-fence libsystemd-dev libssl-dev uuid-dev libasound2-dev libgcrypt20-dev libgnutls-dev libgnutls-dev libjson-c-dev libmagic-dev libmxml-dev
31 libmicrohttpd>=0.9.55 (as today OpenSuse-42.2 or Ubuntu-.16.4 ship older versions)
32 afb-daemon from AGL Gerrit git clone https://gerrit.automotivelinux.org/gerrit/src/app-framework-binder
35 # Might want to add following variables into ~/.bashrc
36 echo "#---------- AGL options Start ---------" >>~/.bashrc
37 echo "# Object: AGL cmake option for binder/bindings" >>~/.bashrc
38 echo "# Date: `date`" >>~/.bashrc
39 echo 'export CC=gcc-5; export CXX=g++-5' >>~/.bashrc # if using gcc5
40 echo 'export INSTALL_PREFIX=$HOME/opt' >>~/.bashrc
41 echo 'export LD_LIBRARY_PATH=$INSTALL_PREFIX/lib64:$INSTALL_PREFIX/lib' >>~/.bashrc
42 echo 'export LIBRARY_PATH=$INSTALL_PREFIX/lib64:$INSTALL_PREFIX/lib' >>~/.bashrc
43 echo 'export PKG_CONFIG_PATH=$INSTALL_PREFIX/lib64/pkgconfig:$INSTALL_PREFIX/lib/pkgconfig' >>~/.bashrc
44 echo 'export PATH=$INSTALL_PREFIX/bin:$PATH' >>~/.bashrc
45 echo 'export RSYNC_TARGET=MY_TARGET_HOSTNAME' >>~/.bashrc
46 echo 'export RSYNC_PREFIX=./opt' >>~/.bashrc
48 echo "#---------- AGL options End ---------" >>~/.bashrc
51 # install LibMicroHttpd
53 wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-${LIB_MH_VERSION}.tar.gz
54 tar -xzf libmicrohttpd-${LIB_MH_VERSION}.tar.gz
55 cd libmicrohttpd-${LIB_MH_VERSION}
56 ./configure --prefix=${INSTALL_PREFIX}
58 sudo make install-strip
60 # retrieve last AFB_daemon from AGL
61 git clone https://gerrit.automotivelinux.org/gerrit/src/app-framework-binder
63 # Warning: previous GCC options should be set before initial cmake (clean Build/*)
64 cd app-framework-binder; mkdir -p build; cd build
65 cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX ..
74 source ~/.bashrc # or any other file where your have place your compilation preferences
77 cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX ..
80 afb-daemon --workdir=.. --ldpaths=build --port=1234 --roothttp=./htdocs --token="" --verbose
82 speaker-test -twav -D hw:ep01 -c 2
83 firefox http://localhost:1234
91 PKG_NAME=UNICENS-agent
92 git archive --format=tar.gz --prefix=${PKG_NAME}-${VERSION}/ ${GIT_TAG} -o ${PKG_NAME}_${VERSION}.orig.tar.gz
95 # Local Source Debug with GDB
97 Warning: technically AGL bindings are shared libraries loaded thought 'dlopen'. GDB supports source debug of dynamically
98 loaded libraries, but user should be warn that the actual path to sharelib symbols is directly inherited from DLOPEN.
99 As a result if you change your directory after binder start with --workdir=xxx then GDB will not find symbols anymore
105 # WORK when running in direct
106 afb-daemon --workdir=.. --ldpaths=build --port=1234 --roothttp=./htdocs
108 # FAIL when using GDB with warning: Could not load shared library ....
109 gdb -args afb-daemon --workdir=.. --ldpaths=build --port=1234 --roothttp=./htdocs
111 warning: Could not load shared library symbols for ./build/ucs2-afb/afb-ucs2.so.
112 Do you need "set solib-search-path" or "set sysroot"?
116 To debug sharelib symbol path: start your binder under GDB. Then break your session after the binder has
117 loaded its bindings. Finally use "info sharedlibrary" and check 'SymsRead'. If equal to 'No' then either you start GDB
118 from the wrong relative directory, either you have to use 'set solib-search-path' to force the path.
121 gdb -args afb-daemon --workdir=.. --ldpaths=build --port=1234 --roothttp=./htdocs
124 NOTICE: API UNICENS added
125 NOTICE: Waiting port=1234 rootdir=.
126 NOTICE: Browser URL= http://localhost:1234
127 (hit Ctrl-C to break the execution)
128 info sharedlibrary afb-*
132 # Running an debugging on a target
135 export RSYNC_TARGET=root@xx.xx.xx.xx
136 export RSYNC_PREFIX=/opt # WARNING: installation directory should exist
141 cmake -DRSYNC_TARGET=$RSYNC_TARGET -DRSYNC_PREFIX=$RSYNC_PREFIX ..
142 make remote-target-populate
144 ./build/target/start-${RSYNC_TARGET}.sh
145 firefox http://localhost:1234 # WARNING: do not forget firewall if any
147 ssh -tt ${RSYNC_TARGET} speaker-test -twav -D hw:ep01 -c 2
150 Note: remote-target-populate will
151 - create a script to remotely start the binder on the target in ./build/target/start-on-target-name.sh
152 - create a gdbinit file to transparently debug remotely in source code with gdb -x ./build/target/gdb-on-target-name.ini
153 - to run and debug directly from your IDE just configure the run and debug properties with the corresponding filename
155 Note that Netbeans impose to set debug directory to ./build/pkgout or it won't find binding symbols for source debugging