build_oai.bash 27.2 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
8
#    (at your option) anylater version.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#
#
#    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
#  OpenAirInterface Dev  : openair4g-devel@eurecom.fr
#
#  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.
Lionel Gauthier's avatar
Lionel Gauthier committed
31
# author  Navid Nikaein, Lionel GAUTHIER
32
# company Eurecom
Lionel Gauthier's avatar
Lionel 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
######################################
Lionel Gauthier's avatar
Lionel 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
Lionel Gauthier's avatar
Lionel Gauthier committed
52
declare BUILD_LTE="" # ENB, EPC, HSS, NONE
53 54 55 56 57 58 59

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

declare OAI_TEST=0
declare XFORMS=0
72

73
# script is not currently handling these params
74
declare EPC=0 # flag to build EPC
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

Navid Nikaein's avatar
Navid Nikaein committed
87
############## script params #####################
88

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

100

Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel 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;
            ;;
Lionel Gauthier's avatar
Lionel Gauthier committed
122 123 124 125
       --clean-iptables)
            CLEAN_IPTABLES=1;
            shift;
            ;;
126 127
       -C | --config-file)
            CONFIG_FILE=$2
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel 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)
Lionel Gauthier's avatar
 
Lionel Gauthier committed
157
            RT=$2
158 159 160 161
            echo "setting realtime flag to: $RT"
            shift 2 ;
            ;;
       -g | --run-with-gdb)
Lionel Gauthier's avatar
 
Lionel Gauthier committed
162
            DEBUG=1
Lionel Gauthier's avatar
 
Lionel Gauthier committed
163
            RUN=1 
164 165
            RUN_GDB=1
            echo "Running with gdb"
Lionel Gauthier's avatar
 
Lionel 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) 
Lionel Gauthier's avatar
 
Lionel 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)
Lionel Gauthier's avatar
 
Lionel Gauthier committed
191
            REL=$2 
192 193 194
            echo "setting release to: $REL"
            shift 2 ;
            ;;
Lionel Gauthier's avatar
 
Lionel Gauthier committed
195 196 197
       -R | --run)
            RUN=1 
            echo "setting run to $RUN"
Lionel Gauthier's avatar
Lionel Gauthier committed
198
            shift;
Lionel Gauthier's avatar
 
Lionel 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)
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
Lionel Gauthier committed
223
            EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
            echo "setting xforms to: $XFORMS"
            shift;
            ;;
       -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 ;
Navid Nikaein's avatar
Navid Nikaein committed
244
            # unknown option
245
            ;;
246
   esac
Navid Nikaein's avatar
Navid Nikaein committed
247 248
done

249 250 251
#####################
# create a bin dir
#####################
252
echo_info "1. Creating the bin dir ..." 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
253
mkdir -m 777 bin 
254 255 256 257

build_date=`date +%Y_%m_%d`
oai_build_date="oai_built_${build_date}"
touch bin/${oai_build_date} 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
258 259
chmod -f 777 bin/${oai_build_date}

Navid Nikaein's avatar
Navid Nikaein committed
260
touch bin/install_log.txt
Lionel Gauthier's avatar
 
Lionel Gauthier committed
261
chmod -f 777 bin/install_log.txt
262 263 264
################################
# cleanup first 
################################
265
#echo_info "3. Cleaning ..."
266

267 268 269 270
#$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
Navid Nikaein's avatar
Navid Nikaein committed
271

Lionel Gauthier's avatar
Lionel Gauthier committed
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287
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
288
############################################
289
# setting and printing OAI envs, we should check here
290
############################################
291 292
    
echo_info "2. Setting the OAI PATHS ..."
293

Navid Nikaein's avatar
Navid Nikaein committed
294
set_openair_env 
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
cecho "OPENAIR_HOME    = $OPENAIR_HOME" $green
cecho "OPENAIR1_DIR    = $OPENAIR1_DIR" $green
cecho "OPENAIR2_DIR    = $OPENAIR2_DIR" $green
cecho "OPENAIR3_DIR    = $OPENAIR3_DIR" $green
cecho "OPENAIRCN_DIR   = $OPENAIRCN_DIR" $green
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}
echo "OPENAIRCN_DIR   = $OPENAIRCN_DIR"  >>  bin/${oai_build_date}
echo "OPENAIR_TARGETS = $OPENAIR_TARGETS"  >>  bin/${oai_build_date}

310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

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 ..."
    
    
331 332 333
    SOFTMODEM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
    OAISIM_DIRECTIVES="DEBUG=$DEBUG XFORMS=$XFORMS "
    
Lionel Gauthier's avatar
 
Lionel Gauthier committed
334 335 336
    if [ $ENB_S1 -eq 1 ]; then 
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_PDCP_TO_GTPV1U=1  SECU=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES USE_MME=R10 ENABLE_ITTI=1 LINK_PDCP_TO_GTPV1U=1  SECU=1 "
337 338
    fi 
    
Lionel Gauthier's avatar
 
Lionel Gauthier committed
339 340 341
    if [ $DEBUG -eq 0 ]; then 
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES DISABLE_XER_PRINT=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES DISABLE_XER_PRINT=1 "
342 343
    fi 

344
    if [ $HW = "USRP" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
345
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES USRP=1 "
346 347 348
    fi
    
    if [ $HW = "EXMIMO" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
349
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES EXMIMO=1 "
350 351 352
    fi
    
    if [ $HW = "ETHERNET" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
353
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES ETHERNET=1 "
354 355 356
    fi 
    
    if [ $ENB_S1 -eq 0 ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
357 358
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES NAS=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES NAS=1 "
359 360 361
    fi 
    
    if [ $REL = "REL8" ]; then
Lionel Gauthier's avatar
 
Lionel Gauthier committed
362 363
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel8=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel8=1 "
364
    else 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
365 366
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES Rel10=1 "
        OAISIM_DIRECTIVES="$OAISIM_DIRECTIVES Rel10=1 "
367 368 369
    fi
    
    if [ $RT = "RTAI" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
370 371 372 373 374 375 376
        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
377
    else 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
378 379
        SOFTMODEM_DIRECTIVES="$SOFTMODEM_DIRECTIVES RTAI=0 "
        RT="NONE"
380 381 382
    fi
    
    if [ $TARGET != "ALL" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
383 384 385
        if [ $TARGET  != "SOFTMODEM" ]; then 
            HW="NONE"
        fi
386 387
    fi
    
388
    if [ $UBUNTU_REL = "12.04" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
389 390 391 392 393 394
        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
395 396 397 398 399 400 401 402 403
    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}
    
    
404 405 406
############################################
# check the installation
############################################
407 408 409 410 411 412 413 414 415 416 417
    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 ..."
Lionel Gauthier's avatar
 
Lionel Gauthier committed
418
        touch ./.lock_oaibuild
419
    fi
420
    
421 422 423 424
############################################
# compile 
############################################

425
    echo_info "7. compiling and installing the OAI binaries ..."
426

427 428 429
    softmodem_compiled=1
    oaisim_compiled=1
    unisim_compiled=1
430
    
431
    if [ $TARGET = "ALL" ]; then
Lionel Gauthier's avatar
 
Lionel Gauthier committed
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456
        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" 


457
    else
Lionel Gauthier's avatar
 
Lionel Gauthier committed
458
        if [ $TARGET == "SOFTMODEM" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
459 460 461 462 463 464
            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"
            
Lionel Gauthier's avatar
 
Lionel Gauthier committed
465
            if [ $HW == "EXMIMO" ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
466
                output=$(compile_exmimo2_driver   >> bin/install_log.txt  2>&1)
Lionel Gauthier's avatar
 
Lionel Gauthier committed
467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489
            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" 
        
        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
490 491 492 493
    fi


############################################
494
# install 
495 496
############################################

497 498
    echo_info "8. Installing ..."
    
Lionel Gauthier's avatar
 
Lionel Gauthier committed
499
    if [ $softmodem_compiled -eq 0 ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
500 501 502
        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 )
503
    fi
Lionel Gauthier's avatar
 
Lionel Gauthier committed
504
    if [ $oaisim_compiled -eq 0 ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
505 506 507
        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 )
508
    fi 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
509
    if [ $unisim_compiled -eq  0 ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
510 511
        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}
512 513 514 515 516
    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"
    
517 518


519 520
}
build_epc(){
Navid Nikaein's avatar
 
Navid Nikaein committed
521 522 523

    epc_compiled=1

Lionel Gauthier's avatar
 
Lionel Gauthier committed
524
    echo_info "Note: this scripts tested only on Ubuntu 14.04x64"
525 526 527 528

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

532 533 534 535 536 537 538 539 540 541 542
        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"
543 544 545 546 547 548
    fi

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

Navid Nikaein's avatar
 
Navid Nikaein committed
549 550
    echo_info "5. configure and compile epc"

Lionel Gauthier's avatar
 
Lionel Gauthier committed
551
    output=$(compile_epc $OAI_CLEAN  >> $OPENAIR_TARGETS/bin/install_log.txt  2>&1 )
Navid Nikaein's avatar
 
Navid Nikaein committed
552
    epc_compiled=$?
553 554 555 556
    if [ $epc_compiled -ne 0 ]; then
        echo_error "EPC compilation failed : check the installation log file bin/install_log.txt" 
        exit 1
    fi
Navid Nikaein's avatar
 
Navid Nikaein committed
557 558
    check_for_epc_executable
    echo_info "finished epc target: check the installation log file bin/install_log.txt" 
559 560 561 562 563

    if [ $CONFIG_FILE_ACCESS_OK -eq 0 ]; then
        echo_error "You have to provide a EPC config file"
        exit 1
    fi
564
    
565
    TEMP_FILE=`tempfile`
566
    VARIABLES=" S6A_CONF\|\
Lionel Gauthier's avatar
Lionel Gauthier committed
567
           HSS_HOSTNAME\|\
568 569 570 571
           REALM"

    VARIABLES=$(echo $VARIABLES | sed -e 's/\\r//g')
    VARIABLES=$(echo $VARIABLES | tr -d ' ')
572 573 574
    cat $CONFIG_FILE | grep -w "$VARIABLES"| tr -d " " | tr -d ";" > $TEMP_FILE
    source $TEMP_FILE
    rm -f $TEMP_FILE
575 576 577 578 579 580 581 582 583 584 585 586 587

    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

Navid Nikaein's avatar
 
Navid Nikaein committed
588 589 590 591 592 593
###########################################
# install the binary in bin
##########################################

    echo_info "6. install the binary file"

Lionel Gauthier's avatar
 
Lionel Gauthier committed
594
    if [ $epc_compiled -eq 0 ]; then 
595 596
        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}
Lionel Gauthier's avatar
 
Lionel Gauthier committed
597
        cp -f $CONFIG_FILE  $OPENAIR_TARGETS/bin
598
        cp -f $OPENAIRCN_DIR/objs/UTILS/CONF/s6a.conf  $OPENAIR_TARGETS/bin/epc_s6a.conf
Navid Nikaein's avatar
 
Navid Nikaein committed
599
    fi
600 601 602
}

build_hss(){
603
    echo_info "Note: this script tested only for Ubuntu 12.04 x64 -> 14.04 x64"
604 605 606 607

######################################
# CHECK MISC SOFTWARES AND LIBS      #
######################################
Lionel Gauthier's avatar
 
Lionel Gauthier committed
608 609 610
    if [ $DISABLE_CHECK_INSTALLED_SOFTWARE -eq 0 ]; then 
        echo_info "4. check the required packages for HSS"
        check_install_hss_software
Lionel Gauthier's avatar
 
Lionel Gauthier committed
611
        if [ $OAI_CLEAN -eq 1 ]; then
612
            check_install_freediamter
Lionel Gauthier's avatar
 
Lionel Gauthier committed
613 614 615 616
        else 
            if [ ! -d /usr/local/etc/freeDiameter ]; then
                check_install_freediamter
            fi
617
        fi
Lionel Gauthier's avatar
 
Lionel Gauthier committed
618 619
    else
        echo_info "4. Not checking the required packages for HSS"
620
    fi
Lionel Gauthier's avatar
 
Lionel Gauthier committed
621
    
Navid Nikaein's avatar
 
Navid Nikaein committed
622
  
623 624 625
######################################
# compile HSS                        #
######################################
Navid Nikaein's avatar
 
Navid Nikaein committed
626
    echo_info "5. compile HSS"
Lionel Gauthier's avatar
 
Lionel Gauthier committed
627

Lionel Gauthier's avatar
 
Lionel Gauthier committed
628
     # Bad behaviour of $OAI_CLEAN with ./.lock_oaibuild ...
Lionel Gauthier's avatar
Lionel Gauthier committed
629
     compile_hss $CLEAN_HSS
Navid Nikaein's avatar
 
Navid Nikaein committed
630 631
     hss_compiled=$?
     check_for_hss_executable
Lionel Gauthier's avatar
Lionel Gauthier committed
632
     echo_info "finished hss target" 
Navid Nikaein's avatar
 
Navid Nikaein committed
633
 
634 635 636 637 638 639
######################################
# Check certificates                 #
######################################
  
    TEMP_FILE=`tempfile`
    cat $OPENAIRCN_DIR/OPENAIRHSS/conf/hss_fd.conf | grep -w "Identity" | tr -d " " | tr -d ";" > $TEMP_FILE
Lionel Gauthier's avatar
 
Lionel Gauthier committed
640 641 642
    cat $OPENAIRCN_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_user" | tr -d " " | tr -d ";" >> $TEMP_FILE
    cat $OPENAIRCN_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_pass" | tr -d " " | tr -d ";" >> $TEMP_FILE
    cat $OPENAIRCN_DIR/OPENAIRHSS/conf/hss.conf    | grep -w "MYSQL_db" | tr -d " " | tr -d ";" >> $TEMP_FILE
643 644 645 646 647 648 649 650
    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/.*\.//')
Lionel Gauthier's avatar
 
Lionel Gauthier committed
651 652 653 654 655 656
    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>"
       sed -ibak "s/$HSS_HOSTNAME/$NEW_HOSTNAME/"  $OPENAIRCN_DIR/OPENAIRHSS/conf/hss_fd.conf 
    fi
657 658
    check_hss_s6a_certificate $HSS_REALM
    
659 660 661
######################################
# fill the HSS DB
######################################
Navid Nikaein's avatar
 
Navid Nikaein committed
662
     echo_info "6. create HSS database (for EURECOM SIM CARDS)"
Navid Nikaein's avatar
 
Navid Nikaein committed
663
     hss_db_created=1
Lionel Gauthier's avatar
 
Lionel Gauthier committed
664
     create_hss_database $OAI_DB_ADMIN_USER_NAME $OAI_DB_ADMIN_USER_PASSWORD $MYSQL_user $MYSQL_pass $MYSQL_db
Lionel Gauthier's avatar
Lionel Gauthier committed
665 666
     if [ $? -eq 1 ]; then
         echo_fatal "hss DB not created"
Navid Nikaein's avatar
 
Navid Nikaein committed
667
     fi
668 669
}

670

Navid Nikaein's avatar
Navid Nikaein committed
671
 
672 673 674 675
############################################
# set the build 
############################################

Lionel Gauthier's avatar
Lionel Gauthier committed
676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695
if [ x$BUILD_LTE == x ]; then
    : ${DIALOG_OK=0}
    : ${DIALOG_CANCEL=1}
    : ${DIALOG_HELP=2}
    : ${DIALOG_EXTRA=3}
    : ${DIALOG_ITEM_HELP=4}
    : ${DIALOG_ESC=255}

    : ${SIG_NONE=0}
    : ${SIG_HUP=1}
    : ${SIG_INT=2}
    : ${SIG_QUIT=3}
    : ${SIG_KILL=9}
    : ${SIG_TERM=15}
    input=`tempfile 2>/dev/null` || input=/tmp/input$$
    output=`tempfile 2>/dev/null` || output=/tmp/test$$
    trap "rm -f $input $output" $SIG_NONE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM
    cat >$input <<-EOF
ENB:  evolved Node B target
EPC:  Experimental Evolved Packet Core target
Lionel Gauthier's avatar
 
Lionel Gauthier committed
696
HSS:  Experimental Home Subscriber Server target
Lionel Gauthier's avatar
Lionel Gauthier committed
697 698 699 700 701 702
NONE: Do not build/run anything
EOF
    cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output
    cat $output >$input
    
    BUILD_LTE="NONE"
Lionel Gauthier's avatar
 
Lionel Gauthier committed
703
    dialog --clear --title "BUILD TARGET SELECTION" \
Lionel Gauthier's avatar
Lionel Gauthier committed
704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732
            --menu "You did not choose a target \n\
    to build (optionaly to run) \n\
    You can use the UP/DOWN arrow keys, \n\
    the first letter of the choice as a hot key,\n\
    or the number keys 1-4 to choose an option.\n\
    \n\n\
        Choose the target:" 20 69 4 \
        --file $input 2> $output
    retval=$?
    tempfile=$output
    case $retval in
      $DIALOG_OK)
        BUILD_LTE=`cat $tempfile`
        ;;
      $DIALOG_CANCEL)
        ;;
      $DIALOG_HELP)
        ;;
      $DIALOG_EXTRA)
        ;;
      $DIALOG_ITEM_HELP)
        ;;
      $DIALOG_ESC)
        ;;
      *)
         ;;
    esac
fi

Navid Nikaein's avatar
 
Navid Nikaein committed
733
echo_info "3. set the top-level build target"
734
case "$BUILD_LTE" in
735 736 737 738 739
    'ENB')
         echo_success "build LTE eNB"
         build_enb
         ;;
    'EPC')
740
         echo_success "build EPC(MME and xGW)"
741 742 743
         build_epc
         ;;
    'HSS')
744 745 746
        echo_success "build HSS"
        build_hss 
        ;;
747
    'NONE')
748
        ;;
749
    *)
750
        ;;
751 752 753 754 755 756 757
esac

# Additional operation 

############################################
# Generate doxygen documentation
############################################
758

759 760 761 762 763 764 765
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 
766 767 768 769 770 771


############################################
# testing
############################################
    
772 773 774 775 776 777
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 
778 779 780 781
    
############################################
# run 
############################################
Lionel Gauthier's avatar
 
Lionel Gauthier committed
782
if [ $RUN -ne 0 ]; then 
Lionel Gauthier's avatar
 
Lionel Gauthier committed
783
    echo_info "11. Running ..."
Lionel Gauthier's avatar
 
Lionel Gauthier committed
784 785 786 787 788 789 790 791 792 793 794 795
    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
                echo "############# running ltesoftmodem #############"
                if [ $RUN_GDB -eq 0 ]; then 
                    $SUDO exec $OPENAIR_TARGETS/bin/lte-softmodem  `echo $EXE_ARGUMENTS`
                else
Lionel Gauthier's avatar
 
Lionel Gauthier committed
796
                    $SUDO setenv MALLOC_CHECK_ 2
Lionel Gauthier's avatar
 
Lionel Gauthier committed
797 798 799 800 801 802
                    $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
Lionel Gauthier's avatar
 
Lionel Gauthier committed
803
            fi
Lionel Gauthier's avatar
 
Lionel Gauthier committed
804
            ;;
Lionel Gauthier's avatar
 
Lionel Gauthier committed
805 806
        
        
Lionel Gauthier's avatar
 
Lionel Gauthier committed
807
        'EPC')
Lionel Gauthier's avatar
 
Lionel Gauthier committed
808
            echo "############# running EPC #############"
Lionel Gauthier's avatar
Lionel Gauthier committed
809
            test_is_host_reachable $HSS_HOSTNAME.$REALM HSS
Lionel Gauthier's avatar
 
Lionel Gauthier committed
810
            if [ $RUN_GDB -eq 0 ]; then
Navid Nikaein's avatar
Navid Nikaein committed
811
                $SUDO $OPENAIR_TARGETS/bin/oai_epc  `echo $EXE_ARGUMENTS`
Lionel Gauthier's avatar
 
Lionel Gauthier committed
812
            else
813 814 815 816 817
                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
Lionel Gauthier's avatar
 
Lionel Gauthier committed
818 819 820
                $SUDO gdb -nh -x ~/.gdb_epc 2>&1 
            fi
            ;;
Lionel Gauthier's avatar
 
Lionel Gauthier committed
821 822
        
        
Lionel Gauthier's avatar
 
Lionel Gauthier committed
823
        'HSS')
Lionel Gauthier's avatar
 
Lionel Gauthier committed
824
            echo "############# running HSS #############"
Lionel Gauthier's avatar
Lionel Gauthier committed
825
            cd $OPENAIRCN_DIR/OPENAIRHSS/objs
Lionel Gauthier's avatar
 
Lionel Gauthier committed
826
            if [ $RUN_GDB -eq 0 ]; then
Lionel Gauthier's avatar
Lionel Gauthier committed
827
                $SUDO exec ./openair-hss -c ./conf/hss.conf
Lionel Gauthier's avatar
 
Lionel Gauthier committed
828
            else
829 830 831
                touch ~/.gdb_hss
                chmod 777 ~/.gdb_hss
                echo "file ./openair-hss" > ~/.gdb_hss
Lionel Gauthier's avatar
Lionel Gauthier committed
832
                echo "set args -c ./conf/hss.conf" >> ~/.gdb_hss
833
                echo "run" >> ~/.gdb_hss
Lionel Gauthier's avatar
 
Lionel Gauthier committed
834 835
                $SUDO gdb -nh -x ~/.gdb_hss 2>&1 
            fi
Lionel Gauthier's avatar
 
Lionel Gauthier committed
836
             ;;
Lionel Gauthier's avatar
 
Lionel Gauthier committed
837 838
         
         
Lionel Gauthier's avatar
 
Lionel Gauthier committed
839 840
        'NONE')
             ;;
Lionel Gauthier's avatar
 
Lionel Gauthier committed
841 842
         
         
Lionel Gauthier's avatar
 
Lionel Gauthier committed
843 844 845 846 847 848 849 850
        *)
             echo_error "Unknown option $BUILD_LTE: do not execute"
             ;;
    esac
else
    echo_info "11. No run requested, end of script"
    exit 0
fi
851

Lionel Gauthier's avatar
 
Lionel Gauthier committed
852