build_oai 38.8 KB
Newer Older
thomasl's avatar
thomasl committed
1
#!/bin/bash
2 3 4 5 6
#/*
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
# * contributor license agreements.  See the NOTICE file distributed with
# * this work for additional information regarding copyright ownership.
# * The OpenAirInterface Software Alliance licenses this file to You under
7
# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# * except in compliance with the License.
# * You may obtain a copy of the License at
# *
# *      http://www.openairinterface.org/?page_id=698
# *
# * Unless required by applicable law or agreed to in writing, software
# * distributed under the License is distributed on an "AS IS" BASIS,
# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# * See the License for the specific language governing permissions and
# * limitations under the License.
# *-------------------------------------------------------------------------------
# * For more information about the OpenAirInterface (OAI) Software Alliance:
# *      contact@openairinterface.org
# */

23
# file build_oai
thomasl's avatar
thomasl committed
24 25 26
# brief OAI automated build tool that can be used to install, compile, run OAI.
# author  Navid Nikaein, Lionel GAUTHIER, Laurent Thomas

27
set -e
thomasl's avatar
thomasl committed
28 29 30 31

################################
# include helper functions
################################
thomasl's avatar
thomasl committed
32
ORIGIN_PATH=$PWD
thomasl's avatar
thomasl committed
33
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
34
source $THIS_SCRIPT_PATH/tools/build_helper
thomasl's avatar
thomasl committed
35

36 37 38 39 40 41 42
# set environment variables (OPENAIR_HOME, ...)
set_openair_env

#variables for UE data generation
gen_nvram_path=$OPENAIR_DIR/targets/bin
conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf

43
MSC_GEN=0
44
XFORMS="True"
Xu Bo's avatar
Xu Bo committed
45
UE_EXPANSION="False"
46
PRINT_STATS="False"
thomasl's avatar
thomasl committed
47
VCD_TIMING="False"
laurent's avatar
laurent committed
48 49
DEADLINE_SCHEDULER_FLAG_USER="False"
FORCE_DEADLINE_SCHEDULER_FLAG_USER=""
50
CPU_AFFINITY_FLAG_USER="False" #Only valid when lowlatecy flag is set to False
51
REL="Rel15"
52
NR_REL="NR_Rel15"
53
HW="None"
54
TP="None"
Florian Kaltenberger's avatar
Florian Kaltenberger committed
55
NOS1=0
Wang's avatar
Wang committed
56
HW_LATENCY=0
gauthier's avatar
gauthier committed
57
EPC=0
58
VERBOSE_COMPILE=0
59
CFLAGS_PROCESSOR_USER=""
60 61
RUN_GROUP=0
TEST_CASE_GROUP=""
62
BUILD_DOXYGEN=0
63
T_TRACER="True"
64
DISABLE_HARDWARE_DEPENDENCY="False"
65
CMAKE_BUILD_TYPE=""
66
CMAKE_CMD="$CMAKE"
67
UE_AUTOTEST_TRACE="False"
Gabriel's avatar
Gabriel committed
68 69
UE_DEBUG_TRACE="False"
UE_TIMING_TRACE="False"
Cedric Roux's avatar
Cedric Roux committed
70
DISABLE_LOG_X="False"
71
USRP_REC_PLAY="False"
72
BUILD_ECLIPSE=0
Guy De Souza's avatar
Guy De Souza committed
73
NR="False"
74
UE_NAS_USE_TUN="False"
75
BASIC_SIMULATOR=0
76 77
trap handle_ctrl_c INT

78
function print_help() {
Cedric Roux's avatar
Cedric Roux committed
79
  echo_info "
80 81 82 83 84 85
This program installs OpenAirInterface Software
You should have ubuntu 14.xx, updated, and the Linux kernel >= 3.14
Options
-h
   This help
-c | --clean
Cedric Roux's avatar
Cedric Roux committed
86
   Erase all files to make a rebuild from start
87
-C | --clean-all
Cedric Roux's avatar
Cedric Roux committed
88
   Erase all files made by previous compilations, installations
89 90
--clean-kernel
   Erase previously installed features in kernel: iptables, drivers, ...
gauthier's avatar
gauthier committed
91
-I | --install-external-packages
92 93 94 95 96
   Installs required packages such as LibXML, asn1.1 compiler, freediameter, ...
   This option will require root password
--install-optional-packages
   Install useful but not mandatory packages such as valgrind
-g | --run-with-gdb
97
   Add debugging symbols to compilation directives. It also disables any compiler optimization. Only for debugging. Do not use in normal operation!
98 99 100
-h | --help
   Print this help
--eNB
Guy De Souza's avatar
Guy De Souza committed
101 102 103 104 105
  Makes the LTE softmodem
--gNB
  Makes the NR softmodem
--nrUE
  Makes the NR UE softmodem
106
--UE
107
   Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file
Cedric Roux's avatar
Cedric Roux committed
108 109 110 111
--UE-conf-nvram [configuration file]
   Specify conf_nvram_path (default \"$conf_nvram_path\")
--UE-gen-nvram [output path]
   Specify gen_nvram_path (default \"$gen_nvram_path\")
Wang's avatar
Wang committed
112 113
--HWLAT
    Makes test program for haw latency tests
114
-r | --3gpp-release
Cedric Roux's avatar
Cedric Roux committed
115
   default is Rel14,
116
   Rel8 limits the implementation to 3GPP Release 8 version
Cedric Roux's avatar
Cedric Roux committed
117
   Rel10 limits the implementation to 3GPP Release 10 version
118
-w | --hardware
Wang's avatar
Wang committed
119
   EXMIMO, USRP, BLADERF, ETHERNET, LMSSDR, ADRV9371_ZC706, None (Default)
120
   Adds this RF board support (in external packages installation and in compilation)
121 122 123
-t | --transport protocol
   ETHERNET , None
   Adds this trasport protocol support in compilation
124 125 126 127 128 129
--phy_simulators
   Makes the unitary tests Layer 1 simulators
--core_simulators
   Makes the core security features unitary simulators
-s | --check
   runs a set of auto-tests based on simulators and several compilation tests
130 131
--run-group 
   runs only specified test cases specified here. This flag is only valid with -s
132 133 134
-V | --vcd
   Adds a debgging facility to the binary files: GUI with major internal synchronization events
-x | --xforms
135
   Adds a software oscilloscope feature to the produced binaries. 
136
--install-system-files
gauthier's avatar
gauthier committed
137
   Install OpenArInterface required files in Linux system
138
   (will ask root password)
139
--noS1 
140
   Compiles lte-softmodem without S1 interface, using direct link to IP instead
141 142
--verbose-compile
   Shows detailed compilation instructions in makefile
143 144
--cflags_processor
   Manually Add CFLAGS of processor if they are not detected correctly by script. Only add these flags if you know your processor supports them. Example flags: -msse3 -msse4.1 -msse4.2 -mavx2
145 146
--build-doxygen
   Builds doxygen based documentation.
147
--disable-deadline
148 149
   Disables deadline scheduler of Linux kernel (>=3.14.x).
--enable-deadline
laurent's avatar
laurent committed
150
   Enable deadline scheduler of Linux kernel (>=3.14.x). 
151
--disable-cpu-affinity
152
   Disables CPU Affinity between UHD/TX/RX Threads (Valid only when deadline scheduler is disabled). By defaulT, CPU Affinity is enabled when not using deadline scheduler. It is enabled only with >2 CPUs. For eNB, CPU_0-> Device library (UHD), CPU_1->TX Threads, CPU_2...CPU_MAX->Rx Threads. For UE, CPU_0->Device Library(UHD), CPU_1..CPU_MAX -> All the UE threads
153 154
--disable-T-Tracer
   Disables the T tracer.
155 156
--disable-hardware-dependency
   Disable HW dependency during installation
157 158
--ue-autotest-trace
    Enable specific traces for UE autotest framework
Gabriel's avatar
Gabriel committed
159 160 161 162
--ue-trace
    Enable traces for UE debugging
--ue-timing
    Enable traces for timing
Cedric Roux's avatar
Cedric Roux committed
163 164
--disable-log
   Disable all LOG_* macros
165 166
--build-eclipse
   Build eclipse project files. Paths are auto corrected by fixprj.sh
167 168 169 170
--build-telnet
   Build telnet server, specify --telnetsrv on command line to start it (eNB only)
--build-msc
   Build MSC tracing utility, specify --msc on command line to start it (eNB and UE)
171 172
--usrp-recplay
   Build for I/Q record-playback modes
173 174
--ue-nas-use-tun
   Use TUN devices for the UEs instead of ue_ip.ko
175 176 177
--basic-simulator
   Generates a basic [1 UE + 1 eNB + no channel] simulator.
   See targets/ARCH/tcp_bridge/README.tcp_bridge_oai for documentation.
178
Usage (first build):
179
 NI/ETTUS B201  + COTS UE : ./build_oai -I  --eNB -x --install-system-files -w USRP
180 181
Usage (Regular):
 Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x 
Cedric Roux's avatar
Cedric Roux committed
182
 NI/ETTUS B201  + OAI ENB : ./build_oai --eNB -x -w USRP"
183 184 185 186
}


function main() {
187

188 189
  until [ -z "$1" ]
  do
190
    case "$1" in
191 192 193 194 195
       -c | --clean)
            CLEAN=1
            shift;;
       -C | --clean-all)
            CLEAN_ALL=1
thomasl's avatar
thomasl committed
196
            shift;;
197 198 199
       --clean-kernel)
            clean_kernel
            echo_info "Erased iptables config and removed modules from kernel"
thomasl's avatar
thomasl committed
200
            shift;;
201
       -I | --install-external-packages)
202
            INSTALL_EXTERNAL=1
203
            echo_info "Will install external packages"
thomasl's avatar
thomasl committed
204
            shift;;
205
       --install-optional-packages)
206 207 208
            INSTALL_OPTIONAL=1
            echo_info "Will install optional packages"
            shift;;
209
       -g | --run-with-gdb)
thomasl's avatar
thomasl committed
210
            GDB=1
211 212
            CMAKE_BUILD_TYPE="Debug"
            echo_info "Will Compile with gdb symbols and disable compiler optimization"
213
            CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug --trace-expand"
thomasl's avatar
thomasl committed
214
            shift;;
215 216 217 218
       --eNB)
            eNB=1
            echo_info "Will compile eNB"
            shift;;
Guy De Souza's avatar
Guy De Souza committed
219 220 221 222 223
       --gNB)
            gNB=1
            NR="True"
            echo_info "Will compile gNB"
            shift;;
224
       -a | --agent)
Guy De Souza's avatar
Guy De Souza committed
225 226
            echo_info "FlexRAN support is always compiled into the eNB"
            shift;;
227 228 229 230
       --UE)
            UE=1
            echo_info "Will compile UE"
            shift;;
Guy De Souza's avatar
Guy De Souza committed
231 232 233 234 235
       --nrUE)
            nrUE=1
            NR="True"
            echo_info "Will compile NR UE"
            shift;;
Xu Bo's avatar
Xu Bo committed
236 237 238 239
       --mu)
            UE_EXPANSION="True"
            echo_info "Will compile with UE_EXPANSION"
            shift;;
Cedric Roux's avatar
Cedric Roux committed
240
       --UE-conf-nvram)
241
            conf_nvram_path=$(readlink -f $2)
Cedric Roux's avatar
Cedric Roux committed
242 243
            shift 2;;
        --UE-gen-nvram)
244 245
            gen_nvram_path=$(readlink -f $2)
            shift 2;;
thomasl's avatar
thomasl committed
246
       -r | --3gpp-release)
gauthier's avatar
gauthier committed
247
            REL=$2
248
            echo_info "Setting release to: $REL"
thomasl's avatar
thomasl committed
249 250 251
            shift 2;;
       -w | --hardware)
            HW="$2" #"${i#*=}"
Wang's avatar
Wang committed
252 253
            # Use OAI_USRP  as the key word USRP is used inside UHD driver
	    if [ "$HW" != "BLADERF" -a  "$HW" != "USRP" -a "$HW" != "LMSSDR" -a  "$HW" != "None" -a  "$HW" != "EXMIMO" -a  "$HW" != "ADRV9371_ZC706"  ] ; then 
254 255 256 257 258
		echo_fatal "Unknown HW type $HW will exit..."		
	    else
		if [ "$HW" == "USRP" ] ; then 
		    HW="OAI_USRP"
		fi 
Wang's avatar
Wang committed
259 260 261
		if [ "$HW" == "ADRV9371_ZC706" ] ; then 
		    HW="OAI_ADRV9371_ZC706"
		fi 
262 263 264
		if [ "$HW" == "BLADERF" ] ; then 
		    HW="OAI_BLADERF"
		fi
265 266 267
		if [ "$HW" == "LMSSDR" ] ; then 
		    HW="OAI_LMSSDR"
		fi 
268 269
		echo_info "Setting hardware to: $HW"
	    fi
thomasl's avatar
thomasl committed
270
            shift 2;;
271 272
	-t | --transport_protocol)
            TP="$2" #"${i#*=}"
273 274 275 276 277
	    if [ "$TP" != "ETHERNET" -a "$TP" != "None" ] ; then 
		echo_fatal "Unknown TP type $TP will exit..."		
	    else
		echo_info "Setting transport protocol to: $TP"		
	    fi
thomasl's avatar
thomasl committed
278
            shift 2;;
279
       --phy_simulators)
thomasl's avatar
thomasl committed
280
            SIMUS_PHY=1
281 282 283 284 285 286
            echo_info "Will compile dlsim, ulsim, ..."
            shift;;
       --core_simulators)
            SIMUS_CORE=1
            echo_info "Will compile security unitary tests"
            shift;;
thomasl's avatar
thomasl committed
287 288
       -s | --check)
            OAI_TEST=1
289
            echo_info "Will run auto-tests"
thomasl's avatar
thomasl committed
290
            shift;;
291 292 293 294 295
       --run-group)
            RUN_GROUP=1
            TEST_CASE_GROUP=$2
            echo_info "executing test cases only in group: $TEST_CASE_GROUP"
            shift 2;;
thomasl's avatar
thomasl committed
296
       -V | --vcd)
297
            echo_info "Setting gtk-wave output"
thomasl's avatar
thomasl committed
298 299
            VCD_TIMING=1
            EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
thomasl's avatar
thomasl committed
300
            shift;;
thomasl's avatar
thomasl committed
301
       -x | --xforms)
302
            XFORMS="True"
thomasl's avatar
thomasl committed
303
            EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
304
            echo_info "Will generate the software oscilloscope features"
thomasl's avatar
thomasl committed
305
            shift;;
306 307 308 309
       --install-system-files)
            INSTALL_SYSTEM_FILES=1
            echo_info "Will copy OpenAirInterface files in Linux directories"
            shift;;
310 311 312 313
       --noS1)
	    NOS1=1
            echo_info "Will compile without S1 interface"
            shift;;
Wang's avatar
Wang committed
314 315 316 317 318 319 320 321
       --HWLAT)
            HWLAT=1
            echo_info "Will compile hw latency test program"
            shift;;
       --HWLAT_TEST)
            HWLAT_TEST=1
            echo_info "Will compile hw latency test program"
            shift;;
322 323 324 325
       --verbose-compile)
	    VERBOSE_COMPILE=1
            echo_info "Will compile with verbose instructions"
            shift;;
326 327
       --cflags_processor)
            CFLAGS_PROCESSOR_USER=$2
328
            echo_info "Setting CPU FLAGS from USER to: $CFLAGS_PROCESSOR_USER"
329
            shift 2;;
330 331 332 333
       --build-doxygen)
	    BUILD_DOXYGEN=1
            echo_info "Will build doxygen support"
            shift;;     
334
       --disable-deadline)
laurent's avatar
laurent committed
335
            FORCE_DEADLINE_SCHEDULER_FLAG_USER="False"
336 337
            echo_info "Disabling the usage of deadline scheduler"
            shift 1;;
338
       --enable-deadline)
laurent's avatar
laurent committed
339
            FORCE_DEADLINE_SCHEDULER_FLAG_USER="True"
340 341
            echo_info "Enabling the usage of deadline scheduler"
            shift 1;;
Florian Kaltenberger's avatar
Florian Kaltenberger committed
342 343 344 345
       --enable-cpu-affinity)
            CPU_AFFINITY_FLAG_USER="True"
            echo_info "Enabling CPU Affinity (only valid when not using deadline scheduler)"
            shift 1;;
346 347 348 349
       --disable-cpu-affinity)
            CPU_AFFINITY_FLAG_USER="False"
            echo_info "Disabling CPU Affinity (only valid when not using deadline scheduler)"
            shift 1;;
350 351 352
       --disable-T-Tracer)
            T_TRACER="False"
            echo_info "Disabling the T tracer"
353
            shift 1;;
354 355 356 357
       --disable-hardware-dependency)
            echo_info "Disabling hardware dependency for compiling software"
            DISABLE_HARDWARE_DEPENDENCY="True"
            shift 1;;
358 359 360 361
        --ue-autotest-trace)
            UE_AUTOTEST_TRACE="True"
            echo_info "Enabling autotest specific trace for UE"
            shift 1;;
Gabriel's avatar
Gabriel committed
362 363 364 365 366 367 368 369
        --ue-trace)
            UE_DEBUG_TRACE="True"
            echo_info "Enabling UE trace for debug"
            shift 1;;
        --ue-timing)
            UE_TIMING_TRACE="True"
            echo_info "Enabling UE timing trace"
            shift 1;;
Cedric Roux's avatar
Cedric Roux committed
370 371 372 373
        --disable-log)
            DISABLE_LOG_X="True"
            echo_info "Disabling all LOG_* traces"
            shift 1;;
374 375 376 377
        --uhd-images-dir)
            UHD_IMAGES_DIR=$2
            echo_info "Downloading UHD images in the indicated location"
            shift 2;;
378 379 380 381
       --build-eclipse)
            BUILD_ECLIPSE=1
            CMAKE_CMD="$CMAKE_CMD"' -DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE -G"Eclipse CDT4 - Unix Makefiles"'
            echo_info "Enabling build eclipse project support"
oai's avatar
oai committed
382 383 384 385
            shift 1;;
       --build-telnetsrv)
            BUILD_TELNETSRV=1
            echo_info "Build embedded telnet server"
386 387 388 389
            shift ;;
       --build-msc)
            MSC_GEN=1
            echo_info "Build MSC tracing utility"
oai's avatar
oai committed
390
            shift ;;			
391 392 393 394
        --usrp-recplay)
            USRP_REC_PLAY="True"
            echo_info "Enabling USRP record playback mode"
            shift 1;;
395 396 397 398
        --ue-nas-use-tun)
            UE_NAS_USE_TUN="True"
            echo_info "Enabling UE NAS TUN device usage instead of ue_ip.ko"
            shift 1;;
399 400 401 402
        --basic-simulator)
            BASIC_SIMULATOR=1
            echo_info "Compiling the basic simulator"
            shift 1;;
thomasl's avatar
thomasl committed
403 404 405
        -h | --help)
            print_help
            exit 1;;
gauthier's avatar
gauthier committed
406
	*)
407 408
	    print_help
            echo_fatal "Unknown option $1"
thomasl's avatar
thomasl committed
409
            break;;
thomasl's avatar
thomasl committed
410
   esac
411
  done
412
  
413 414
  CMAKE_CMD="$CMAKE_CMD .."
  echo_info "CMAKE_CMD=$CMAKE_CMD"
Guy De Souza's avatar
Guy De Souza committed
415 416
  if [ "$eNB" = "1" -o "$gNB" = "1" ] && [ "$UE" = "1" -o "$nrUE" = "1" ]; then
    echo_error "Cannot build UE/nrUE and eNB/gNB on one build_oai execution"
417 418
    echo_error "use 2 build_oai invocations"
    exit
Guy De Souza's avatar
Guy De Souza committed
419 420
  fi

421
  #########################################################
Guy De Souza's avatar
Guy De Souza committed
422
  # check validity of HW and TP parameters for eNB / gNB
423
  #########################################################
424
  # to be discussed
425
  
Guy De Souza's avatar
Guy De Souza committed
426
  if [ "$eNB" = "1" -o "$gNB" = "1" ] ; then
427 428
      if [ "$HW" = "None" -a  "$TP" = "None" ] ; then
	  echo_fatal "Define a local radio head (e.g. -w EXMIMO) or a transport protocol (e.g. -t ETHERNET) to communicate with a remote radio head!"
429
      fi
430 431
      if [ "$HW" = "None" ] ; then 
	  echo_info "No radio head has been selected (HW set to $HW)"	
432
      fi
433 434
      if [ "$TP" = "None" ] ; then
	  echo_info "No transport protocol has been selected (TP set to $TP)"	
435 436 437
      fi
  fi
  
Wang's avatar
Wang committed
438 439 440 441 442 443
  if [ "$HWLAT" = "1" ] ; then
      if [ "$HW" = "None" ] ; then
    echo_info "No radio head has been selected (HW set to $HW)" 
      fi
  fi

444
  echo_info "RF HW set to $HW" 
445 446 447 448
  #Now we set flags to enable deadline scheduler settings
  #By default: USRP: disable, 
  #By default: BLADERF: enable,
  #By default: EXMIMO: enable
laurent's avatar
laurent committed
449
  if [ "$FORCE_DEADLINE_SCHEDULER_FLAG_USER" = "" ]; then
450
     if [ "$HW" = "EXMIMO" ] ; then 
451
        DEADLINE_SCHEDULER_FLAG_USER="True"
452
     elif [ "$HW" = "ETHERNET" ] ; then 
453
        DEADLINE_SCHEDULER_FLAG_USER="False"
454
     elif [ "$HW" = "OAI_USRP" ] ; then 
laurent's avatar
laurent committed
455
        DEADLINE_SCHEDULER_FLAG_USER="False"
Wang's avatar
Wang committed
456 457
     elif [ "$HW" = "OAI_ADRV9371_ZC706" ] ; then 
        DEADLINE_SCHEDULER_FLAG_USER="False"
458
     elif [ "$HW" = "OAI_BLADERF" ] ; then 
laurent's avatar
laurent committed
459
        DEADLINE_SCHEDULER_FLAG_USER="False"
460
     elif [ "$HW" = "OAI_LMSSDR" ] ; then 
laurent's avatar
laurent committed
461
        DEADLINE_SCHEDULER_FLAG_USER="False"
462
     elif [ "$HW" = "None" ] ; then 
laurent's avatar
laurent committed
463
        DEADLINE_SCHEDULER_FLAG_USER="False"
464 465 466 467 468
     else 
        echo_error "Unknown HW type $HW. Exiting now..."
        exit 
     fi
  else
laurent's avatar
laurent committed
469
     DEADLINE_SCHEDULER_FLAG_USER=$FORCE_DEADLINE_SCHEDULER_FLAG_USER
470 471
  fi

472
  #Disable CPU Affinity for deadline scheduler
laurent's avatar
laurent committed
473
  if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "True" ] ; then 
474 475
     CPU_AFFINITY_FLAG_USER="False"
  fi
476

laurent's avatar
laurent committed
477
  echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
478
  echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
479

480 481 482 483
  if [ -n "$UHD_IMAGES_DIR" ] && [ -z "$INSTALL_EXTERNAL" ]; then
    echo_error "UHD images download settings will not be applied without -I present"
    exit
  fi
484 485 486
  ############################################
  # setting and printing OAI envs, we should check here
  ############################################
gauthier's avatar
gauthier committed
487

488
  echo_info "2. Setting the OAI PATHS ..."
thomasl's avatar
thomasl committed
489

490
  cecho "OPENAIR_DIR    = $OPENAIR_DIR" $green
491

492 493 494 495 496 497 498 499 500 501
  # for conf files copy in this bash script
  if [ -d /usr/lib/freeDiameter ]; then
    export FREEDIAMETER_PREFIX=/usr
  else
    if [ -d /usr/local/lib/freeDiameter ]; then
      export FREEDIAMETER_PREFIX=/usr/local
    else
      echo_warning "FreeDiameter prefix not found, install freeDiameter if EPC, HSS"
    fi
  fi
thomasl's avatar
thomasl committed
502

503

504 505 506 507
  if [ "$CLEAN_ALL" = "1" ] ; then
    clean_all_files
    echo_info "Erased all previously producted files"
  fi
508

509 510 511 512 513 514 515
  dbin=$OPENAIR_DIR/targets/bin
  dlog=$OPENAIR_DIR/cmake_targets/log
  mkdir -p $dbin $dlog

  if [ "$INSTALL_EXTERNAL" = "1" ] ; then
    echo_info "Installing packages"
    check_install_oai_software
516 517 518
    if [ "$HW" == "OAI_USRP" ] ; then
      echo_info "installing packages for USRP support"
      check_install_usrp_uhd_driver
519
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
520
        install_usrp_uhd_driver $UHD_IMAGES_DIR
521
      fi
522
    fi 
ROBINET's avatar
ROBINET committed
523 524 525 526
#    if [ "$HW" == "OAI_ADRV9371_ZC706" ] ; then
#      echo_info "\nInstalling packages for ADRV9371_ZC706 support"
#      check_install_libiio_driver
#    fi 
527
    if [ "$HW" == "OAI_BLADERF" ] ; then
528
      echo_info "installing packages for BLADERF support"
529
      check_install_bladerf_driver
530 531 532
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
        flash_firmware_bladerf
      fi
533
    fi
534 535 536
    echo_info "installing protobuf/protobuf-c for flexran agent support"
    install_protobuf_from_source
    install_protobuf_c_from_source
537 538 539 540 541 542 543
  fi

  if [ "$INSTALL_OPTIONAL" = "1" ] ; then
    echo_info "Installing optional packages"
    check_install_additional_tools
  fi

544 545
  
  
546 547 548
  echo_info "3. building the compilation directives ..."

  DIR=$OPENAIR_DIR/cmake_targets
549
  if [ "$NOS1" = "1" ] ; then
Guy De Souza's avatar
Guy De Souza committed
550
      build_dir=noS1_ran_build
551
      if [ "$gNB" = "1" ] ; then
tct-labo4's avatar
tct-labo4 committed
552
         exec=nr-softmodem-nos1
553 554 555 556 557 558 559
       elif [ "$nrUE" = "1" ] ; then
         exec=nr-uesoftmodem-nos1
       elif [ "$eNB" = "1" ] ; then
         exec=lte-softmodem-nos1
       elif [ "$UE" = "1" ] ; then
         exec=lte-uesoftmodem-nos1
       fi
560
  else
Guy De Souza's avatar
Guy De Souza committed
561
      build_dir=ran_build
562 563 564 565 566 567 568 569 570
      if [ "$gNB" = "1" ] ; then
         exec=nr-softmodem
       elif [ "$nrUE" = "1" ] ; then
         exec=nr-uesoftmodem
       elif [ "$eNB" = "1" ] ; then
         exec=lte-softmodem
       elif [ "$UE" = "1" ] ; then
         exec=lte-uesoftmodem
       fi
571
  fi
572 573 574
  if [ "$T_TRACER" =  "False" ] ; then
      lte_build_dir=${lte_build_dir}_noLOG
  fi
575 576 577
# configuration module libraries, one currently available, using libconfig 
  config_libconfig_shlib=params_libconfig
  
578
  # first generate the CMakefile in the right directory
Guy De Souza's avatar
Guy De Souza committed
579
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" ] ; then
580

Guy De Souza's avatar
Guy De Souza committed
581 582 583 584
    # softmodem compilation
    [ "$CLEAN" = "1" ] && rm -rf $DIR/$build_dir/build
    mkdir -p $DIR/$build_dir/build
    cmake_file=$DIR/$build_dir/CMakeLists.txt
585 586
    echo "cmake_minimum_required(VERSION 2.8)"   >  $cmake_file
    if [ "$NOS1" = "1" ] ; then
Guy De Souza's avatar
Guy De Souza committed
587
	cat  $DIR/$build_dir/CMakeLists.template >>  $cmake_file
588
    fi
589
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
590
    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
591
    echo "set ( XFORMS $XFORMS )"                  >>  $cmake_file
Xu Bo's avatar
Xu Bo committed
592
    echo "set ( UE_EXPANSION $UE_EXPANSION )"      >>  $cmake_file
593
#    echo "set ( PHY_TX_THREAD $UE_EXPANSION )"     >>  $cmake_file
594
    echo "set ( PRE_SCD_THREAD $UE_EXPANSION )"    >>  $cmake_file
595
    echo "set ( RRC_ASN1_VERSION \"${REL}\")"      >>  $cmake_file
596
    echo "set ( NR_RRC_ASN1_VERSION \"${NR_REL}\")"      >>  $cmake_file
597 598
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"     >>  $cmake_file
    echo "set ( RF_BOARD \"${HW}\")"               >>  $cmake_file
599
    echo "set ( TRANSP_PRO \"${TP}\")"             >>  $cmake_file
Guy De Souza's avatar
Guy De Souza committed
600
    echo "set(PACKAGE_NAME \"${exec}\")"       >>  $cmake_file
laurent's avatar
laurent committed
601
    echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )"    >>$cmake_file
602
    echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"      >>$cmake_file
603
    echo "set ( T_TRACER $T_TRACER )"              >>  $cmake_file
604
    echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
605 606
    echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)"        >>  $cmake_file
    echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)"        >>  $cmake_file
Cedric Roux's avatar
Cedric Roux committed
607
    echo "set (DISABLE_LOG_X $DISABLE_LOG_X)"        >>  $cmake_file
608
    echo "set (USRP_REC_PLAY $USRP_REC_PLAY)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
609 610 611 612 613
    if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
     echo_info "Compiling UE S1 build : enabling Linux and NETLINK"
     echo "set (LINUX True )"              >>  $cmake_file
     echo "set (PDCP_USE_NETLINK True )"   >>  $cmake_file
    fi
614
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
Guy De Souza's avatar
Guy De Souza committed
615
    cd  $DIR/$build_dir/build
616
    eval $CMAKE_CMD
617 618
  fi

Guy De Souza's avatar
Guy De Souza committed
619 620
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" ] ; then
    echo_info "Compiling $exec"
621
    compilations \
Guy De Souza's avatar
Guy De Souza committed
622 623
	  $build_dir $exec \
	  $exec $dbin/$exec.$REL
624

625 626
# mandatory shared lib
    compilations \
Guy De Souza's avatar
Guy De Souza committed
627
	  $build_dir $config_libconfig_shlib \
628
	  lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
629
    compilations \
Guy De Souza's avatar
Guy De Souza committed
630
          $build_dir coding \
631
          libcoding.so $dbin/libcoding.so
632
	  
633 634
    if [ "$NOS1" = "1" ] ; then
	compilations \
Guy De Souza's avatar
Guy De Souza committed
635
	    $build_dir nasmesh \
636 637
	    CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
	compilations \
Guy De Souza's avatar
Guy De Souza committed
638
	    $build_dir rb_tool \
639 640 641
	    rb_tool $dbin/rb_tool
	cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
    fi
642
  fi
643

Florian Kaltenberger's avatar
Florian Kaltenberger committed
644
  if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
645 646 647
    # ue_ip driver compilation
    echo_info "Compiling UE specific part"
    compilations \
Guy De Souza's avatar
Guy De Souza committed
648
      $build_dir ue_ip \
gauthier's avatar
gauthier committed
649
      CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
650

gauthier's avatar
gauthier committed
651 652
#    mkdir -p $DIR/at_commands/build
#    cd $DIR/at_commands/build
653
#    eval $CMAKE_CMD
gauthier's avatar
gauthier committed
654 655 656
#    compilations \
#      at_commands at_nas_ue \
#      at_nas_ue $dbin/at_nas_ue
657
    
gauthier's avatar
gauthier committed
658
    [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build
659 660
    mkdir -p $DIR/nas_sim_tools/build
    cd $DIR/nas_sim_tools/build
gauthier's avatar
gauthier committed
661
    
662
    eval $CMAKE_CMD
thomasl's avatar
thomasl committed
663
    compilations \
664 665
      nas_sim_tools usim \
      usim $dbin/usim
thomasl's avatar
thomasl committed
666
    compilations \
667 668
      nas_sim_tools nvram \
      nvram $dbin/nvram
thomasl's avatar
thomasl committed
669
    compilations \
670 671
        nas_sim_tools conf2uedata \
        conf2uedata $dbin/conf2uedata
672 673

    # generate USIM data
674 675
    if [ -f $dbin/conf2uedata ]; then
      install_nas_tools $conf_nvram_path $gen_nvram_path
Guy De Souza's avatar
Guy De Souza committed
676 677 678 679
      echo_info "Copying UE specific part to $DIR/$build_dir/build"
      cp -Rvf $dbin/.ue_emm.nvram0 $DIR/$build_dir/build
      cp -Rvf $dbin/.ue.nvram0 $DIR/$build_dir/build
      cp -Rvf $dbin/.usim.nvram0 $DIR/$build_dir/build
680 681 682
    else
      echo_warning "not generated UE NAS files: binaries not found"
    fi
683
  fi
thomasl's avatar
thomasl committed
684

685
  if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
686
    cd $OPENAIR_DIR/cmake_targets/phy_simulators
687 688 689 690
    [ "$CLEAN" = "1" ] && rm -rf build
    mkdir -p build
    cd build
    rm -f *sim
691
    eval $CMAKE_CMD
692
  fi
693

694 695 696
  if [ "$SIMUS_PHY" = "1" ] ; then
    # lte unitary simulators compilation
    echo_info "Compiling unitary tests simulators"
697 698
    # TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
    #simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
699
    simlist="dlsim ulsim polartest ldpctest nr_pbchsim nr_dlschsim"
700 701
    for f in $simlist ; do
      compilations \
702
      phy_simulators $f \
703 704
	  $f $dbin/$f.$REL
    done
705
    compilations \
706
          phy_simulators coding \
707
          libcoding.so $dbin/libcoding.so
708
  fi
thomasl's avatar
thomasl committed
709

gauthier's avatar
gauthier committed
710
  # Core simulators
711 712 713 714 715 716 717
  #############
  if [ "$SIMUS_CORE" = "1" ] ; then
    # lte unitary simulators compilation
    echo_info "Compiling unitary tests simulators"
    simlist="secu_knas_encrypt_eia1 secu_kenb aes128_ctr_encrypt aes128_ctr_decrypt secu_knas_encrypt_eea2 secu_knas secu_knas_encrypt_eea1 kdf aes128_cmac_encrypt secu_knas_encrypt_eia2"
    for f in $simlist ; do
      compilations \
718
	  phy_simulators test_$f \
719 720 721
	  test_$f $dbin/test_$f.$REL
    done
  fi
thomasl's avatar
thomasl committed
722

723 724
  # EXMIMO drivers & firmware loader
  ###############
725
  if [ "$HW" = "EXMIMO" ] ; then
gauthier's avatar
gauthier committed
726
    
727 728
    echo_info "Compiling Express MIMO 2 board drivers"
    compilations \
Guy De Souza's avatar
Guy De Souza committed
729
        $build_dir openair_rf \
thomasl's avatar
thomasl committed
730
        CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko
731
    compilations \
Guy De Souza's avatar
Guy De Souza committed
732
	  $build_dir updatefw \
gauthier's avatar
gauthier committed
733
	  updatefw $dbin/updatefw
734
    echo_info "Compiling oarf tools. The logfile for compilation is here: $dlog/oarf.txt"
Guy De Souza's avatar
Guy De Souza committed
735 736
    make -C $OPENAIR_DIR/cmake_targets/$build_dir/build oarf > $dlog/oarf.txt 2>&1
    cp $OPENAIR_DIR/cmake_targets/$build_dir/build/*.oct $dbin
737 738 739 740 741
    if [ -s $dbin/oarf_config_exmimo.oct ] ; then
	echo_success "oarf tools compiled"
    else
	echo_error "oarf tools compilation failed"
    fi
742
    cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
743
  fi
thomasl's avatar
thomasl committed
744

745 746


oai's avatar
oai committed
747 748 749
  # Telnet server compilation
  #####################
  if [ "$BUILD_TELNETSRV" = "1" ] ; then
Guy De Souza's avatar
Guy De Souza committed
750
              build_dir=$build_dir
751 752 753
              compilations \
                  $build_dir telnetsrv \
                  libtelnetsrv.so $dbin/libtelnetsrv.so
oai's avatar
oai committed
754

755 756 757 758 759 760 761 762 763
  fi 
  # Telnet server compilation
  #####################
  if [ "$MSC_GEN" = "1" ] ; then
              build_dir=$lte_build_dir
              compilations \
                  $build_dir msc \
                  libmsc.so $dbin/libmsc.so

oai's avatar
oai committed
764
  fi  
Wang's avatar
Wang committed
765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820
  # HWLAT compilation
  #####################
  if [ "$HWLAT" = "1" ] ; then

     hwlat_exec=lte-hwlat
     hwlat_build_dir=lte-hwlat
     
     echo_info "Compiling $hwlat_exec ..."
    
     [ "$CLEAN" = "1" ] && rm -rf $DIR/lte-hwlat/build 
     mkdir -p $DIR/$hwlat_build_dir/build
     cmake_file=$DIR/$hwlat_build_dir/CMakeLists.txt
     echo "cmake_minimum_required(VERSION 2.8)"   >   $cmake_file
     echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
     echo "set ( RF_BOARD \"${HW}\")"               >>  $cmake_file
     echo 'set ( PACKAGE_NAME "\"lte-hwlat\"")'        >>  $cmake_file
     echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )"    >>$cmake_file
     echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"    >>$cmake_file
     echo "set ( HWLAT \"${HWLAT}\" )"    >>$cmake_file
     echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file    
     cd $DIR/$hwlat_build_dir/build
     cmake ..
     compilations \
   lte-hwlat lte-hwlat \
   lte-hwlat $dbin/lte-hwlat

  fi  
 
  # HWLAT_TEST compilation
  #####################
  if [ "$HWLAT_TEST" = "1" ] ; then

     hwlat_test_exec=lte-hwlat-test
     hwlat_test_build_dir=lte-hwlat-test
     
     echo_info "Compiling $hwlat_test_exec ..."
    
     [ "$CLEAN" = "1" ] && rm -rf $DIR/lte-hwlat-test/build 
     mkdir -p $DIR/$hwlat_test_build_dir/build
     cmake_file=$DIR/$hwlat_test_build_dir/CMakeLists.txt
     echo "cmake_minimum_required(VERSION 2.8)"   >   $cmake_file
     echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
     echo "set ( RF_BOARD \"${HW}\")"               >>  $cmake_file
     echo 'set ( PACKAGE_NAME "\"lte-hwlat-test\"")'        >>  $cmake_file
     echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )"    >>$cmake_file
     echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"    >>$cmake_file
     echo "set ( HWLAT \"${HWLAT}\" )"    >>$cmake_file
     echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file    
     cd $DIR/$hwlat_test_build_dir/build
     cmake ..
     compilations \
   lte-hwlat-test lte-hwlat-test \
   lte-hwlat-test $dbin/lte-hwlat-test

  fi  
 
821 822
  # build RF device and transport protocol libraries
  #####################################
823
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HWLAT" = "1" ] ; then
824

Guy De Souza's avatar
Guy De Souza committed
825
      build_dir=$build_dir
826

827
      # build RF device libraries
828
      if [ "$HW" != "None" ] ; then
829
	  rm -f liboai_device.so
830
	  rm -f $dbin/liboai_device.so
831

832
	  # link liboai_device.so with the selected RF device library
833
	  if [ "$HW" == "EXMIMO" ] ; then
834 835 836
	      compilations \
		  $build_dir oai_exmimodevif \
		  liboai_exmimodevif.so $dbin/liboai_exmimodevif.so.$REL
837 838 839

	      ln -sf liboai_exmimodevif.so liboai_device.so
	      ln -sf $dbin/liboai_exmimodevif.so.$REL $dbin/liboai_device.so
840
	      echo_info "liboai_device.so is linked to EXMIMO device library"       
Wang's avatar
Wang committed
841 842
	  elif [ "$HW" == "OAI_ADRV9371_ZC706" ] ; then

ROBINET's avatar
ROBINET committed
843 844 845 846 847 848 849 850 851 852 853
			SYRIQ_KVER=$(uname -r)
			SYRIQ_KMAJ=$(echo $SYRIQ_KVER | sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/')
			SYRIQ_KMIN=$(echo $SYRIQ_KVER | sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/')
			#echo $SYRIQ_KMAJ$SYRIQ_KMIN
			if [ "$SYRIQ_KMAJ$SYRIQ_KMIN" == "319" ] || [ "$SYRIQ_KMAJ$SYRIQ_KMIN" == "410" ] || [ "$SYRIQ_KMAJ$SYRIQ_KMIN" == "415" ] ; then
#				echo "Kernel $SYRIQ_KMAJ.$SYRIQ_KMIN detected"
				ln -sf /usr/local/lib/syriq/libadrv9371zc706.so liboai_device.so
			else
				echo_error "== FAILED == Unexpected Kernel $SYRIQ_KMAJ.$SYRIQ_KMIN"
			fi
			echo_info "liboai_device.so is linked to ADRV9371_ZC706 device library for Kernel $SYRIQ_KMAJ.$SYRIQ_KMIN"
Wang's avatar
Wang committed
854

855
	  elif [ "$HW" == "OAI_USRP" ] ; then
856 857 858
              compilations \
                  $build_dir oai_usrpdevif \
                  liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
859

860 861
	      ln -sf liboai_usrpdevif.so liboai_device.so
	      ln -sf $dbin/liboai_usrpdevif.so.$REL $dbin/liboai_device.so
862 863
	      echo_info "liboai_device.so is linked to USRP device library"        
	  elif [ "$HW" == "OAI_BLADERF" ] ; then
864 865 866 867 868 869
	      if [ -f "/usr/include/libbladeRF.h" ] ; then
		  compilations \
		      $build_dir oai_bladerfdevif \
		      liboai_bladerfdevif.so $dbin/liboai_bladerfdevif.so.$REL
	      fi

870 871
	      ln -sf liboai_bladerfdevif.so liboai_device.so
	      ln -sf $dbin/liboai_bladerfdevif.so.$REL $dbin/liboai_device.so
872
	      echo_info "liboai_device.so is linked to BLADERF device library"	 
873 874 875 876 877 878 879
	  elif [ "$HW" == "OAI_LMSSDR" ] ; then
#	      if [ -f "/usr/include/libbladeRF.h" ] ; then
		  compilations \
		      $build_dir oai_lmssdrdevif \
		      liboai_lmssdrdevif.so $dbin/liboai_lmssdrdevif.so.$REL
#	      fi

880 881
	      ln -sf liboai_lmssdrdevif.so liboai_device.so
	      ln -sf $dbin/liboai_lmssdrdevif.so.$REL $dbin/liboai_device.so
882
	      echo_info "liboai_device.so is linked to LMSSDR device library"	 
883 884 885 886 887 888
	  else 
	      echo_info "liboai_device.so is not linked to any device library"	    
	  fi
      fi
      
      # build trasport protocol libraries (currently only ETHERNET is available)
889
      if [ "$TP" != "None" ] ; then
890
	  rm -f liboai_transpro.so
891 892
	  rm -f $dbin/liboai_transpro.so

893
	  if [ "$TP" == "ETHERNET" ] ; then
894 895 896
	      compilations \
		  $build_dir oai_eth_transpro \
		  liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
897 898
	      ln -sf liboai_eth_transpro.so liboai_transpro.so
	      ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
899 900 901 902 903
	      echo_info "liboai_transpro.so is linked with ETHERNET library"	 
	  fi      
      fi
fi

904

905 906 907 908 909 910 911 912 913 914 915
  # Doxygen Support
  #####################
  if [ "$BUILD_DOXYGEN" = "1" ] ;then
    doxygen_log=$OPENAIR_DIR/cmake_targets/log/doxygen.log
    echo_info "Building doxygen based documentation. The documentation file is located here: $OPENAIR_DIR/targets/DOCS/html/index.html"
    echo_info "Doxygen Generation log is located here: $doxygen_log"
    echo_info "Generating doxygen files....please wait"
    (
    [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/doxygen/build
    mkdir -p $OPENAIR_DIR/cmake_targets/doxygen/build
    cd $OPENAIR_DIR/cmake_targets/doxygen/build
916
    eval $CMAKE_CMD
917 918
    make doc
    ) >& $doxygen_log
919 920
  fi

gauthier's avatar
gauthier committed
921 922 923
  # Auto-tests
  #####################
  if [ "$OAI_TEST" = "1" ]; then
thomasl's avatar
thomasl committed
924
    echo_info "10. Running OAI pre commit tests (pre-ci) ..."
925 926 927 928
    echo_error "These scripts ASSUME that user is in /etc/sudoers and can execute commands without PASSWORD prompt"
    echo_error "Add the following lines in /etc/sudoers file to make your __user_name__ sudo without password prompt"
    echo_error " __your_user_name__ ALL = (ALL:ALL) NOPASSWD: ALL"
    echo_error " __your_user_name__ ALL = (ALL) NOPASSWD: ALL "
929 930
    echo_info "The log file for the autotest script for debugging is located here: $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log "
    echo_info "The results of autotests results is located here: $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml "
931
    echo_info "You can hit CTRL-C any time to terminate the autotests..."
932 933 934
    echo "Current User Name: $USER"
    read -s -p "Enter Password: " mypassword
    echo -e "\n"
935 936
    rm -fr $OPENAIR_DIR/cmake_targets/autotests/log
    mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log
937
    if [ "$RUN_GROUP" -eq "1" ]; then
938
        $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
939
    else
940
        $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
941
    fi
942
    wait
gauthier's avatar
gauthier committed
943
  else
thomasl's avatar
thomasl committed
944
    echo_info "10. Bypassing the Tests ..."
gauthier's avatar
gauthier committed
945
  fi
946 947 948 949 950 951

  # basic simulator
  #####################
  if [ "$BASIC_SIMULATOR" = "1" ]; then
    echo_info "Build basic simulator"
    [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/basic_simulator
952
    [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
953 954 955
    mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator
    mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator/enb
    mkdir -p $OPENAIR_DIR/cmake_targets/basic_simulator/ue
956
    mkdir -p $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982

    # enb

    cmake_file=$OPENAIR_DIR/cmake_targets/basic_simulator/enb/CMakeLists.txt
    echo "cmake_minimum_required(VERSION 2.8)"         >  $cmake_file
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )"  >> $cmake_file
    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
    echo "set ( RRC_ASN1_VERSION \"${REL}\")"          >>  $cmake_file
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"         >>  $cmake_file
    echo "set ( XFORMS $XFORMS )"                      >>  $cmake_file
    echo "set ( RF_BOARD \"OAI_USRP\")"                >>  $cmake_file
    echo "set ( TRANSP_PRO \"None\")"                  >>  $cmake_file
    echo "set(PACKAGE_NAME \"simulator_enb\")"         >>  $cmake_file
    echo "set (DEADLINE_SCHEDULER \"False\" )"         >>  $cmake_file
    echo "set (CPU_AFFINITY \"False\" )"               >>  $cmake_file
    echo "set ( T_TRACER \"True\" )"                   >>  $cmake_file
    echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)"  >>  $cmake_file
    echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)"        >>  $cmake_file
    echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)"      >>  $cmake_file
    echo "set (DISABLE_LOG_X $DISABLE_LOG_X)"          >>  $cmake_file
    echo "set (USRP_REC_PLAY $USRP_REC_PLAY)"          >>  $cmake_file
    echo "set (BASIC_SIMULATOR \"True\" )"             >>  $cmake_file
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)' >> $cmake_file

    echo_info "Build eNB"
    echo_info "logs are in $dlog/basic_simulator_enb.txt"
983
    set +e
984 985 986
    {
      cd $OPENAIR_DIR/cmake_targets/basic_simulator/enb
      cmake .
987 988
      make -j`nproc` lte-softmodem
      make -j`nproc` coding params_libconfig tcp_bridge_oai
989 990 991
      ln -sf libtcp_bridge_oai.so liboai_device.so
      cd ../..
    } > $dlog/basic_simulator_enb.txt 2>&1
992 993 994 995 996 997 998 999 1000 1001 1002
    set -e
    if [ -s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/lte-softmodem          -a \
         -s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libcoding.so           -a \
         -s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libparams_libconfig.so -a \
         -s $OPENAIR_DIR/cmake_targets/basic_simulator/enb/libtcp_bridge_oai.so ] ; then
      echo_success "eNB compiled"
      check_warnings "$dlog/basic_simulator_enb.txt"
    else
      echo_error "eNB compilation failed"
      exit 1
    fi
1003 1004 1005 1006

    # ue

    echo_info "Compile conf2uedata"
1007 1008
    cd $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
    eval $CMAKE_CMD
1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024
    compilations \
        nas_sim_tools conf2uedata \
        conf2uedata $dbin/conf2uedata

    cmake_file=$OPENAIR_DIR/cmake_targets/basic_simulator/ue/CMakeLists.txt
    echo "cmake_minimum_required(VERSION 2.8)"        >  $cmake_file
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
    echo "set ( RRC_ASN1_VERSION \"${REL}\")"         >>  $cmake_file
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"        >>  $cmake_file
    echo "set ( XFORMS $XFORMS )"                     >>  $cmake_file
    echo "set ( RF_BOARD \"OAI_USRP\")"               >>  $cmake_file
    echo "set ( TRANSP_PRO \"None\")"                 >>  $cmake_file
    echo "set(PACKAGE_NAME \"simulator_ue\")"         >>  $cmake_file
    echo "set (DEADLINE_SCHEDULER \"False\" )"        >>  $cmake_file
    echo "set (CPU_AFFINITY \"False\" )"              >>  $cmake_file
1025
    echo "set ( T_TRACER \"True\" )"                  >>  $cmake_file
1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038
    echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >>  $cmake_file
    echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)"       >>  $cmake_file
    echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)"     >>  $cmake_file
    echo "set (DISABLE_LOG_X $DISABLE_LOG_X)"         >>  $cmake_file
    echo "set (USRP_REC_PLAY $USRP_REC_PLAY)"         >>  $cmake_file
    echo "set (LINUX True )"                          >>  $cmake_file
    echo "set (PDCP_USE_NETLINK True )"               >>  $cmake_file
    echo "set (BASIC_SIMULATOR \"True\" )"            >>  $cmake_file
    echo "set (UE_NAS_USE_TUN \"True\" )"             >>  $cmake_file
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt)' >> $cmake_file

    echo_info "Build UE"
    echo_info "logs are in $dlog/basic_simulator_ue.txt"
1039
    set +e
1040 1041 1042
    {
      cd $OPENAIR_DIR/cmake_targets/basic_simulator/ue
      cmake .
1043 1044
      make -j`nproc` lte-uesoftmodem
      make -j`nproc` coding params_libconfig tcp_bridge_oai
1045 1046 1047
      ln -sf libtcp_bridge_oai.so liboai_device.so
      cd ../..
    } > $dlog/basic_simulator_ue.txt 2>&1
1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058
    set -e
    if [ -s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/lte-uesoftmodem -a \
         -s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libcoding.so -a \
         -s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libparams_libconfig.so -a \
         -s $OPENAIR_DIR/cmake_targets/basic_simulator/ue/libtcp_bridge_oai.so ] ; then
      echo_success "UE compiled"
      check_warnings "$dlog/basic_simulator_ue.txt"
    else
      echo_error "UE compilation failed"
      exit 1
    fi
1059 1060 1061 1062 1063

    echo_info "Generate UE SIM data"
    $OPENAIR_DIR/targets/bin/conf2uedata -c $OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf -o $OPENAIR_DIR/cmake_targets/basic_simulator/ue

  fi
1064 1065 1066
}

main "$@"