build_helper 9.79 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
99
 dir=$OPENAIR_DIR/cmake_targets
100
 rm -rf $dir/log $OPENAIR_DIR/targets/bin/* 
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
}

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
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 \
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  \
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  \
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  \
257
	subversion \
258 259
        xmlstarlet \
        python-pip
260
    $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so
thomasl's avatar
thomasl committed
261 262
    if [ `lsb_release -rs` = '12.04' ] ; then
        install_nettle_from_source
263
        install_gnutls_from_source
thomasl's avatar
thomasl committed
264 265 266
    else
        $SUDO apt-get install -y libgnutls-dev nettle-dev nettle-bin 
    fi
267
    $SUDO pip install paramiko
thomasl's avatar
thomasl committed
268
    install_asn1c_from_source
thomasl's avatar
thomasl committed
269 270
}

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

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

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

gauthier's avatar
gauthier committed
297 298 299 300 301 302
  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
303 304 305

}

306

thomasl's avatar
thomasl committed
307 308 309 310 311 312 313 314 315

################################
# 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
316
    openair_path=${openair_path%/openair[123]/*}    
thomasl's avatar
thomasl committed
317 318 319 320 321 322 323
    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
}

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 357 358
################################
# 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
}