build_oai 35.2 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
Cedric Roux's avatar
Cedric Roux committed
51
REL="Rel14"
52
HW="None"
53
TP="None"
Florian Kaltenberger's avatar
Florian Kaltenberger committed
54
NOS1=0
gauthier's avatar
gauthier committed
55
EPC=0
56
VERBOSE_COMPILE=0
57
CFLAGS_PROCESSOR_USER=""
58 59
RUN_GROUP=0
TEST_CASE_GROUP=""
60
BUILD_DOXYGEN=0
61
T_TRACER="True"
62
DISABLE_HARDWARE_DEPENDENCY="False"
63
CMAKE_BUILD_TYPE=""
64
CMAKE_CMD="$CMAKE"
65
UE_AUTOTEST_TRACE="False"
Gabriel's avatar
Gabriel committed
66 67
UE_DEBUG_TRACE="False"
UE_TIMING_TRACE="False"
Cedric Roux's avatar
Cedric Roux committed
68
DISABLE_LOG_X="False"
69
USRP_REC_PLAY="False"
70
BUILD_ECLIPSE=0
71
UE_NAS_USE_TUN="False"
72
BASIC_SIMULATOR=0
73 74
trap handle_ctrl_c INT

75
function print_help() {
Cedric Roux's avatar
Cedric Roux committed
76
  echo_info "
77 78 79 80 81 82
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
83
   Erase all files to make a rebuild from start
84
-C | --clean-all
Cedric Roux's avatar
Cedric Roux committed
85
   Erase all files made by previous compilations, installations
86 87
--clean-kernel
   Erase previously installed features in kernel: iptables, drivers, ...
gauthier's avatar
gauthier committed
88
-I | --install-external-packages
89 90 91 92 93
   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
94
   Add debugging symbols to compilation directives. It also disables any compiler optimization. Only for debugging. Do not use in normal operation!
95 96 97
-h | --help
   Print this help
--eNB
98
   Makes the LTE softmodem
99
--UE
100
   Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file
Cedric Roux's avatar
Cedric Roux committed
101 102 103 104
--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\")
105
-r | --3gpp-release
Cedric Roux's avatar
Cedric Roux committed
106
   default is Rel14,
107
   Rel8 limits the implementation to 3GPP Release 8 version
Cedric Roux's avatar
Cedric Roux committed
108
   Rel10 limits the implementation to 3GPP Release 10 version
109
-w | --hardware
110
   EXMIMO, USRP, BLADERF, ETHERNET, LMSSDR, IRIS, None (Default)
111
   Adds this RF board support (in external packages installation and in compilation)
112 113 114
-t | --transport protocol
   ETHERNET , None
   Adds this trasport protocol support in compilation
115 116 117 118 119 120
--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
121 122
--run-group 
   runs only specified test cases specified here. This flag is only valid with -s
123 124 125
-V | --vcd
   Adds a debgging facility to the binary files: GUI with major internal synchronization events
-x | --xforms
126
   Adds a software oscilloscope feature to the produced binaries. 
127
--install-system-files
gauthier's avatar
gauthier committed
128
   Install OpenArInterface required files in Linux system
129
   (will ask root password)
130
--noS1 
131
   Compiles lte-softmodem without S1 interface, using direct link to IP instead
132 133
--verbose-compile
   Shows detailed compilation instructions in makefile
134 135
--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
136 137
--build-doxygen
   Builds doxygen based documentation.
138
--disable-deadline
139 140
   Disables deadline scheduler of Linux kernel (>=3.14.x).
--enable-deadline
laurent's avatar
laurent committed
141
   Enable deadline scheduler of Linux kernel (>=3.14.x). 
142
--disable-cpu-affinity
143
   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
144 145
--disable-T-Tracer
   Disables the T tracer.
146 147
--disable-hardware-dependency
   Disable HW dependency during installation
148 149
--ue-autotest-trace
    Enable specific traces for UE autotest framework
Gabriel's avatar
Gabriel committed
150 151 152 153
--ue-trace
    Enable traces for UE debugging
--ue-timing
    Enable traces for timing
Cedric Roux's avatar
Cedric Roux committed
154 155
--disable-log
   Disable all LOG_* macros
156 157
--build-eclipse
   Build eclipse project files. Paths are auto corrected by fixprj.sh
158 159 160 161
--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)
162 163
--usrp-recplay
   Build for I/Q record-playback modes
164 165
--ue-nas-use-tun
   Use TUN devices for the UEs instead of ue_ip.ko
166 167 168
--basic-simulator
   Generates a basic [1 UE + 1 eNB + no channel] simulator.
   See targets/ARCH/tcp_bridge/README.tcp_bridge_oai for documentation.
169
Usage (first build):
170
 NI/ETTUS B201  + COTS UE : ./build_oai -I  --eNB -x --install-system-files -w USRP
171 172
Usage (Regular):
 Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x 
Cedric Roux's avatar
Cedric Roux committed
173
 NI/ETTUS B201  + OAI ENB : ./build_oai --eNB -x -w USRP"
174 175 176 177
}


function main() {
178

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

434
  #Disable CPU Affinity for deadline scheduler
laurent's avatar
laurent committed
435
  if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "True" ] ; then 
436 437
     CPU_AFFINITY_FLAG_USER="False"
  fi
438

laurent's avatar
laurent committed
439
  echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
440
  echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
441

442 443 444 445
  if [ -n "$UHD_IMAGES_DIR" ] && [ -z "$INSTALL_EXTERNAL" ]; then
    echo_error "UHD images download settings will not be applied without -I present"
    exit
  fi
446 447 448
  ############################################
  # setting and printing OAI envs, we should check here
  ############################################
gauthier's avatar
gauthier committed
449

450
  echo_info "2. Setting the OAI PATHS ..."
thomasl's avatar
thomasl committed
451

452
  cecho "OPENAIR_DIR    = $OPENAIR_DIR" $green
453

454 455 456 457 458 459 460 461 462 463
  # 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
464

465

466 467 468 469
  if [ "$CLEAN_ALL" = "1" ] ; then
    clean_all_files
    echo_info "Erased all previously producted files"
  fi
470

471 472 473 474 475 476 477
  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
478 479 480
    if [ "$HW" == "OAI_USRP" ] ; then
      echo_info "installing packages for USRP support"
      check_install_usrp_uhd_driver
481
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
482
        install_usrp_uhd_driver $UHD_IMAGES_DIR
483
      fi
484 485
    fi 
    if [ "$HW" == "OAI_BLADERF" ] ; then
486
      echo_info "installing packages for BLADERF support"
487
      check_install_bladerf_driver
488 489 490
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
        flash_firmware_bladerf
      fi
491
    fi
492 493 494 495 496 497 498
    if [ "$HW" == "OAI_IRIS" ] ; then
      echo_info "installing packages for IRIS support"
      check_install_soapy
      #if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
      #  flash_firmware_iris
      #fi
    fi
499 500 501
    echo_info "installing protobuf/protobuf-c for flexran agent support"
    install_protobuf_from_source
    install_protobuf_c_from_source
502 503 504 505 506 507 508
  fi

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

509 510
  
  
511 512 513
  echo_info "3. building the compilation directives ..."

  DIR=$OPENAIR_DIR/cmake_targets
514 515
  if [ "$NOS1" =  "1" ] ; then
      lte_build_dir=lte_noS1_build_oai
516 517 518 519 520 521
      if [ "$eNB" = "1" ] ; then
         lte_exec=lte-softmodem-nos1
      fi
      if [ "$UE" = "1" ] ; then
         lte_exec=lte-uesoftmodem-nos1
      fi
522 523
  else
      lte_build_dir=lte_build_oai
524 525 526 527 528 529
      if [ "$eNB" = "1" ] ; then
         lte_exec=lte-softmodem
      fi
      if [ "$UE" = "1" ] ; then
         lte_exec=lte-uesoftmodem
      fi
530
  fi
531 532 533
  if [ "$T_TRACER" =  "False" ] ; then
      lte_build_dir=${lte_build_dir}_noLOG
  fi
534 535 536
# configuration module libraries, one currently available, using libconfig 
  config_libconfig_shlib=params_libconfig
  
537 538
  # first generate the CMakefile in the right directory
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$HW" = "EXMIMO" ] ; then
539

540
    # LTE softmodem compilation
541 542 543 544 545 546 547
    [ "$CLEAN" = "1" ] && rm -rf $DIR/$lte_build_dir/build
    mkdir -p $DIR/$lte_build_dir/build
    cmake_file=$DIR/$lte_build_dir/CMakeLists.txt
    echo "cmake_minimum_required(VERSION 2.8)"   >  $cmake_file
    if [ "$NOS1" = "1" ] ; then
	cat  $DIR/$lte_build_dir/CMakeLists.template >>  $cmake_file
    fi
548
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
549
    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
550
    echo "set ( XFORMS $XFORMS )"                  >>  $cmake_file
Xu Bo's avatar
Xu Bo committed
551
    echo "set ( UE_EXPANSION $UE_EXPANSION )"      >>  $cmake_file
552
#    echo "set ( PHY_TX_THREAD $UE_EXPANSION )"     >>  $cmake_file
553
    echo "set ( PRE_SCD_THREAD $UE_EXPANSION )"    >>  $cmake_file
554 555 556
    echo "set ( RRC_ASN1_VERSION \"${REL}\")"      >>  $cmake_file
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"     >>  $cmake_file
    echo "set ( RF_BOARD \"${HW}\")"               >>  $cmake_file
557 558
    echo "set ( TRANSP_PRO \"${TP}\")"             >>  $cmake_file
    echo "set(PACKAGE_NAME \"${lte_exec}\")"       >>  $cmake_file
laurent's avatar
laurent committed
559
    echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )"    >>$cmake_file
560
    echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"      >>$cmake_file
561
    echo "set ( T_TRACER $T_TRACER )"              >>  $cmake_file
562
    echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
563 564
    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
565
    echo "set (DISABLE_LOG_X $DISABLE_LOG_X)"        >>  $cmake_file
566
    echo "set (USRP_REC_PLAY $USRP_REC_PLAY)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
567 568 569 570 571
    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
572
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
573
    cd  $DIR/$lte_build_dir/build
574
    eval $CMAKE_CMD
575 576
  fi

Florian Kaltenberger's avatar
Florian Kaltenberger committed
577
  if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
578
    echo_info "Compiling $lte_exec"
579
    compilations \
580 581 582
	  $lte_build_dir $lte_exec \
	  $lte_exec $dbin/$lte_exec.$REL

583 584 585 586
# mandatory shared lib
    compilations \
	  $lte_build_dir $config_libconfig_shlib \
	  lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
587 588 589
    compilations \
          $lte_build_dir coding \
          libcoding.so $dbin/libcoding.so
590
	  
591 592 593 594 595 596 597 598 599
    if [ "$NOS1" = "1" ] ; then
	compilations \
	    $lte_build_dir nasmesh \
	    CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
	compilations \
	    $lte_build_dir rb_tool \
	    rb_tool $dbin/rb_tool
	cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
    fi
600
  fi
601

Florian Kaltenberger's avatar
Florian Kaltenberger committed
602
  if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
603 604 605
    # ue_ip driver compilation
    echo_info "Compiling UE specific part"
    compilations \
606
      $lte_build_dir ue_ip \
gauthier's avatar
gauthier committed
607
      CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
608

gauthier's avatar
gauthier committed
609 610
#    mkdir -p $DIR/at_commands/build
#    cd $DIR/at_commands/build
611
#    eval $CMAKE_CMD
gauthier's avatar
gauthier committed
612 613 614
#    compilations \
#      at_commands at_nas_ue \
#      at_nas_ue $dbin/at_nas_ue
615
    
gauthier's avatar
gauthier committed
616
    [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build
617 618
    mkdir -p $DIR/nas_sim_tools/build
    cd $DIR/nas_sim_tools/build
gauthier's avatar
gauthier committed
619
    
620
    eval $CMAKE_CMD
thomasl's avatar
thomasl committed
621
    compilations \
622 623
      nas_sim_tools usim \
      usim $dbin/usim
thomasl's avatar
thomasl committed
624
    compilations \
625 626
      nas_sim_tools nvram \
      nvram $dbin/nvram
thomasl's avatar
thomasl committed
627
    compilations \
628 629
        nas_sim_tools conf2uedata \
        conf2uedata $dbin/conf2uedata
630 631

    # generate USIM data
632 633
    if [ -f $dbin/conf2uedata ]; then
      install_nas_tools $conf_nvram_path $gen_nvram_path
634
      echo_info "Copying UE specific part to $DIR/$lte_build_dir/build"
635 636 637
      cp -Rvf $dbin/.ue_emm.nvram0 $DIR/$lte_build_dir/build
      cp -Rvf $dbin/.ue.nvram0 $DIR/$lte_build_dir/build
      cp -Rvf $dbin/.usim.nvram0 $DIR/$lte_build_dir/build
638 639 640
    else
      echo_warning "not generated UE NAS files: binaries not found"
    fi
641
  fi
thomasl's avatar
thomasl committed
642

643
  if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
644 645 646 647 648
    cd $OPENAIR_DIR/cmake_targets/lte-simulators
    [ "$CLEAN" = "1" ] && rm -rf build
    mkdir -p build
    cd build
    rm -f *sim
649
    eval $CMAKE_CMD
650
  fi
651

652 653 654
  if [ "$SIMUS_PHY" = "1" ] ; then
    # lte unitary simulators compilation
    echo_info "Compiling unitary tests simulators"
655 656 657
    # TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
    #simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
    simlist="dlsim ulsim"
658 659 660 661 662
    for f in $simlist ; do
      compilations \
      lte-simulators $f \
	  $f $dbin/$f.$REL
    done
663 664 665
    compilations \
          lte-simulators coding \
          libcoding.so $dbin/libcoding.so
666 667 668
#    compilations \
#	  lte-simulators $config_libconfig_shlib \
#	  lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
669
  fi
thomasl's avatar
thomasl committed
670

gauthier's avatar
gauthier committed
671
  # Core simulators
672 673 674 675 676 677 678 679 680 681 682
  #############
  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 \
	  lte-simulators test_$f \
	  test_$f $dbin/test_$f.$REL
    done
  fi
thomasl's avatar
thomasl committed
683

684 685
  # EXMIMO drivers & firmware loader
  ###############
686
  if [ "$HW" = "EXMIMO" ] ; then
gauthier's avatar
gauthier committed
687
    
688 689
    echo_info "Compiling Express MIMO 2 board drivers"
    compilations \
690
        $lte_build_dir openair_rf \
thomasl's avatar
thomasl committed
691
        CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko
692
    compilations \
693
	  $lte_build_dir updatefw \
gauthier's avatar
gauthier committed
694
	  updatefw $dbin/updatefw
695
    echo_info "Compiling oarf tools. The logfile for compilation is here: $dlog/oarf.txt"
696 697 698 699 700 701 702
    make -C $OPENAIR_DIR/cmake_targets/$lte_build_dir/build oarf > $dlog/oarf.txt 2>&1
    cp $OPENAIR_DIR/cmake_targets/$lte_build_dir/build/*.oct $dbin
    if [ -s $dbin/oarf_config_exmimo.oct ] ; then
	echo_success "oarf tools compiled"
    else
	echo_error "oarf tools compilation failed"
    fi
703
    cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
704
  fi
thomasl's avatar
thomasl committed
705

706 707


oai's avatar
oai committed
708 709 710
  # Telnet server compilation
  #####################
  if [ "$BUILD_TELNETSRV" = "1" ] ; then
711 712 713 714
              build_dir=$lte_build_dir
              compilations \
                  $build_dir telnetsrv \
                  libtelnetsrv.so $dbin/libtelnetsrv.so
oai's avatar
oai committed
715

716 717 718 719 720 721 722 723 724
  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
725
  fi  
726 727
  # build RF device and transport protocol libraries
  #####################################
728
  if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
729

730
      build_dir=$lte_build_dir	  
731

732
      # build RF device libraries
733
      if [ "$HW" != "None" ] ; then
734
	  rm -f liboai_device.so
735
	  rm -f $dbin/liboai_device.so
736

737
	  # link liboai_device.so with the selected RF device library
738
	  if [ "$HW" == "EXMIMO" ] ; then
739 740 741
	      compilations \
		  $build_dir oai_exmimodevif \
		  liboai_exmimodevif.so $dbin/liboai_exmimodevif.so.$REL
742 743 744

	      ln -sf liboai_exmimodevif.so liboai_device.so
	      ln -sf $dbin/liboai_exmimodevif.so.$REL $dbin/liboai_device.so
745 746
	      echo_info "liboai_device.so is linked to EXMIMO device library"       
	  elif [ "$HW" == "OAI_USRP" ] ; then
747 748 749
              compilations \
                  $build_dir oai_usrpdevif \
                  liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
750

751 752
	      ln -sf liboai_usrpdevif.so liboai_device.so
	      ln -sf $dbin/liboai_usrpdevif.so.$REL $dbin/liboai_device.so
753 754
	      echo_info "liboai_device.so is linked to USRP device library"        
	  elif [ "$HW" == "OAI_BLADERF" ] ; then
755 756 757 758 759 760
	      if [ -f "/usr/include/libbladeRF.h" ] ; then
		  compilations \
		      $build_dir oai_bladerfdevif \
		      liboai_bladerfdevif.so $dbin/liboai_bladerfdevif.so.$REL
	      fi

761 762
	      ln -sf liboai_bladerfdevif.so liboai_device.so
	      ln -sf $dbin/liboai_bladerfdevif.so.$REL $dbin/liboai_device.so
763
	      echo_info "liboai_device.so is linked to BLADERF device library"	 
764 765 766 767 768 769 770
	  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

771 772
	      ln -sf liboai_lmssdrdevif.so liboai_device.so
	      ln -sf $dbin/liboai_lmssdrdevif.so.$REL $dbin/liboai_device.so
773
	      echo_info "liboai_device.so is linked to LMSSDR device library"	 
774 775 776 777 778 779 780 781
          elif [ "$HW" == "OAI_IRIS" ] ; then
                  compilations \
                      $build_dir oai_irisdevif \
                      liboai_irisdevif.so $dbin/liboai_irisdevif.so.$REL

              ln -s liboai_irisdevif.so liboai_device.so
              ln -s $dbin/liboai_irisdevif.so.$REL $dbin/liboai_device.so
              echo_info "liboai_device.so is linked to IRIS device library"
782 783 784 785 786 787
	  else 
	      echo_info "liboai_device.so is not linked to any device library"	    
	  fi
      fi
      
      # build trasport protocol libraries (currently only ETHERNET is available)
788
      if [ "$TP" != "None" ] ; then
789
	  rm -f liboai_transpro.so
790 791
	  rm -f $dbin/liboai_transpro.so

792
	  if [ "$TP" == "ETHERNET" ] ; then
793 794 795
	      compilations \
		  $build_dir oai_eth_transpro \
		  liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
796 797
	      ln -sf liboai_eth_transpro.so liboai_transpro.so
	      ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
798 799 800 801 802
	      echo_info "liboai_transpro.so is linked with ETHERNET library"	 
	  fi      
      fi
fi

803

804 805 806 807 808 809 810 811 812 813 814
  # 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
815
    eval $CMAKE_CMD
816 817
    make doc
    ) >& $doxygen_log
818 819
  fi

gauthier's avatar
gauthier committed
820 821 822
  # Auto-tests
  #####################
  if [ "$OAI_TEST" = "1" ]; then
thomasl's avatar
thomasl committed
823
    echo_info "10. Running OAI pre commit tests (pre-ci) ..."
824 825 826 827
    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 "
828 829
    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 "
830
    echo_info "You can hit CTRL-C any time to terminate the autotests..."
831 832 833
    echo "Current User Name: $USER"
    read -s -p "Enter Password: " mypassword
    echo -e "\n"
834 835
    rm -fr $OPENAIR_DIR/cmake_targets/autotests/log
    mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log
836
    if [ "$RUN_GROUP" -eq "1" ]; then
837
        $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
838
    else
839
        $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
840
    fi
841
    wait
gauthier's avatar
gauthier committed
842
  else
thomasl's avatar
thomasl committed
843
    echo_info "10. Bypassing the Tests ..."
gauthier's avatar
gauthier committed
844
  fi
845 846 847 848 849 850

  # basic simulator
  #####################
  if [ "$BASIC_SIMULATOR" = "1" ]; then
    echo_info "Build basic simulator"
    [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/basic_simulator
851
    [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
852 853 854
    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
855
    mkdir -p $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881

    # 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"
882
    set +e
883 884 885
    {
      cd $OPENAIR_DIR/cmake_targets/basic_simulator/enb
      cmake .
886 887
      make -j`nproc` lte-softmodem
      make -j`nproc` coding params_libconfig tcp_bridge_oai
888 889 890
      ln -sf libtcp_bridge_oai.so liboai_device.so
      cd ../..
    } > $dlog/basic_simulator_enb.txt 2>&1
891 892 893 894 895 896 897 898 899 900 901
    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
902 903 904 905

    # ue

    echo_info "Compile conf2uedata"
906 907
    cd $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
    eval $CMAKE_CMD
908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923
    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
924
    echo "set ( T_TRACER \"True\" )"                  >>  $cmake_file
925 926 927 928 929 930 931 932 933 934 935 936 937
    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"
938
    set +e
939 940 941
    {
      cd $OPENAIR_DIR/cmake_targets/basic_simulator/ue
      cmake .
942 943
      make -j`nproc` lte-uesoftmodem
      make -j`nproc` coding params_libconfig tcp_bridge_oai
944 945 946
      ln -sf libtcp_bridge_oai.so liboai_device.so
      cd ../..
    } > $dlog/basic_simulator_ue.txt 2>&1
947 948 949 950 951 952 953 954 955 956 957
    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
958 959 960 961 962

    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
963 964 965
}

main "$@"