build_oai.bash 27.7 KB
Newer Older
1 2 3 4 5 6 7
################################################################################
#   OpenAirInterface
#   Copyright(c) 1999 - 2014 Eurecom
#
#    OpenAirInterface is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
nikaeinn's avatar
nikaeinn committed
8
#    (at your option) anylater version.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#
#
#    OpenAirInterface is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with OpenAirInterface.The full GNU General Public License is
#    included in this distribution in the file called "COPYING". If not,
#    see <http://www.gnu.org/licenses/>.
#
#  Contact Information
#  OpenAirInterface Admin: openair_admin@eurecom.fr
#  OpenAirInterface Tech : openair_tech@eurecom.fr
24
#  OpenAirInterface Dev  : openair4g-devel@lists.eurecom.fr
25 26 27 28 29
#
#  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
################################################################################
# file build_oai.bash
30
# brief OAI automated build tool that can be used to install, compile, run OAI.
gauthier's avatar
gauthier committed
31
# author  Navid Nikaein, Lionel GAUTHIER
32
# company Eurecom
gauthier's avatar
gauthier committed
33
# email:  navid.nikaein@eurecom.fr, lionel.gauthier@eurecom.fr 
34 35 36 37 38 39 40 41 42
#

#!/bin/bash
################################
# include helper functions
################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
. $THIS_SCRIPT_PATH/build_helper.bash

43
check_for_root_rights
44 45

#######################################
46
# Default PARAMETERS
47
######################################
gauthier's avatar
gauthier committed
48 49
declare OAI_DB_ADMIN_USER_NAME="root"
declare OAI_DB_ADMIN_USER_PASSWORD="linux"
50

51
#only one could be set at the time
52
declare BUILD_LTE="NONE" # ENB, EPC, HSS
53 54 55 56 57

declare HW="EXMIMO" # EXMIMO, USRP, ETHERNET, NONE
declare TARGET="ALL" # ALL, SOFTMODEM, OAISIM, UNISIM, NONE
declare ENB_S1=1
declare REL="REL8" # REL8, REL10
nikaeinn's avatar
nikaeinn committed
58
declare RT="NONE" # RTAI, RT_PREMPT, NONE
59
declare DEBUG=0
gauthier's avatar
gauthier committed
60
declare CONFIG_FILE=" "
61
declare CONFIG_FILE_ACCESS_OK=0
gauthier's avatar
gauthier committed
62
declare EXE_ARGUMENTS=" "
63
declare RUN_GDB=0
gauthier's avatar
gauthier committed
64
declare RUN=0
65
declare DISABLE_CHECK_INSTALLED_SOFTWARE=0
gauthier's avatar
gauthier committed
66
declare OAI_CLEAN=0
gauthier's avatar
gauthier committed
67
declare CLEAN_IPTABLES=0
gauthier's avatar
gauthier committed
68
declare CLEAN_HSS=0
69 70 71

declare OAI_TEST=0
declare XFORMS=0
nikaeinn's avatar
nikaeinn committed
72

73
# script is not currently handling these params
74
declare EPC=0 # flag to build EPC
nikaeinn's avatar
nikaeinn committed
75

76 77 78 79 80 81
declare ITTI_ANALYZER=0
declare VCD_TIMING=0
declare WIRESHARK=0
declare TIME_MEAS=0
declare DOXYGEN=0
declare DEV=0
82

83 84 85
#EMULATION_DEV_INTERFACE="eth0"
#EMULATION_MULTICAST_GROUP=1
#EMULATION_DEV_ADDRESS=`ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
86

nikaeinn's avatar
nikaeinn committed
87
############## script params #####################
88

nikaeinn's avatar
nikaeinn committed
89
if [ -f ./.lock_oaibuild ]; then 
90
    OAI_CLEAN=0
nikaeinn's avatar
nikaeinn committed
91
else 
92
    OAI_CLEAN=1
nikaeinn's avatar
nikaeinn committed
93 94
fi 
 
95 96 97 98 99
#for i in "$@"
#do 
#    echo "i is : $i"
#    case $i in

100

gauthier's avatar
gauthier committed
101 102
  until [ -z "$1" ]
  do
103 104 105 106 107 108 109 110 111 112 113 114 115 116
  case "$1" in
       -a | --doxygen)
            DOXYGEN=1
            echo "setting doxygen flag to: $DOXYGEN"
            shift;
            ;;
       -b | --disable-s1)
            ENB_S1=0
            echo "disable eNB S1 flag"
            shift;
            ;;
       -c | --clean)
            rm -rf ./.lock_oaibuild
            OAI_CLEAN=1
gauthier's avatar
gauthier committed
117
            CLEAN_HSS=1
118 119 120 121
            echo "setting clean flag to: $OAI_CLEAN"
            echo "may check package installation, and recompile OAI"
            shift;
            ;;
gauthier's avatar
gauthier committed
122 123 124 125
       --clean-iptables)
            CLEAN_IPTABLES=1;
            shift;
            ;;
126 127
       -C | --config-file)
            CONFIG_FILE=$2
gauthier's avatar
gauthier committed
128 129 130 131
            # may be relative path 
            if [ -f $(dirname $(readlink -f $0))/$CONFIG_FILE ]; then
                CONFIG_FILE=$(dirname $(readlink -f $0))/$CONFIG_FILE
                echo "setting config file to: $CONFIG_FILE"
132
                CONFIG_FILE_ACCESS_OK=1
gauthier's avatar
gauthier committed
133 134 135 136
            else
                # may be absolute path 
                if [ -f $CONFIG_FILE ]; then
                    echo "setting config file to: $CONFIG_FILE"
137
                    CONFIG_FILE_ACCESS_OK=1
gauthier's avatar
gauthier committed
138 139 140 141 142 143
                else
                    echo "config file not found"
                    exit 1
                fi
            fi
            EXE_ARGUMENTS="$EXE_ARGUMENTS -O $CONFIG_FILE"
144 145 146 147 148 149 150 151 152 153 154 155 156
            shift 2;
            ;;
       -d | --debug)
            DEBUG=1
            echo "setting debug flag to: $DEBUG"
            shift;
            ;;
       -D | --disable-check-installed-software)
            DISABLE_CHECK_INSTALLED_SOFTWARE=1
            echo "disable check installed software"
            shift;
            ;;
       -e | --realtime)
gauthier's avatar
gauthier committed
157
            RT=$2
158 159 160 161
            echo "setting realtime flag to: $RT"
            shift 2 ;
            ;;
       -g | --run-with-gdb)
gauthier's avatar
gauthier committed
162
            DEBUG=1
gauthier's avatar
gauthier committed
163
            RUN=1 
164 165
            RUN_GDB=1
            echo "Running with gdb"
gauthier's avatar
gauthier committed
166
            shift;
167 168 169 170 171 172 173 174 175
            ;;
       -K | --itti-dump-file)
            ITTI_ANALYZER=1
            ITTI_DUMP_FILE=$2
            echo "setting ITTI dump file to: $ITTI_DUMP_FILE"
            EXE_ARGUMENTS="$EXE_ARGUMENTS -K $ITTI_DUMP_FILE"
            shift 2;
            ;;
       -l | --build-target) 
gauthier's avatar
gauthier committed
176
            BUILD_LTE=$2
177 178 179 180 181 182 183 184 185 186 187 188 189 190
            echo "setting top-level build target to: $2"
            shift 2;
            ;;
       -h | --help)
            print_help
            exit -1
            ;;
       -m | --build-from-makefile)
            BUILD_FROM_MAKEFILE=1
            set_build_from_makefile $BUILD_FROM_MAKEFILE
            echo "setting a flag to build from makefile to: $BUILD_FROM_MAKEFILE"
            shift;
            ;;
       -r | --3gpp-release)
gauthier's avatar
gauthier committed
191
            REL=$2 
192 193 194
            echo "setting release to: $REL"
            shift 2 ;
            ;;
gauthier's avatar
gauthier committed
195 196 197
       -R | --run)
            RUN=1 
            echo "setting run to $RUN"
gauthier's avatar
gauthier committed
198
            shift;
gauthier's avatar
gauthier committed
199
            ;;
200 201 202 203 204 205
       -s | --check)
            OAI_TEST=1
            echo "setting sanity check to: $OAI_TEST"
            shift;
            ;;
       -t | --enb-build-target)
gauthier's avatar
gauthier committed
206 207
            TARGET=$2 
            echo "setting enb build target to: $TARGET"
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
            shift 2;
            ;;
       -V | --vcd)
            echo "setting gtk-wave output"
            VCD_TIMING=1
            EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
            shift ;
            ;;
       -w | --hardware)
            HW="$2" #"${i#*=}"
            echo "setting hardware to: $HW"
            shift 2 ;
            ;;
       -x | --xforms)
            XFORMS=1
gauthier's avatar
gauthier committed
223
            EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
224 225 226
            echo "setting xforms to: $XFORMS"
            shift;
            ;;
227 228 229 230 231
       -p | --wireshark)
	  WIRESHARK=1
	  echo "enabling Wireshark interface to $WIRESHARK"
          shift;
          ;;
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
       -z | --defaults)
            echo "setting all parameters to: default"
            rm -rf ./.lock_oaibuild
            OAI_CLEAN=1
            HW="EXMIMO"
            TARGET="ALL" 
            ENB_S1=1
            REL="REL8" 
            RT="NONE"
            DEBUG=0
            ENB_CONFIG_FILE=$OPENAIR_TARGETS/"PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.conf"
            OAI_TEST=0
            shift ;
            ;;
       *)   
            echo "Unknown option $1"
            break ;
nikaeinn's avatar
nikaeinn committed
249
            # unknown option
250
            ;;
251
   esac
nikaeinn's avatar
nikaeinn committed
252 253
done

254 255 256
#####################
# create a bin dir
#####################
257
echo_info "1. Creating the bin dir ..." 
gauthier's avatar
gauthier committed
258
mkdir -m 777 bin 
259 260 261 262

build_date=`date +%Y_%m_%d`
oai_build_date="oai_built_${build_date}"
touch bin/${oai_build_date} 
gauthier's avatar
gauthier committed
263 264
chmod -f 777 bin/${oai_build_date}

nikaeinn's avatar
nikaeinn committed
265
touch bin/install_log.txt
gauthier's avatar
gauthier committed
266
chmod -f 777 bin/install_log.txt
267 268 269
################################
# cleanup first 
################################
270
#echo_info "3. Cleaning ..."
271

272 273 274 275
#$SUDO kill -9 `ps -ef | grep oaisim | awk '{print $2}'` 2>&1
#$SUDO kill -9 `ps -ef | grep lte-softmodem | awk '{print $2}'`  2>&1
#$SUDO kill -9 `ps -ef | grep dlsim | awk '{print $2}'`  2>&1
#$SUDO kill -9 `ps -ef | grep ulsim | awk '{print $2}'`  2>&1
nikaeinn's avatar
nikaeinn committed
276

gauthier's avatar
gauthier committed
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
if [ $CLEAN_IPTABLES -eq 1 ]; then 
    echo_info "Flushing iptables..."
    $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"
fi
293
############################################
294
# setting and printing OAI envs, we should check here
295
############################################
296 297
    
echo_info "2. Setting the OAI PATHS ..."
298

nikaeinn's avatar
nikaeinn committed
299
set_openair_env 
300 301 302 303
cecho "OPENAIR_HOME    = $OPENAIR_HOME" $green
cecho "OPENAIR1_DIR    = $OPENAIR1_DIR" $green
cecho "OPENAIR2_DIR    = $OPENAIR2_DIR" $green
cecho "OPENAIR3_DIR    = $OPENAIR3_DIR" $green
304
cecho "OPENAIR3_DIR   = $OPENAIR3_DIR" $green
305 306 307 308 309 310 311
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green


echo "OPENAIR_HOME    = $OPENAIR_HOME" >>  bin/${oai_build_date}
echo "OPENAIR1_DIR    = $OPENAIR1_DIR"  >>  bin/${oai_build_date}
echo "OPENAIR2_DIR    = $OPENAIR2_DIR"  >>  bin/${oai_build_date}
echo "OPENAIR3_DIR    = $OPENAIR3_DIR"  >>  bin/${oai_build_date}
312
echo "OPENAIR3_DIR   = $OPENAIR3_DIR"  >>  bin/${oai_build_date}
313 314
echo "OPENAIR_TARGETS = $OPENAIR_TARGETS"  >>  bin/${oai_build_date}

315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335

build_enb(){

##########################################
# process parameters
#########################################

    echo_info "4. Process the parameters"

    echo_info "User-defined Parameters :  HW=$HW, TARGET=$TARGET, ENB_S1=$ENB_S1, REL=$REL, RT=$RT, DEBUG=$DEBUG XFORMS=$XFORMS"
    
    echo "User-defined Parameters :  HW=$HW, TARGET=$TARGET, ENB_S1=$ENB_S1, REL=$REL, RT=$RT, DEBUG=$DEBUG XFORMS=$XFORMS" >> bin/${oai_build_date}
    
 
############################################
# compilation directives 
############################################

    echo_info "5. building the compilation directives ..."
    
    
336 337 338
    SOFTMODEM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
    OAISIM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
    
gauthier's avatar
gauthier committed
339
    if [ $ENB_S1 -eq 1 ]; then 
340 341 342
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1  SECU=1 "
        #OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1  SECU=1 "
	OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES ENABLE_ITTI=1 LINK_ENB_PDCP_TO_GTPV1U=1  SECU=1 "
343 344
    fi 
    
gauthier's avatar
gauthier committed
345 346 347
    if [ $DEBUG -eq 0 ]; then 
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES DISABLE_XER_PRINT=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES DISABLE_XER_PRINT=1 "
348 349
    fi 

350
    if [ $HW = "USRP" ]; then 
gauthier's avatar
gauthier committed
351
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USRP=1 "
352 353 354
    fi
    
    if [ $HW = "EXMIMO" ]; then 
gauthier's avatar
gauthier committed
355
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES EXMIMO=1 "
356 357 358
    fi
    
    if [ $HW = "ETHERNET" ]; then 
gauthier's avatar
gauthier committed
359
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES ETHERNET=1 "
360 361 362
    fi 
    
    if [ $ENB_S1 -eq 0 ]; then 
gauthier's avatar
gauthier committed
363 364
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES NAS=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES NAS=1 "
365 366 367
    fi 
    
    if [ $REL = "REL8" ]; then
gauthier's avatar
gauthier committed
368 369
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel8=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel8=1 "
370
    else 
gauthier's avatar
gauthier committed
371 372
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel10=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel10=1 "
373 374 375
    fi
    
    if [ $RT = "RTAI" ]; then 
gauthier's avatar
gauthier committed
376 377 378 379 380 381 382
        if [ ! -f /usr/realtime/modules/rtai_hal.ko ];   then
            echo_warning "RTAI doesn't seem to be installed"
            RT="NONE"
            SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES RTAI=0 "
        else 
            SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES HARD_RT=1 "
        fi
383
    else 
gauthier's avatar
gauthier committed
384 385
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES RTAI=0 "
        RT="NONE"
386 387 388
    fi
    
    if [ $TARGET != "ALL" ]; then 
gauthier's avatar
gauthier committed
389 390 391
        if [ $TARGET  != "SOFTMODEM" ]; then 
            HW="NONE"
        fi
392 393
    fi
    
394
    if [ $UBUNTU_REL = "12.04" ]; then 
gauthier's avatar
gauthier committed
395 396 397 398 399 400
        output=$(check_for_machine_type 2>&1) 
        MACHINE_ARCH=$?
        if [ $MACHINE_ARCH -eq 64 ]; then
            SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES LIBCONFIG_LONG=1 "
            OAISIM_DIRECTIVES="$OASIM_DIRECTIVES LIBCONFIG_LONG=1 "
        fi
401 402 403 404 405 406 407 408 409
    fi
    
    echo_success "SOFTMODEM Compilation directives: $SOFTMODEM_DIRECTIVES"
    echo_success "OAISIM Compilation directives:    $OAISIM_DIRECTIVES"
    
    echo "SOFTMODEM Compilation directives: $SOFTMODEM_DIRECTIVES" >>  bin/${oai_build_date}
    echo "OAISIM Compilation directive:    $OAISIM_DIRECTIVES" >>  bin/${oai_build_date}
    
    
410 411 412
############################################
# check the installation
############################################
413 414 415 416 417 418 419 420 421 422 423
    if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then 
        echo_info "6. Checking the the required softwares/packages ..."

        check_install_oai_software  
        if [ $HW = "USRP" ]; then 
            check_install_usrp_uhd_driver 
        fi
        check_install_asn1c
        check_install_nettle
    else
        echo_info "6. Not checking the required softwares/packages ..."
gauthier's avatar
gauthier committed
424
        touch ./.lock_oaibuild
425
    fi
426
    
427 428 429 430
############################################
# compile 
############################################

431
    echo_info "7. compiling and installing the OAI binaries ..."
432

433 434 435
    softmodem_compiled=1
    oaisim_compiled=1
    unisim_compiled=1
436
    
437
    if [ $TARGET = "ALL" ]; then
gauthier's avatar
gauthier committed
438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462
        echo "############# compile_ltesoftmodem #############" >> bin/install_log.txt 
        output=$(compile_ltesoftmodem  >> bin/install_log.txt  2>&1 )
        softmodem_compiled=$?
        check_for_ltesoftmodem_executable
        echo_info "7.1 finished ltesoftmodem target : check the installation log file bin/install_log.txt" 

        echo "################ compile_oaisim #################"  >> bin/install_log.txt 
        output=$(compile_oaisim      >> bin/install_log.txt   2>&1 )
        oaisim_compiled=$?
        check_for_oaisim_executable
        echo_info "7.2 finished oaisim target : check the installation log file bin/install_log.txt" 

        echo "################## compile_unisim ##################"  >> bin/install_log.txt 
        output=$(compile_unisim      >> bin/install_log.txt  2>&1 )
        unisim_compiled=$?
        check_for_dlsim_executable
        check_for_ulsim_executable
        check_for_pucchsim_executable
        check_for_prachsim_executable
        check_for_pdcchsim_executable
        check_for_pbchsim_executable
        check_for_mbmssim_executable
        echo_info "7.3 finished unisim target : check the installation log file bin/install_log.txt" 


463
    else
gauthier's avatar
gauthier committed
464
        if [ $TARGET == "SOFTMODEM" ]; then 
gauthier's avatar
gauthier committed
465 466 467 468 469 470
            echo "############# compile_ltesoftmodem #############" >> bin/install_log.txt 
            output=$(compile_ltesoftmodem   >> bin/install_log.txt 2>&1 )
            softmodem_compiled=$?
            check_for_ltesoftmodem_executable
            echo_info "7.1 finished ltesoftmodem target: check the installation log file bin/install_log.txt"
            
gauthier's avatar
gauthier committed
471
            if [ $HW == "EXMIMO" ]; then 
gauthier's avatar
gauthier committed
472
                output=$(compile_exmimo2_driver   >> bin/install_log.txt  2>&1)
gauthier's avatar
gauthier committed
473 474 475 476 477 478 479 480
            fi
        fi
        if [ $TARGET = "OAISIM" ]; then 
            echo "################ compile_oaisim #################"  >> bin/install_log.txt 
            output=$(compile_oaisim   >> bin/install_log.txt 2>&1 )
            oaisim_compiled=$?	
            check_for_oaisim_executable
            echo_info "7.2 finished oaisim target: check the installation log file bin/install_log.txt" 
gauthier's avatar
gauthier committed
481 482 483 484 485 486 487
            
            if [ $ENB_S1 -eq 1 ]; then
                compile_nas_tools  2>&1
                nas_tools_compiled=$?  
                check_for_nas_tools_executable
                echo_info "7.2.1 finished nas ue target: check the installation log file bin/install_log.txt"
            fi
gauthier's avatar
gauthier committed
488 489 490 491 492 493 494 495 496 497 498 499 500 501
        fi
        if [ $TARGET = "UNISIM" ]; then 
           echo "################## compile_unisim ##################"  >> bin/install_log.txt 
            output=$(compile_unisim   >> bin/install_log.txt 2>&1 )
            unisim_compiled=$?
            check_for_dlsim_executable
            check_for_ulsim_executable
            check_for_pucchsim_executable
            check_for_prachsim_executable
            check_for_pdcchsim_executable
            check_for_pbchsim_executable
            check_for_mbmssim_executable
            echo_info "7.3 finished unisim target: check the installation log file bin/install_log.txt" 
        fi
502 503 504 505
    fi


############################################
nikaeinn's avatar
nikaeinn committed
506
# install 
507 508
############################################

509 510
    echo_info "8. Installing ..."
    
gauthier's avatar
gauthier committed
511
    if [ $softmodem_compiled -eq 0 ]; then 
gauthier's avatar
gauthier committed
512 513 514
        echo_success "target lte-softmodem built and installed in the bin directory"
        echo "target lte-softmodem built and installed in the bin directory"  >>  bin/${oai_build_date}
        output=$(install_ltesoftmodem $RT $HW $ENB_S1 )
515
    fi
gauthier's avatar
gauthier committed
516
    if [ $oaisim_compiled -eq 0 ]; then 
gauthier's avatar
gauthier committed
517 518 519
        echo_success "target oaisim built and installed in the bin directory"
        echo "target oaisim built and installed in the bin directory"  >>  bin/${oai_build_date}
        output=$(install_oaisim $ENB_S1 )
520
    fi 
gauthier's avatar
gauthier committed
521
    if [ $unisim_compiled -eq  0 ]; then 
gauthier's avatar
gauthier committed
522 523
        echo_success "target unisim built and installed in the bin directory"
        echo "target unisim built and installed in the bin directory"  >>  bin/${oai_build_date}
524 525 526 527 528
    fi 
    
    echo_info "build terminated, binaries are located in bin/"
    echo_info "build terminated, logs are located in bin/${oai_build_date} and bin/install_log.txt"
    
529 530


531 532
}
build_epc(){
nikaeinn's avatar
nikaeinn committed
533 534 535

    epc_compiled=1

gauthier's avatar
gauthier committed
536
    echo_info "Note: this scripts tested only on Ubuntu 14.04x64"
537 538 539 540

######################################
# CHECK MISC SOFTWARES AND LIBS      #
######################################
541 542
    if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then 
        echo_info "4. Checking the the required softwares/packages for EPC..."
543

544 545 546 547 548 549 550 551 552 553 554
        check_install_epc_software  
        check_install_asn1c
        if [ $OAI_CLEAN -eq 1 ]; then
            check_install_freediamter
        else 
            if [ ! -d /usr/local/etc/freeDiameter ]; then
                check_install_freediamter
            fi
        fi
    else
        echo_info "4. Not checking the required softwares/packages for EPC"
555 556 557 558 559 560
    fi

###########################################
# configure and compile
##########################################

nikaeinn's avatar
nikaeinn committed
561 562
    echo_info "5. configure and compile epc"

gauthier's avatar
gauthier committed
563
    output=$(compile_epc $OAI_CLEAN  >> $OPENAIR_TARGETS/bin/install_log.txt  2>&1 )
nikaeinn's avatar
nikaeinn committed
564
    epc_compiled=$?
565 566 567 568
    if [ $epc_compiled -ne 0 ]; then
        echo_error "EPC compilation failed : check the installation log file bin/install_log.txt" 
        exit 1
    fi
nikaeinn's avatar
nikaeinn committed
569 570
    check_for_epc_executable
    echo_info "finished epc target: check the installation log file bin/install_log.txt" 
571 572 573 574 575

    if [ $CONFIG_FILE_ACCESS_OK -eq 0 ]; then
        echo_error "You have to provide a EPC config file"
        exit 1
    fi
576
    
577
    TEMP_FILE=`tempfile`
578
    VARIABLES=" S6A_CONF\|\
gauthier's avatar
gauthier committed
579
           HSS_HOSTNAME\|\
580 581 582 583
           REALM"

    VARIABLES=$(echo $VARIABLES | sed -e 's/\\r//g')
    VARIABLES=$(echo $VARIABLES | tr -d ' ')
584 585 586
    cat $CONFIG_FILE | grep -w "$VARIABLES"| tr -d " " | tr -d ";" > $TEMP_FILE
    source $TEMP_FILE
    rm -f $TEMP_FILE
587 588 589 590 591 592 593 594 595 596 597 598 599

    if [ x"$REALM" == "x" ]; then
        echo_error "Your config file do not contain a REALM for S6A configuration"
        exit 1
    fi
    if [ x"$S6A_CONF" != "x./epc_s6a.conf" ]; then
        echo_error "Your config file do not contain the good path for the S6A config file,"
        echo_error "accordingly to what is done in this script, it should be set to epc_s6a.conf"
        exit 1
    fi

    check_epc_s6a_certificate $REALM

nikaeinn's avatar
nikaeinn committed
600 601 602 603 604 605
###########################################
# install the binary in bin
##########################################

    echo_info "6. install the binary file"

gauthier's avatar
gauthier committed
606
    if [ $epc_compiled -eq 0 ]; then 
607 608
        echo_success "target epc built and installed in the bin directory"
        echo "target epc built and installed in the bin directory"  >>  bin/${oai_build_date}
gauthier's avatar
gauthier committed
609
        cp -f $CONFIG_FILE  $OPENAIR_TARGETS/bin
610
        cp -f $OPENAIR3_DIR/objs/UTILS/CONF/s6a.conf  $OPENAIR_TARGETS/bin/epc_s6a.conf
nikaeinn's avatar
nikaeinn committed
611
    fi
612 613 614
}

build_hss(){
615
    echo_info "Note: this script tested only for Ubuntu 12.04 x64 -> 14.04 x64"
616 617 618 619

######################################
# CHECK MISC SOFTWARES AND LIBS      #
######################################
gauthier's avatar
gauthier committed
620 621 622
    if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then 
        echo_info "4. check the required packages for HSS"
        check_install_hss_software
gauthier's avatar
gauthier committed
623
        if [ $OAI_CLEAN -eq 1 ]; then
624
            check_install_freediamter
gauthier's avatar
gauthier committed
625 626 627 628
        else 
            if [ ! -d /usr/local/etc/freeDiameter ]; then
                check_install_freediamter
            fi
629
        fi
gauthier's avatar
gauthier committed
630 631
    else
        echo_info "4. Not checking the required packages for HSS"
632
    fi
gauthier's avatar
gauthier committed
633
    
nikaeinn's avatar
nikaeinn committed
634
  
635 636 637
######################################
# compile HSS                        #
######################################
nikaeinn's avatar
nikaeinn committed
638
    echo_info "5. compile HSS"
gauthier's avatar
gauthier committed
639

gauthier's avatar
gauthier committed
640
     # Bad behaviour of $OAI_CLEAN with ./.lock_oaibuild ...
gauthier's avatar
gauthier committed
641
     compile_hss $CLEAN_HSS
nikaeinn's avatar
nikaeinn committed
642 643
     hss_compiled=$?
     check_for_hss_executable
gauthier's avatar
gauthier committed
644
     echo_info "finished hss target" 
nikaeinn's avatar
nikaeinn committed
645
 
646 647 648 649 650
######################################
# Check certificates                 #
######################################
  
    TEMP_FILE=`tempfile`
651 652 653 654
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss_fd.conf | grep -w "Identity" | tr -d " " | tr -d ";" > $TEMP_FILE
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_user" | tr -d " " | tr -d ";" >> $TEMP_FILE
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_pass" | tr -d " " | tr -d ";" >> $TEMP_FILE
    cat $OPENAIR3_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_db" | tr -d " " | tr -d ";" >> $TEMP_FILE
655 656 657 658 659 660 661 662
    source $TEMP_FILE
    rm -f  $TEMP_FILE

    if [ x"$Identity" == "x" ]; then
        echo_error "Your config file do not contain a host identity for S6A configuration"
        exit 1
    fi
    HSS_REALM=$(echo $Identity | sed 's/.*\.//')
gauthier's avatar
gauthier committed
663 664 665 666
    HSS_HOSTNAME=${Identity%.$HSS_REALM}
    NEW_HOSTNAME=`hostname -s`
    if [ "x$HSS_HOSTNAME" != "x$NEW_HOSTNAME" ]; then
       echo_warning "Changing identity of HSS from <$HSS_HOSTNAME.$HSS_REALM> to <$NEW_HOSTNAME.$HSS_REALM>"
667
       sed -ibak "s/$HSS_HOSTNAME/$NEW_HOSTNAME/"  $OPENAIR3_DIR/OPENAIRHSS/conf/hss_fd.conf 
gauthier's avatar
gauthier committed
668
    fi
669 670
    check_hss_s6a_certificate $HSS_REALM
    
671 672 673
######################################
# fill the HSS DB
######################################
nikaeinn's avatar
nikaeinn committed
674
     echo_info "6. create HSS database (for EURECOM SIM CARDS)"
nikaeinn's avatar
nikaeinn committed
675
     hss_db_created=1
gauthier's avatar
gauthier committed
676
     create_hss_database $OAI_DB_ADMIN_USER_NAME $OAI_DB_ADMIN_USER_PASSWORD $MYSQL_user $MYSQL_pass $MYSQL_db
gauthier's avatar
gauthier committed
677 678
     if [ $? -eq 1 ]; then
         echo_fatal "hss DB not created"
nikaeinn's avatar
nikaeinn committed
679
     fi
680 681
}

682

nikaeinn's avatar
nikaeinn committed
683
 
gauthier's avatar
gauthier committed
684

nikaeinn's avatar
nikaeinn committed
685
echo_info "3. set the top-level build target"
686
case "$BUILD_LTE" in
687 688 689 690 691
    'ENB')
         echo_success "build LTE eNB"
         build_enb
         ;;
    'EPC')
692
         echo_success "build EPC(MME and xGW)"
693 694 695
         build_epc
         ;;
    'HSS')
696 697 698
        echo_success "build HSS"
        build_hss 
        ;;
699
    'NONE')
700
        ;;
701
    *)
702
        ;;
703 704 705 706 707 708 709
esac

# Additional operation 

############################################
# Generate doxygen documentation
############################################
710

711 712 713 714 715 716 717
if [ $DOXYGEN = 1 ]; then 
    echo_info "9. Generate doxygen documentation ..."
    doxygen $OPENAIR_TARGETS/DOCS/Doxyfile
    echo_info "9.1 use your navigator to open $OPENAIR_TARGETS/DOCS/html/index.html "
else 
    echo_info "9. Bypassing doxygen documentation ..."
fi 
718 719 720 721 722 723


############################################
# testing
############################################
    
724 725 726 727 728 729
if [ $OAI_TEST -eq 1 ]; then 
    echo_info "10. Running OAI pre commit tests (pre-ci) ..."
    python $OPENAIR_TARGETS/TEST/OAI/test01.py -l 
else 
    echo_info "10. Bypassing the Tests ..."
fi 
730 731 732 733
    
############################################
# run 
############################################
nikaeinn's avatar
nikaeinn committed
734

gauthier's avatar
gauthier committed
735
if [ $RUN -ne 0 ]; then 
gauthier's avatar
gauthier committed
736
    echo_info "11. Running ..."
gauthier's avatar
gauthier committed
737 738 739 740 741 742 743 744
    cd $OPENAIR_TARGETS/bin
    case "$BUILD_LTE" in
        'ENB')
            if [ $TARGET == "SOFTMODEM" ]; then 
                if [ $HW == "EXMIMO" ]; then 
                    $SUDO chmod 777 $OPENAIR_TARGETS/RT/USER/init_exmimo2.sh
                    $SUDO $OPENAIR_TARGETS/RT/USER/init_exmimo2.sh
                fi
745 746 747
		if [ $WIRESHARK -eq 1 ]; then 
		    EXE_ARGUMENTS="$EXE_ARGUMENTS -W"
		fi 
gauthier's avatar
gauthier committed
748 749
                echo "############# running ltesoftmodem #############"
                if [ $RUN_GDB -eq 0 ]; then 
knopp's avatar
knopp committed
750
                    $SUDO $OPENAIR_TARGETS/bin/lte-softmodem  `echo $EXE_ARGUMENTS`
gauthier's avatar
gauthier committed
751
                else
gauthier's avatar
gauthier committed
752
                    $SUDO setenv MALLOC_CHECK_ 2
gauthier's avatar
gauthier committed
753 754 755 756 757 758
                    $SUDO touch ~/.gdb_lte_softmodem
                    $SUDO echo "file $OPENAIR_TARGETS/bin/lte-softmodem" > ~/.gdb_lte_softmodem
                    $SUDO echo "set args $EXE_ARGUMENTS" >> ~/.gdb_lte_softmodem
                    $SUDO echo "run" >> ~/.gdb_lte_softmodem
                    $SUDO gdb -nh -x ~/.gdb_lte_softmodem 2>&1 
                fi
gauthier's avatar
gauthier committed
759 760 761 762
                
            elif [ $TARGET == "OAISIM" ]; then
            
                if [ $ENB_S1 -eq 0 ]; then
nikaeinn's avatar
nikaeinn committed
763
		    install_nasmesh
gauthier's avatar
gauthier committed
764 765 766 767
                else
                    # prepare NAS for UE
                    if [ ! -f .ue.nvram ]; then
                        echo_success "generate .ue_emm.nvram .ue.nvram"
768
                        $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/ue_data --gen
gauthier's avatar
gauthier committed
769 770 771 772
                    fi

                    if [ ! -f .usim.nvram ]; then
                        echo_success "generate .usim.nvram"
773
                        $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/usim_data --gen
gauthier's avatar
gauthier committed
774
                    fi
775 776
                    $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/ue_data --print
                    $OPENAIR3_DIR/NAS/EURECOM-NAS/bin/usim_data --print
gauthier's avatar
gauthier committed
777 778 779 780

                    insmod  $OPENAIR2_DIR/NETWORK_DRIVER/UE_IP/ue_ip.ko
                    
                fi
781 782 783
                if [ $WIRESHARK -eq 1 ]; then 
		    EXE_ARGUMENTS="$EXE_ARGUMENTS -P wireshark"
		fi 
gauthier's avatar
gauthier committed
784 785 786 787 788 789 790 791 792 793
                if [ $RUN_GDB -eq 0 ]; then 
                    $SUDO exec $OPENAIR_TARGETS/bin/oaisim  `echo $EXE_ARGUMENTS`
                else
                    $SUDO setenv MALLOC_CHECK_ 2
                    $SUDO touch ~/.gdb_oaisim
                    $SUDO echo "file $OPENAIR_TARGETS/bin/lte-oaisim" > ~/.gdb_oaisim
                    $SUDO echo "set args $EXE_ARGUMENTS" >> ~/.gdb_oaisim
                    $SUDO echo "run" >> ~/.gdb_oaisim
                    $SUDO gdb -nh -x ~/.gdb_oaisim 2>&1 
                fi
gauthier's avatar
gauthier committed
794
            fi
gauthier's avatar
gauthier committed
795
            ;;
gauthier's avatar
gauthier committed
796 797
        
        
gauthier's avatar
gauthier committed
798
        'EPC')
gauthier's avatar
gauthier committed
799
            echo "############# running EPC #############"
gauthier's avatar
gauthier committed
800
            test_is_host_reachable $HSS_HOSTNAME.$REALM HSS
gauthier's avatar
gauthier committed
801
            if [ $RUN_GDB -eq 0 ]; then
nikaeinn's avatar
nikaeinn committed
802
                $SUDO $OPENAIR_TARGETS/bin/oai_epc  `echo $EXE_ARGUMENTS`
gauthier's avatar
gauthier committed
803
            else
nikaeinn's avatar
nikaeinn committed
804 805 806 807 808
                touch ~/.gdb_epc
                chmod 777 ~/.gdb_epc
                echo "file $OPENAIR_TARGETS/bin/oai_epc" > ~/.gdb_epc
                echo "set args $EXE_ARGUMENTS" >> ~/.gdb_epc
                echo "run" >> ~/.gdb_epc
gauthier's avatar
gauthier committed
809 810 811
                $SUDO gdb -nh -x ~/.gdb_epc 2>&1 
            fi
            ;;
gauthier's avatar
gauthier committed
812 813
        
        
gauthier's avatar
gauthier committed
814
        'HSS')
gauthier's avatar
gauthier committed
815
            echo "############# running HSS #############"
816
            cd $OPENAIR3_DIR/OPENAIRHSS/objs
gauthier's avatar
gauthier committed
817
            if [ $RUN_GDB -eq 0 ]; then
gauthier's avatar
gauthier committed
818
                $SUDO exec ./openair-hss -c ./conf/hss.conf
gauthier's avatar
gauthier committed
819
            else
nikaeinn's avatar
nikaeinn committed
820 821 822
                touch ~/.gdb_hss
                chmod 777 ~/.gdb_hss
                echo "file ./openair-hss" > ~/.gdb_hss
gauthier's avatar
gauthier committed
823
                echo "set args -c ./conf/hss.conf" >> ~/.gdb_hss
nikaeinn's avatar
nikaeinn committed
824
                echo "run" >> ~/.gdb_hss
gauthier's avatar
gauthier committed
825 826
                $SUDO gdb -nh -x ~/.gdb_hss 2>&1 
            fi
gauthier's avatar
gauthier committed
827
             ;;
gauthier's avatar
gauthier committed
828 829
         
         
gauthier's avatar
gauthier committed
830 831
        'NONE')
             ;;
gauthier's avatar
gauthier committed
832 833
         
         
gauthier's avatar
gauthier committed
834 835 836 837 838 839 840 841
        *)
             echo_error "Unknown option $BUILD_LTE: do not execute"
             ;;
    esac
else
    echo_info "11. No run requested, end of script"
    exit 0
fi
842

gauthier's avatar
gauthier committed
843