source: flair-src/tags/0.3.3/scripts/distribution_specific_hack.sh@ 451

Last change on this file since 451 was 365, checked in by Sanahuja Guillaume, 20 months ago

change simu apps compilation to avoid problem with mixing host and toolchain libs
(log2@glibc_2.29 error when compiling on ubuntu 20.05 or mint 20)
now compile with host g++ and libs (except filelib, irrlicht, quat, udt and vrpn) for simu apps using the macro: FLAIR_DEMO_HOST_CXX

File size: 3.2 KB
Line 
1#check required version of a lib in host graphic lib (ie i965)
2#return 1 if robomap3 version is not sufficient
3function check_required_lib_ver () {
4 DRIVER_LIB=$1
5 PATTERN=$2
6 LIB=$3
7
8 #get the highest required version of $PATTERN
9 VER_REQUIRED=$(objdump -T $DRIVER_LIB | grep $PATTERN | sed -e 's/.*'$PATTERN'_\(.*\) .*/\1/' | sort -uV | tail -1)
10 #get currently used $LIB
11 LIB_PROVIDED=$(ldd $EXEC | grep $LIB | sed -e 's/.*=> \(.*\) (.*/\1/')
12 #get the highest version of $PATTERN supported by the $LIB
13 VER_PROVIDED=$(objdump -T $LIB_PROVIDED | grep ".*"$PATTERN"_[0-9.]*$" | sed -e 's/.*'$PATTERN'_\(.*\)/\1/' | sort -V | tail -1)
14 if [ $(echo -e "$VER_PROVIDED\n$VER_REQUIRED" | sort -V | tail -n1) != $VER_PROVIDED ]; then
15 echo "We must use the local system $LIB"
16 return 1
17 fi
18}
19
20function green_echo () {
21 echo -e "\033[32m$1\033[0m"
22}
23
24if [ -f /etc/lsb-release ]; then
25 . /etc/lsb-release
26fi
27
28#also needed in mint, but for different reason?
29#if not in sudo in mint, simlator does not work cause of:
30#libGL: MESA-LOADER: failed to open /usr/lib/x86_64-linux-gnu/dri/iris_dri.so: /usr/lib/x86_64-linux-gnu/dri/iris_dri.so: failed to map segment from shared object
31
32#if [ _$DISTRIB_ID = _Ubuntu ]; then
33 #tested on Ubuntu 17.10
34 #we must run as root
35 if [ $EUID -ne 0 ]; then
36 exec sudo -E $0 $*
37 fi
38
39 #we must run in root cgroup to escape possible restrictions on scheduling
40 if [ -d /sys/fs/cgroup/cpu ]; then
41 echo $$ > /sys/fs/cgroup/cpu/tasks
42 fi
43
44#fi
45
46#special actions if we use 3D
47ldd $EXEC | grep "libGL.so" > /dev/null
48if [ $? -eq 0 ]; then
49 green_echo "checking for incompatibility when using libGL and trying to solve it..."
50 #allow root access to the X server
51 xhost si:localuser:root
52
53 #Mesa DRI driver may need a lib more recent than robomap3's
54 ldconfig -p | grep mesa > /dev/null
55 if [ $? -eq 0 ]; then
56 read DRI_CARD_MAJOR DRI_CARD_MINOR < <(stat -c '%t %T' /dev/dri/card0)
57 DRIVER=$(cat /sys/dev/char/$((16#$DRI_CARD_MAJOR)):$((16#$DRI_CARD_MINOR))/device/uevent | grep DRIVER | cut -d= -f2)
58 echo "Mesa DRI driver is $DRIVER"
59 DRIVER_LIB=$(LIBGL_DEBUG=verbose glxinfo 2>&1 | grep "\.so" | tail -n 1 | grep -o '/.*\.so')
60
61 #todo: make a list, find a complete one!
62 check_required_lib_ver $DRIVER_LIB GLIBC libm.so.6
63 if [ "$?" = "1" ]; then
64 ADDED_LIBS=$(ldconfig -p | grep libm.so.6 | grep libc6,x86-64 | cut -d'>' -f2)
65 fi
66
67 check_required_lib_ver $DRIVER_LIB CXXABI libstdc++.so.6
68 if [ "$?" = "1" ]; then
69 ADDED_LIBS="$ADDED_LIBS:$(ldconfig -p | grep libstdc++.so.6 | grep libc6,x86-64 | cut -d'>' -f2)"
70 fi
71
72 #remove whitespace
73 #add libs to LD_PRELOAD if version robomap3 version is not sufficient
74 export LD_PRELOAD="$(echo -e "${ADDED_LIBS}" | tr -d '[:space:]')"
75 fi
76
77 #check if using DRI3 and disable it
78 #otherwise you get /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0: undefined symbol: xcb_dri3_get_supported_modifiers
79 cat /var/log/Xorg.0.log | grep DRI3 > /dev/null
80 if [ $? -eq 0 ]; then
81 export LIBGL_DRI3_DISABLE=1
82 echo "we must disable DRI3"
83 fi
84 green_echo "...done\n"
85fi
86
87
88
Note: See TracBrowser for help on using the repository browser.