build_oai 37.6 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="False"
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
--usrp-recplay
   Build for I/Q record-playback modes
169 170
--ue-nas-use-tun
   Use TUN devices for the UEs instead of ue_ip.ko
171 172 173
--basic-simulator
   Generates a basic [1 UE + 1 eNB + no channel] simulator.
   See targets/ARCH/tcp_bridge/README.tcp_bridge_oai for documentation.
174
Usage (first build):
175
 NI/ETTUS B201  + COTS UE : ./build_oai -I  --eNB -x --install-system-files -w USRP
176 177
Usage (Regular):
 Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x 
Cedric Roux's avatar
Cedric Roux committed
178
 NI/ETTUS B201  + OAI ENB : ./build_oai --eNB -x -w USRP"
179 180 181 182
}


function main() {
183

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

409
  #########################################################
Guy De Souza's avatar
Guy De Souza committed
410
  # check validity of HW and TP parameters for eNB / gNB
411
  #########################################################
412
  # to be discussed
413
  
Guy De Souza's avatar
Guy De Souza committed
414
  if [ "$eNB" = "1" -o "$gNB" = "1" ] ; then
415 416
      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!"
417
      fi
418 419
      if [ "$HW" = "None" ] ; then 
	  echo_info "No radio head has been selected (HW set to $HW)"	
420
      fi
421 422
      if [ "$TP" = "None" ] ; then
	  echo_info "No transport protocol has been selected (TP set to $TP)"	
423 424 425
      fi
  fi
  
Wang's avatar
Wang committed
426 427 428 429 430 431
  if [ "$HWLAT" = "1" ] ; then
      if [ "$HW" = "None" ] ; then
    echo_info "No radio head has been selected (HW set to $HW)" 
      fi
  fi

432
  echo_info "RF HW set to $HW" 
433 434 435 436
  #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
437
  if [ "$FORCE_DEADLINE_SCHEDULER_FLAG_USER" = "" ]; then
438
     if [ "$HW" = "EXMIMO" ] ; then 
439
        DEADLINE_SCHEDULER_FLAG_USER="True"
440
     elif [ "$HW" = "ETHERNET" ] ; then 
441
        DEADLINE_SCHEDULER_FLAG_USER="False"
442
     elif [ "$HW" = "OAI_USRP" ] ; then 
laurent's avatar
laurent committed
443
        DEADLINE_SCHEDULER_FLAG_USER="False"
Wang's avatar
Wang committed
444 445
     elif [ "$HW" = "OAI_ADRV9371_ZC706" ] ; then 
        DEADLINE_SCHEDULER_FLAG_USER="False"
446
     elif [ "$HW" = "OAI_BLADERF" ] ; then 
laurent's avatar
laurent committed
447
        DEADLINE_SCHEDULER_FLAG_USER="False"
448
     elif [ "$HW" = "OAI_LMSSDR" ] ; then 
laurent's avatar
laurent committed
449
        DEADLINE_SCHEDULER_FLAG_USER="False"
450
     elif [ "$HW" = "None" ] ; then 
laurent's avatar
laurent committed
451
        DEADLINE_SCHEDULER_FLAG_USER="False"
452 453 454 455 456
     else 
        echo_error "Unknown HW type $HW. Exiting now..."
        exit 
     fi
  else
laurent's avatar
laurent committed
457
     DEADLINE_SCHEDULER_FLAG_USER=$FORCE_DEADLINE_SCHEDULER_FLAG_USER
458 459
  fi

460
  #Disable CPU Affinity for deadline scheduler
laurent's avatar
laurent committed
461
  if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "True" ] ; then 
462 463
     CPU_AFFINITY_FLAG_USER="False"
  fi
464

laurent's avatar
laurent committed
465
  echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
466
  echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
467

468 469 470 471
  if [ -n "$UHD_IMAGES_DIR" ] && [ -z "$INSTALL_EXTERNAL" ]; then
    echo_error "UHD images download settings will not be applied without -I present"
    exit
  fi
472 473 474
  ############################################
  # setting and printing OAI envs, we should check here
  ############################################
gauthier's avatar
gauthier committed
475

476
  echo_info "2. Setting the OAI PATHS ..."
thomasl's avatar
thomasl committed
477

478
  cecho "OPENAIR_DIR    = $OPENAIR_DIR" $green
479

480 481 482 483 484 485 486 487 488 489
  # 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
490

491

492 493 494 495
  if [ "$CLEAN_ALL" = "1" ] ; then
    clean_all_files
    echo_info "Erased all previously producted files"
  fi
496

497 498 499 500 501 502 503
  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
504 505 506
    if [ "$HW" == "OAI_USRP" ] ; then
      echo_info "installing packages for USRP support"
      check_install_usrp_uhd_driver
507
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
508
        install_usrp_uhd_driver $UHD_IMAGES_DIR
509
      fi
510
    fi 
Wang's avatar
Wang committed
511 512 513 514
    if [ "$HW" == "OAI_ADRV9371_ZC706" ] ; then
      echo_info "\nInstalling packages for ADRV9371_ZC706 support"
      check_install_libiio_driver
    fi 
515
    if [ "$HW" == "OAI_BLADERF" ] ; then
516
      echo_info "installing packages for BLADERF support"
517
      check_install_bladerf_driver
518 519 520
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
        flash_firmware_bladerf
      fi
521
    fi
522 523 524
    echo_info "installing protobuf/protobuf-c for flexran agent support"
    install_protobuf_from_source
    install_protobuf_c_from_source
525 526 527 528 529 530 531
  fi

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

532 533
  
  
534 535 536
  echo_info "3. building the compilation directives ..."

  DIR=$OPENAIR_DIR/cmake_targets
537
  if [ "$NOS1" = "1" ] ; then
Guy De Souza's avatar
Guy De Souza committed
538
      build_dir=noS1_ran_build
539
      if [ "$gNB" = "1" ] ; then
tct-labo4's avatar
tct-labo4 committed
540
         exec=nr-softmodem-nos1
541 542 543 544 545 546 547
       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
548
  else
Guy De Souza's avatar
Guy De Souza committed
549
      build_dir=ran_build
550 551 552 553 554 555 556 557 558
      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
559
  fi
560 561 562
  if [ "$T_TRACER" =  "False" ] ; then
      lte_build_dir=${lte_build_dir}_noLOG
  fi
563 564 565
# configuration module libraries, one currently available, using libconfig 
  config_libconfig_shlib=params_libconfig
  
566
  # first generate the CMakefile in the right directory
Guy De Souza's avatar
Guy De Souza committed
567
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" ] ; then
568

Guy De Souza's avatar
Guy De Souza committed
569 570 571 572
    # softmodem compilation
    [ "$CLEAN" = "1" ] && rm -rf $DIR/$build_dir/build
    mkdir -p $DIR/$build_dir/build
    cmake_file=$DIR/$build_dir/CMakeLists.txt
573 574
    echo "cmake_minimum_required(VERSION 2.8)"   >  $cmake_file
    if [ "$NOS1" = "1" ] ; then
Guy De Souza's avatar
Guy De Souza committed
575
	cat  $DIR/$build_dir/CMakeLists.template >>  $cmake_file
576
    fi
577
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
578
    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
579
    echo "set ( XFORMS $XFORMS )"                  >>  $cmake_file
Xu Bo's avatar
Xu Bo committed
580
    echo "set ( UE_EXPANSION $UE_EXPANSION )"      >>  $cmake_file
581
#    echo "set ( PHY_TX_THREAD $UE_EXPANSION )"     >>  $cmake_file
582
    echo "set ( PRE_SCD_THREAD $UE_EXPANSION )"    >>  $cmake_file
583
    echo "set ( RRC_ASN1_VERSION \"${REL}\")"      >>  $cmake_file
584
    echo "set ( NR_RRC_ASN1_VERSION \"${NR_REL}\")"      >>  $cmake_file
585 586
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"     >>  $cmake_file
    echo "set ( RF_BOARD \"${HW}\")"               >>  $cmake_file
587
    echo "set ( TRANSP_PRO \"${TP}\")"             >>  $cmake_file
Guy De Souza's avatar
Guy De Souza committed
588
    echo "set(PACKAGE_NAME \"${exec}\")"       >>  $cmake_file
laurent's avatar
laurent committed
589
    echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )"    >>$cmake_file
590
    echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"      >>$cmake_file
591
    echo "set ( T_TRACER $T_TRACER )"              >>  $cmake_file
592
    echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
593 594
    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
595
    echo "set (DISABLE_LOG_X $DISABLE_LOG_X)"        >>  $cmake_file
596
    echo "set (USRP_REC_PLAY $USRP_REC_PLAY)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
597 598 599 600 601
    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
602
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
Guy De Souza's avatar
Guy De Souza committed
603
    cd  $DIR/$build_dir/build
604
    eval $CMAKE_CMD
605 606
  fi

Guy De Souza's avatar
Guy De Souza committed
607 608
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" ] ; then
    echo_info "Compiling $exec"
609
    compilations \
Guy De Souza's avatar
Guy De Souza committed
610 611
	  $build_dir $exec \
	  $exec $dbin/$exec.$REL
612

613 614
# mandatory shared lib
    compilations \
Guy De Souza's avatar
Guy De Souza committed
615
	  $build_dir $config_libconfig_shlib \
616
	  lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
617
    compilations \
Guy De Souza's avatar
Guy De Souza committed
618
          $build_dir coding \
619
          libcoding.so $dbin/libcoding.so
620
	  
621 622
    if [ "$NOS1" = "1" ] ; then
	compilations \
Guy De Souza's avatar
Guy De Souza committed
623
	    $build_dir nasmesh \
624 625
	    CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
	compilations \
Guy De Souza's avatar
Guy De Souza committed
626
	    $build_dir rb_tool \
627 628 629
	    rb_tool $dbin/rb_tool
	cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
    fi
630
  fi
631

Florian Kaltenberger's avatar
Florian Kaltenberger committed
632
  if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
633 634 635
    # ue_ip driver compilation
    echo_info "Compiling UE specific part"
    compilations \
Guy De Souza's avatar
Guy De Souza committed
636
      $build_dir ue_ip \
gauthier's avatar
gauthier committed
637
      CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
638

gauthier's avatar
gauthier committed
639 640
#    mkdir -p $DIR/at_commands/build
#    cd $DIR/at_commands/build
641
#    eval $CMAKE_CMD
gauthier's avatar
gauthier committed
642 643 644
#    compilations \
#      at_commands at_nas_ue \
#      at_nas_ue $dbin/at_nas_ue
645
    
gauthier's avatar
gauthier committed
646
    [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build
647 648
    mkdir -p $DIR/nas_sim_tools/build
    cd $DIR/nas_sim_tools/build
gauthier's avatar
gauthier committed
649
    
650
    eval $CMAKE_CMD
thomasl's avatar
thomasl committed
651
    compilations \
652 653
      nas_sim_tools usim \
      usim $dbin/usim
thomasl's avatar
thomasl committed
654
    compilations \
655 656
      nas_sim_tools nvram \
      nvram $dbin/nvram
thomasl's avatar
thomasl committed
657
    compilations \
658 659
        nas_sim_tools conf2uedata \
        conf2uedata $dbin/conf2uedata
660 661

    # generate USIM data
662 663
    if [ -f $dbin/conf2uedata ]; then
      install_nas_tools $conf_nvram_path $gen_nvram_path
Guy De Souza's avatar
Guy De Souza committed
664 665 666 667
      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
668 669 670
    else
      echo_warning "not generated UE NAS files: binaries not found"
    fi
671
  fi
thomasl's avatar
thomasl committed
672

673
  if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
674 675 676 677 678
    cd $OPENAIR_DIR/cmake_targets/lte-simulators
    [ "$CLEAN" = "1" ] && rm -rf build
    mkdir -p build
    cd build
    rm -f *sim
679
    eval $CMAKE_CMD
680
  fi
681

682 683 684
  if [ "$SIMUS_PHY" = "1" ] ; then
    # lte unitary simulators compilation
    echo_info "Compiling unitary tests simulators"
685 686
    # TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
    #simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
687
    simlist="dlsim ulsim polartest ldpctest"
688 689 690 691 692
    for f in $simlist ; do
      compilations \
      lte-simulators $f \
	  $f $dbin/$f.$REL
    done
693 694 695
    compilations \
          lte-simulators coding \
          libcoding.so $dbin/libcoding.so
696
  fi
thomasl's avatar
thomasl committed
697

gauthier's avatar
gauthier committed
698
  # Core simulators
699 700 701 702 703 704 705 706 707 708 709
  #############
  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
710

711 712
  # EXMIMO drivers & firmware loader
  ###############
713
  if [ "$HW" = "EXMIMO" ] ; then
gauthier's avatar
gauthier committed
714
    
715 716
    echo_info "Compiling Express MIMO 2 board drivers"
    compilations \
Guy De Souza's avatar
Guy De Souza committed
717
        $build_dir openair_rf \
thomasl's avatar
thomasl committed
718
        CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko
719
    compilations \
Guy De Souza's avatar
Guy De Souza committed
720
	  $build_dir updatefw \
gauthier's avatar
gauthier committed
721
	  updatefw $dbin/updatefw
722
    echo_info "Compiling oarf tools. The logfile for compilation is here: $dlog/oarf.txt"
Guy De Souza's avatar
Guy De Souza committed
723 724
    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
725 726 727 728 729
    if [ -s $dbin/oarf_config_exmimo.oct ] ; then
	echo_success "oarf tools compiled"
    else
	echo_error "oarf tools compilation failed"
    fi
730
    cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
731
  fi
thomasl's avatar
thomasl committed
732

733

734

oai's avatar
oai committed
735 736 737
  # Telnet server compilation
  #####################
  if [ "$BUILD_TELNETSRV" = "1" ] ; then
Guy De Souza's avatar
Guy De Souza committed
738
              build_dir=$build_dir
739 740 741
              compilations \
                  $build_dir telnetsrv \
                  libtelnetsrv.so $dbin/libtelnetsrv.so
oai's avatar
oai committed
742 743

  fi  
Wang's avatar
Wang committed
744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 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
  # 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  
 
800 801
  # build RF device and transport protocol libraries
  #####################################
802
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HWLAT" = "1" ] ; then
803

Guy De Souza's avatar
Guy De Souza committed
804
      build_dir=$build_dir
805

806
      # build RF device libraries
807
      if [ "$HW" != "None" ] ; then
808
	  rm -f liboai_device.so
809
	  rm -f $dbin/liboai_device.so
810

811
	  # link liboai_device.so with the selected RF device library
812
	  if [ "$HW" == "EXMIMO" ] ; then
813 814 815
	      compilations \
		  $build_dir oai_exmimodevif \
		  liboai_exmimodevif.so $dbin/liboai_exmimodevif.so.$REL
816 817 818

	      ln -sf liboai_exmimodevif.so liboai_device.so
	      ln -sf $dbin/liboai_exmimodevif.so.$REL $dbin/liboai_device.so
819
	      echo_info "liboai_device.so is linked to EXMIMO device library"       
Wang's avatar
Wang committed
820 821 822 823 824
	  elif [ "$HW" == "OAI_ADRV9371_ZC706" ] ; then

        ln -sf $OPENAIR_DIR/targets/ARCH/ADRV9371_ZC706/slib/libadrv9371_zc706.so liboai_device.so

	      echo_info "liboai_device.so is linked to ADRV9371_ZC706 device library"        
825
	  elif [ "$HW" == "OAI_USRP" ] ; then
826 827 828
              compilations \
                  $build_dir oai_usrpdevif \
                  liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
829

830 831
	      ln -sf liboai_usrpdevif.so liboai_device.so
	      ln -sf $dbin/liboai_usrpdevif.so.$REL $dbin/liboai_device.so
832 833
	      echo_info "liboai_device.so is linked to USRP device library"        
	  elif [ "$HW" == "OAI_BLADERF" ] ; then
834 835 836 837 838 839
	      if [ -f "/usr/include/libbladeRF.h" ] ; then
		  compilations \
		      $build_dir oai_bladerfdevif \
		      liboai_bladerfdevif.so $dbin/liboai_bladerfdevif.so.$REL
	      fi

840 841
	      ln -sf liboai_bladerfdevif.so liboai_device.so
	      ln -sf $dbin/liboai_bladerfdevif.so.$REL $dbin/liboai_device.so
842
	      echo_info "liboai_device.so is linked to BLADERF device library"	 
843 844 845 846 847 848 849
	  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

850 851
	      ln -sf liboai_lmssdrdevif.so liboai_device.so
	      ln -sf $dbin/liboai_lmssdrdevif.so.$REL $dbin/liboai_device.so
852
	      echo_info "liboai_device.so is linked to LMSSDR device library"	 
853 854 855 856 857 858
	  else 
	      echo_info "liboai_device.so is not linked to any device library"	    
	  fi
      fi
      
      # build trasport protocol libraries (currently only ETHERNET is available)
859
      if [ "$TP" != "None" ] ; then
860
	  rm -f liboai_transpro.so
861 862
	  rm -f $dbin/liboai_transpro.so

863
	  if [ "$TP" == "ETHERNET" ] ; then
864 865 866
	      compilations \
		  $build_dir oai_eth_transpro \
		  liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
867 868
	      ln -sf liboai_eth_transpro.so liboai_transpro.so
	      ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
869 870 871 872 873
	      echo_info "liboai_transpro.so is linked with ETHERNET library"	 
	  fi      
      fi
fi

874

875 876 877 878 879 880 881 882 883 884 885
  # 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
886
    eval $CMAKE_CMD
887 888
    make doc
    ) >& $doxygen_log
889 890
  fi

gauthier's avatar
gauthier committed
891 892 893
  # Auto-tests
  #####################
  if [ "$OAI_TEST" = "1" ]; then
thomasl's avatar
thomasl committed
894
    echo_info "10. Running OAI pre commit tests (pre-ci) ..."
895 896 897 898
    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 "
899 900
    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 "
901
    echo_info "You can hit CTRL-C any time to terminate the autotests..."
902 903 904
    echo "Current User Name: $USER"
    read -s -p "Enter Password: " mypassword
    echo -e "\n"
905 906
    rm -fr $OPENAIR_DIR/cmake_targets/autotests/log
    mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log
907
    if [ "$RUN_GROUP" -eq "1" ]; then
908
        $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
909
    else
910
        $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
911
    fi
912
    wait
gauthier's avatar
gauthier committed
913
  else
thomasl's avatar
thomasl committed
914
    echo_info "10. Bypassing the Tests ..."
gauthier's avatar
gauthier committed
915
  fi
916 917 918 919 920 921

  # basic simulator
  #####################
  if [ "$BASIC_SIMULATOR" = "1" ]; then
    echo_info "Build basic simulator"
    [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/basic_simulator
922
    [ "$CLEAN" = "1" ] && rm -rf $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
923 924 925
    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
926
    mkdir -p $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952

    # 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"
953
    set +e
954 955 956
    {
      cd $OPENAIR_DIR/cmake_targets/basic_simulator/enb
      cmake .
957 958
      make -j`nproc` lte-softmodem
      make -j`nproc` coding params_libconfig tcp_bridge_oai
959 960 961
      ln -sf libtcp_bridge_oai.so liboai_device.so
      cd ../..
    } > $dlog/basic_simulator_enb.txt 2>&1
962 963 964 965 966 967 968 969 970 971 972
    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
973 974 975 976

    # ue

    echo_info "Compile conf2uedata"
977 978
    cd $OPENAIR_DIR/cmake_targets/nas_sim_tools/build
    eval $CMAKE_CMD
979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994
    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
995
    echo "set ( T_TRACER \"True\" )"                  >>  $cmake_file
996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008
    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"
1009
    set +e
1010 1011 1012
    {
      cd $OPENAIR_DIR/cmake_targets/basic_simulator/ue
      cmake .
1013 1014
      make -j`nproc` lte-uesoftmodem
      make -j`nproc` coding params_libconfig tcp_bridge_oai
1015 1016 1017
      ln -sf libtcp_bridge_oai.so liboai_device.so
      cd ../..
    } > $dlog/basic_simulator_ue.txt 2>&1
1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028
    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
1029 1030 1031 1032 1033

    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
1034 1035 1036
}

main "$@"