build_helper 9.74 KB
Newer Older
thomasl's avatar
thomasl committed
1
2
################################################################################
#
3
4
# Copyright (c) 2015, EURECOM (www.eurecom.fr)
# All rights reserved.
thomasl's avatar
thomasl committed
5
#
6
7
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
thomasl's avatar
thomasl committed
8
#
9
10
11
12
13
# 1. Redistributions of source code must retain the above copyright notice, this
#    list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
thomasl's avatar
thomasl committed
14
#
15
16
17
18
19
20
21
22
23
24
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
thomasl's avatar
thomasl committed
25
#
26
27
28
# The views and conclusions contained in the software and documentation are those
# of the authors and should not be interpreted as representing official policies,
# either expressed or implied, of the FreeBSD Project.
thomasl's avatar
thomasl committed
29
30
#
################################################################################
31
# file build_helper
thomasl's avatar
thomasl committed
32
33
34
35
# brief
# author Laurent Thomas
#
#######################################
36
SUDO='sudo -E'
thomasl's avatar
thomasl committed
37

38
39
40
41
42
43
44
###############################
## echo and  family
###############################
black='\E[30m'
red='\E[31m'
green='\E[32m'
yellow='\E[33m'
45
blue='\E[1;34m'
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
magenta='\E[35m'
cyan='\E[36m'
white='\E[37m'
reset_color='\E[00m'
COLORIZE=1

cecho()  {  
    # Color-echo
    # arg1 = message
    # arg2 = color
    local default_msg="No Message."
    message=${1:-$default_msg}
    color=${2:-$green}
    [ "$COLORIZE" = "1" ] && message="$color$message$reset_color"
    echo -e "$message"
    return
}

echo_error()   { cecho "$*" $red          ;}
echo_fatal()   { cecho "$*" $red; exit -1 ;}
echo_warning() { cecho "$*" $yellow       ;}
echo_success() { cecho "$*" $green        ;}
echo_info()    { cecho "$*" $blue         ;}

70

71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

###########################
# Cleaners
###########################

clean_kernel() {
    $SUDO modprobe ip_tables
    $SUDO modprobe x_tables
    $SUDO iptables -P INPUT ACCEPT
    $SUDO iptables -F INPUT
    $SUDO iptables -P OUTPUT ACCEPT
    $SUDO iptables -F OUTPUT
    $SUDO iptables -P FORWARD ACCEPT
    $SUDO iptables -F FORWARD
    $SUDO iptables -t nat -F
    $SUDO iptables -t mangle -F
    $SUDO iptables -t filter -F
    $SUDO iptables -t raw -F
    echo_info "Flushed iptables"
    $SUDO rmmod nasmesh > /dev/null 2>&1
    $SUDO rmmod oai_nw_drv  > /dev/null 2>&1
    $SUDO rmmod openair_rf > /dev/null 2>&1
    $SUDO rmmod ue_ip > /dev/null 2>&1
    echo_info "removed drivers from kernel"
}

clean_all_files() {
98
 set_openair_env
thomasl's avatar
thomasl committed
99
 dir=$OPENAIR_DIR/cmake_targets
100
 rm -rf $dir/log $OPENAIR_DIR/targets/bin/* 
thomasl's avatar
thomasl committed
101
102
103
 rm -rf $dir/lte_build_oai $dir/lte-simulators/build
 rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
 rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build 
104
105
106
107
108
109
}

###################################
# Compilers
###################################

thomasl's avatar
thomasl committed
110
compilations() {
thomasl's avatar
thomasl committed
111
  cd $OPENAIR_DIR/cmake_targets/$1/build
thomasl's avatar
thomasl committed
112
113
  {
    rm -f $3
114
    make -j`nproc` $2 VERBOSE=$VERBOSE_COMPILE
thomasl's avatar
thomasl committed
115
  } > $dlog/$2.$REL.txt 2>&1
116
  echo_info "Log file for compilation has been written to: $dlog/$2.$REL.txt"
thomasl's avatar
thomasl committed
117
  if [ -s $3 ] ; then
118
     cp $3 $4
thomasl's avatar
thomasl committed
119
     echo_success "$2 compiled"
thomasl's avatar
thomasl committed
120
  else
thomasl's avatar
thomasl committed
121
     echo_error "$2 compilation failed"
thomasl's avatar
thomasl committed
122
123
124
  fi
}

125
126
127
128
############################################
# External packages installers
############################################

thomasl's avatar
thomasl committed
129
130
131
install_nettle_from_source() {
    cd /tmp
    echo "Downloading nettle archive"
132
    rm -rf /tmp/nettle-2.5.tar.gz* /tmp/nettle-2.5
thomasl's avatar
thomasl committed
133
134
135
136
137
    wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz 
    tar -xzf nettle-2.5.tar.gz
    cd nettle-2.5/
    ./configure --disable-openssl --enable-shared --prefix=/usr 
    echo "Compiling nettle"
138
    make -j`nproc`
thomasl's avatar
thomasl committed
139
140
141
142
143
144
145
146
    make check 
    $SUDO make install 
    rm -rf /tmp/nettle-2.5.tar.gz /tmp/nettle-2.5
}

install_gnutls_from_source(){
    cd /tmp 
    echo "Downloading gnutls archive"
147
    rm -rf /tmp/gnutls-3.1.23.tar.xz* /tmp/gnutls-3.1.23
thomasl's avatar
thomasl committed
148
149
150
151
152
    wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz 
    tar -xzf gnutls-3.1.23.tar.xz
    cd gnutls-3.1.23/
    ./configure --prefix=/usr
    echo "Compiling gnutls"
153
    make -j`nproc`
thomasl's avatar
thomasl committed
154
155
156
157
    $SUDO make install 
    rm -rf /tmp/gnutls-3.1.23.tar.xz /tmp/gnutls-3.1.23
}

gauthier's avatar
   
gauthier committed
158
159


thomasl's avatar
thomasl committed
160
check_install_usrp_uhd_driver(){
thomasl's avatar
thomasl committed
161
162
        v=$(lsb_release -cs)
        $SUDO apt-add-repository "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main"
thomasl's avatar
thomasl committed
163
        $SUDO apt-get update
thomasl's avatar
thomasl committed
164
165
166
        $SUDO apt-get -y install  python python-tk libboost-all-dev libusb-1.0-0-dev
        $SUDO apt-get -y install -t `lsb_release -cs` uhd --force-yes
}
167
168
169
170
check_install_bladerf_driver(){
	$SUDO add-apt-repository -y ppa:bladerf/bladerf
	$SUDO apt-get update
	$SUDO apt-get install -y bladerf libbladerf-dev
nikaeinn's avatar
nikaeinn committed
171
172
173
	$SUDO apt-get install bladerf-firmware-fx3
	$SUDO apt-get install bladerf-fpga-hostedx40	
	bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img	
174
}
thomasl's avatar
thomasl committed
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195

check_install_additional_tools (){
    $SUDO apt-get update
    $SUDO apt-get install -y \
	check \
	dialog \
	dkms \
	gawk \
	libboost-all-dev \
	libpthread-stubs0-dev \
	openvpn \
	phpmyadmin \
	pkg-config \
	python-dev  \
	python-pexpect \
	sshfs \
	swig  \
	tshark \
	uml-utilities \
	unzip  \
	valgrind  \
196
197
	vlan	  \
	ctags
thomasl's avatar
thomasl committed
198
199
200
201
202
}

check_install_oai_software() {
    
    $SUDO apt-get update
203
    $SUDO apt-get install -y \
gauthier's avatar
   
gauthier committed
204
    autoconf  \
thomasl's avatar
thomasl committed
205
206
207
208
209
210
	automake  \
	bison  \
	build-essential \
	cmake \
	cmake-curses-gui  \
	doxygen \
211
	doxygen-gui\
212
	texlive-latex-base\
thomasl's avatar
thomasl committed
213
214
	ethtool \
	flex  \
gauthier's avatar
   
gauthier committed
215
216
217
    gccxml \
    gdb  \
    git \
thomasl's avatar
thomasl committed
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
	graphviz \
	gtkwave \
	guile-2.0-dev  \
	iperf \
	iproute \
	iptables \
	iptables-dev \
	libatlas-base-dev \
	libatlas-dev \
	libblas3gf \
	libblas-dev \
	libconfig8-dev \
	libforms-bin \
	libforms-dev \
	libgcrypt11-dev \
	libgmp-dev \
	libgtk-3-dev \
	libidn2-0-dev  \
gauthier's avatar
   
gauthier committed
236
    libidn11-dev \
thomasl's avatar
thomasl committed
237
	libmysqlclient-dev  \
238
	liboctave-dev \
thomasl's avatar
thomasl committed
239
240
241
242
243
244
245
246
247
248
249
	libpgm-5.1 \
	libpgm-dev \
	libsctp1  \
	libsctp-dev  \
	libssl-dev  \
	libtasn1-3-dev  \
	libtool  \
	libusb-1.0-0-dev \
	libxml2 \
	libxml2-dev  \
	linux-headers-`uname -r` \
250
251
252
	mscgen  \
	octave \
	octave-signal \
thomasl's avatar
thomasl committed
253
254
255
256
	openssh-client \
	openssh-server \
	openssl \
	python  \
Rohit Gupta's avatar
Rohit Gupta committed
257
258
	subversion \
        xmlstarlet
259
    $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
thomasl's avatar
thomasl committed
260
261
    if [ `lsb_release -rs` = '12.04' ] ; then
        install_nettle_from_source
262
        install_gnutls_from_source
thomasl's avatar
thomasl committed
263
264
265
    else
        $SUDO apt-get install -y libgnutls-dev nettle-dev nettle-bin 
    fi
thomasl's avatar
thomasl committed
266
    install_asn1c_from_source
thomasl's avatar
thomasl committed
267
268
}

thomasl's avatar
thomasl committed
269
install_asn1c_from_source(){
270
    mkdir -p /tmp/asn1c-r1516
thomasl's avatar
thomasl committed
271
    cd /tmp/asn1c-r1516
272
    rm -rf /tmp/asn1c-r1516/*
thomasl's avatar
thomasl committed
273
    svn co https://github.com/vlm/asn1c/trunk  /tmp/asn1c-r1516 -r 1516 > /tmp/log_compile_asn1c
gauthier's avatar
gauthier committed
274
275
    patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 >> /tmp/log_compile_asn1c
    patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 >> /tmp/log_compile_asn1c
276
    patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 >> /tmp/log_compile_asn1c
thomasl's avatar
thomasl committed
277
    ./configure
thomasl's avatar
thomasl committed
278
    make > /tmp/log_compile_asn1c 2>&1
thomasl's avatar
thomasl committed
279
    $SUDO make install
thomasl's avatar
thomasl committed
280
281
282
283
284
}

#################################################
# 2. compile 
################################################
thomasl's avatar
thomasl committed
285

thomasl's avatar
thomasl committed
286
install_nas_tools() {
gauthier's avatar
gauthier committed
287
288
289
290
291
  cd $1
  if [ ! -f .ue.nvram ]; then
    echo_success "generate .ue_emm.nvram .ue.nvram"
    ./nvram --gen
  else
gauthier's avatar
syntax    
gauthier committed
292
    [ ./nvram -nt .ue.nvram  -o ./nvram -nt .ue_emm.nvram ] && ./nvram --gen
gauthier's avatar
gauthier committed
293
  fi
thomasl's avatar
thomasl committed
294

gauthier's avatar
gauthier committed
295
296
297
298
299
300
  if [ ! -f .usim.nvram ]; then
    echo_success "generate .usim.nvram"
    ./usim --gen
  else
    [ ./usim -nt .usim.nvram ] && ./usim --gen
  fi
thomasl's avatar
thomasl committed
301
302
303

}

304

thomasl's avatar
thomasl committed
305
306
307
308
309
310
311
312
313

################################
# set_openair_env
###############################
set_openair_env(){
    fullpath=`readlink -f $BASH_SOURCE`
    [ -f "/.$fullpath" ] || fullpath=`readlink -f $PWD/$fullpath`
    openair_path=${fullpath%/cmake_targets/*}
    openair_path=${openair_path%/targets/*}
thomasl's avatar
thomasl committed
314
    openair_path=${openair_path%/openair[123]/*}    
thomasl's avatar
thomasl committed
315
316
317
318
319
320
321
    export OPENAIR_DIR=$openair_path
    export OPENAIR1_DIR=$openair_path/openair1
    export OPENAIR2_DIR=$openair_path/openair2
    export OPENAIR3_DIR=$openair_path/openair3
    export OPENAIR_TARGETS=$openair_path/targets
}

322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
################################
# Function to killall the subprocesses when Ctrl-C Key is hit
###############################
function handle_ctrl_c(){
CURPID=$$
ppid=$$
arraycounter=1
echo_info "** Trapped CTRL-C. Killing all subprocesses now..."
while true
do
        FORLOOP=FALSE
        # Get all the child process id
        for i in `ps -ef| awk '$3 == '$ppid' { print $2 }'`
        do
                if [ $i -ne $CURPID ] ; then
                        procid[$arraycounter]=$i
                        arraycounter=`expr $arraycounter + 1`
                        ppid=$i
                        FORLOOP=TRUE
                fi
        done
        if [ "$FORLOOP" = "FALSE" ] ; then
           arraycounter=`expr $arraycounter - 1`
           ## We want to kill child process id first and then parent id's
           while [ $arraycounter -ne 0 ]
           do
             $SUDO kill -9 "${procid[$arraycounter]}" >/dev/null
             arraycounter=`expr $arraycounter - 1`
           done
         exit
        fi
done
}