build_oai 31.8 KB
Newer Older
thomasl's avatar
thomasl committed
1
#!/bin/bash
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#/*
# * 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
# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
# * 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

FredericLeroy's avatar
FredericLeroy committed
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"
45
FLEXRAN_AGENT_SB_IF="True"
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="False"
Rohit Gupta's avatar
Rohit Gupta committed
62
DISABLE_HARDWARE_DEPENDENCY="False"
63
CMAKE_BUILD_TYPE=""
64
UE_AUTOTEST_TRACE="False"
Gabriel's avatar
Gabriel committed
65
66
UE_DEBUG_TRACE="False"
UE_TIMING_TRACE="False"
Cedric Roux's avatar
Cedric Roux committed
67
DISABLE_LOG_X="False"
68
69
BUILD_ECLIPSE=0
CMAKE_CMD='cmake'
70
71
trap handle_ctrl_c INT

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


function main() {
173

174
175
  until [ -z "$1" ]
  do
176
    case "$1" in
177
178
179
180
181
       -c | --clean)
            CLEAN=1
            shift;;
       -C | --clean-all)
            CLEAN_ALL=1
thomasl's avatar
thomasl committed
182
            shift;;
183
184
185
       --clean-kernel)
            clean_kernel
            echo_info "Erased iptables config and removed modules from kernel"
thomasl's avatar
thomasl committed
186
            shift;;
187
       -I | --install-external-packages)
188
            INSTALL_EXTERNAL=1
189
            echo_info "Will install external packages"
thomasl's avatar
thomasl committed
190
            shift;;
191
       --install-optional-packages)
thomasl's avatar
thomasl committed
192
193
194
            INSTALL_OPTIONAL=1
            echo_info "Will install optional packages"
            shift;;
195
       -g | --run-with-gdb)
thomasl's avatar
thomasl committed
196
            GDB=1
197
198
            CMAKE_BUILD_TYPE="Debug"
            echo_info "Will Compile with gdb symbols and disable compiler optimization"
199
            CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug"
thomasl's avatar
thomasl committed
200
            shift;;
201
202
203
204
       --eNB)
            eNB=1
            echo_info "Will compile eNB"
            shift;;
205
206
207
208
       -a | --agent)
	    FLEXRAN_AGENT=1
	    echo_info "Will compile eNB with agent support"
	    shift;;
209
210
211
212
       --UE)
            UE=1
            echo_info "Will compile UE"
            shift;;
Cedric Roux's avatar
Cedric Roux committed
213
214
215
216
       --UE-conf-nvram)
            conf_nvram_path=$(readlink -f "$1")
            shift 2;;
        --UE-gen-nvram)
217
218
            gen_nvram_path=$(readlink -f $2)
            shift 2;;
219
220
221
222
       --RRH)
            RRH=1
            echo_info "Will compile RRH"
            shift;;
thomasl's avatar
thomasl committed
223
       -r | --3gpp-release)
gauthier's avatar
gauthier committed
224
            REL=$2
225
            echo_info "Setting release to: $REL"
thomasl's avatar
thomasl committed
226
227
228
            shift 2;;
       -w | --hardware)
            HW="$2" #"${i#*=}"
229
            # Use OAI_USRP  as the key word USRP is used inside UHD driver           
230
	    if [ "$HW" != "BLADERF" -a  "$HW" != "USRP" -a "$HW" != "LMSSDR" -a  "$HW" != "None" -a  "$HW" != "EXMIMO"  ] ; then 
231
232
233
234
235
236
237
238
		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
239
240
241
		if [ "$HW" == "LMSSDR" ] ; then 
		    HW="OAI_LMSSDR"
		fi 
242
243
		echo_info "Setting hardware to: $HW"
	    fi
thomasl's avatar
thomasl committed
244
            shift 2;;
245
246
	-t | --transport_protocol)
            TP="$2" #"${i#*=}"
247
248
249
250
251
	    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
252
            shift 2;;
253
	--oaisim)
254
255
256
257
            oaisim=1
            echo_info "Will compile oaisim and drivers nasmesh, ..."
            shift;;
       --phy_simulators)
thomasl's avatar
thomasl committed
258
            SIMUS_PHY=1
259
260
261
262
263
264
            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
265
266
       -s | --check)
            OAI_TEST=1
267
            echo_info "Will run auto-tests"
thomasl's avatar
thomasl committed
268
            shift;;
269
270
271
272
273
       --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
274
       -V | --vcd)
275
            echo_info "Setting gtk-wave output"
thomasl's avatar
thomasl committed
276
277
            VCD_TIMING=1
            EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
thomasl's avatar
thomasl committed
278
            shift;;
thomasl's avatar
thomasl committed
279
       -x | --xforms)
280
            XFORMS="True"
thomasl's avatar
thomasl committed
281
            EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
282
            echo_info "Will generate the software oscilloscope features"
thomasl's avatar
thomasl committed
283
            shift;;
284
285
286
287
       --install-system-files)
            INSTALL_SYSTEM_FILES=1
            echo_info "Will copy OpenAirInterface files in Linux directories"
            shift;;
288
289
290
291
       --noS1)
	    NOS1=1
            echo_info "Will compile without S1 interface"
            shift;;
292
293
294
295
       --verbose-compile)
	    VERBOSE_COMPILE=1
            echo_info "Will compile with verbose instructions"
            shift;;
296
297
       --cflags_processor)
            CFLAGS_PROCESSOR_USER=$2
298
            echo_info "Setting CPU FLAGS from USER to: $CFLAGS_PROCESSOR_USER"
299
            shift 2;;
300
301
302
303
       --build-doxygen)
	    BUILD_DOXYGEN=1
            echo_info "Will build doxygen support"
            shift;;     
304
       --disable-deadline)
laurent's avatar
laurent committed
305
            FORCE_DEADLINE_SCHEDULER_FLAG_USER="False"
306
307
            echo_info "Disabling the usage of deadline scheduler"
            shift 1;;
308
       --enable-deadline)
laurent's avatar
laurent committed
309
            FORCE_DEADLINE_SCHEDULER_FLAG_USER="True"
310
311
            echo_info "Enabling the usage of deadline scheduler"
            shift 1;;
Rohit Gupta's avatar
Rohit Gupta committed
312
313
314
315
       --disable-cpu-affinity)
            CPU_AFFINITY_FLAG_USER="False"
            echo_info "Disabling CPU Affinity (only valid when not using deadline scheduler)"
            shift 1;;
316
317
318
319
       --T-tracer)
            T_TRACER="True"
            echo_info "Enabling the T tracer"
            shift 1;;
320
321
322
323
       --disable-hardware-dependency)
            echo_info "Disabling hardware dependency for compiling software"
            DISABLE_HARDWARE_DEPENDENCY="True"
            shift 1;;
324
325
326
327
        --ue-autotest-trace)
            UE_AUTOTEST_TRACE="True"
            echo_info "Enabling autotest specific trace for UE"
            shift 1;;
Gabriel's avatar
Gabriel committed
328
329
330
331
332
333
334
335
        --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
336
337
338
339
        --disable-log)
            DISABLE_LOG_X="True"
            echo_info "Disabling all LOG_* traces"
            shift 1;;
340
341
342
343
        --uhd-images-dir)
            UHD_IMAGES_DIR=$2
            echo_info "Downloading UHD images in the indicated location"
            shift 2;;
344
345
346
347
348
       --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"
            shift 1;;			
thomasl's avatar
thomasl committed
349
350
351
        -h | --help)
            print_help
            exit 1;;
gauthier's avatar
gauthier committed
352
	*)
353
354
	    print_help
            echo_fatal "Unknown option $1"
thomasl's avatar
thomasl committed
355
            break;;
thomasl's avatar
thomasl committed
356
   esac
357
  done
358
  
359
360
361
  CMAKE_CMD="$CMAKE_CMD .."
  echo_info "CMAKE_CMD=$CMAKE_CMD"
  
362
  #########################################################
363
  # check validity of HW and TP parameters for RRH and eNB
364
  #########################################################
365
  # to be discussed
366
  
367
  if [ "$eNB" = "1" ] ; then
368
369
      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!"
370
      fi
371
372
      if [ "$HW" = "None" ] ; then 
	  echo_info "No radio head has been selected (HW set to $HW)"	
373
      fi
374
375
      if [ "$TP" = "None" ] ; then
	  echo_info "No transport protocol has been selected (TP set to $TP)"	
376
377
378
379
      fi
  fi
  
  if [ "$RRH" = "1" ] ; then
380
381
      if [ "$TP" = "None" ] ; then
	  echo_fatal "A transport protocol (e.g. -t ETHERNET) must be defined!"
382
      fi
383
384
      if [ "$HW" = "None" ] ; then
	  echo_info "No radio head has been selected (HW set to $HW)"	
385
386
      fi
  fi
thomasl's avatar
thomasl committed
387

knopp's avatar
knopp committed
388
  echo_info "RF HW set to $HW" 
389
390
391
392
  #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
393
  if [ "$FORCE_DEADLINE_SCHEDULER_FLAG_USER" = "" ]; then
394
     if [ "$HW" = "EXMIMO" ] ; then 
395
        DEADLINE_SCHEDULER_FLAG_USER="True"
396
     elif [ "$HW" = "ETHERNET" ] ; then 
397
        DEADLINE_SCHEDULER_FLAG_USER="False"
398
     elif [ "$HW" = "OAI_USRP" ] ; then 
laurent's avatar
laurent committed
399
        DEADLINE_SCHEDULER_FLAG_USER="False"
400
     elif [ "$HW" = "OAI_BLADERF" ] ; then 
laurent's avatar
laurent committed
401
        DEADLINE_SCHEDULER_FLAG_USER="False"
402
     elif [ "$HW" = "OAI_LMSSDR" ] ; then 
laurent's avatar
laurent committed
403
        DEADLINE_SCHEDULER_FLAG_USER="False"
404
     elif [ "$HW" = "None" ] ; then 
laurent's avatar
laurent committed
405
        DEADLINE_SCHEDULER_FLAG_USER="False"
406
407
408
409
410
     else 
        echo_error "Unknown HW type $HW. Exiting now..."
        exit 
     fi
  else
laurent's avatar
laurent committed
411
     DEADLINE_SCHEDULER_FLAG_USER=$FORCE_DEADLINE_SCHEDULER_FLAG_USER
412
413
  fi

Rohit Gupta's avatar
Rohit Gupta committed
414
  #Disable CPU Affinity for deadline scheduler
laurent's avatar
laurent committed
415
  if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "True" ] ; then 
Rohit Gupta's avatar
Rohit Gupta committed
416
417
     CPU_AFFINITY_FLAG_USER="False"
  fi
418

laurent's avatar
laurent committed
419
  echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
Rohit Gupta's avatar
Rohit Gupta committed
420
  echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
421

422
423
424
425
  if [ -n "$UHD_IMAGES_DIR" ] && [ -z "$INSTALL_EXTERNAL" ]; then
    echo_error "UHD images download settings will not be applied without -I present"
    exit
  fi
426
427
428
  ############################################
  # setting and printing OAI envs, we should check here
  ############################################
gauthier's avatar
gauthier committed
429

430
  echo_info "2. Setting the OAI PATHS ..."
thomasl's avatar
thomasl committed
431

432
  cecho "OPENAIR_DIR    = $OPENAIR_DIR" $green
thomasl's avatar
thomasl committed
433

434
435
436
437
438
439
440
441
442
443
  # 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
444

445

446
447
448
449
  if [ "$CLEAN_ALL" = "1" ] ; then
    clean_all_files
    echo_info "Erased all previously producted files"
  fi
450

451
452
453
454
455
456
457
  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
458
459
460
    if [ "$HW" == "OAI_USRP" ] ; then
      echo_info "installing packages for USRP support"
      check_install_usrp_uhd_driver
461
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
462
        install_usrp_uhd_driver $UHD_IMAGES_DIR
463
      fi
464
465
    fi 
    if [ "$HW" == "OAI_BLADERF" ] ; then
466
      echo_info "installing packages for BLADERF support"
467
      check_install_bladerf_driver
468
469
470
      if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
        flash_firmware_bladerf
      fi
471
    fi
472
473
474
475
476
477
478
  fi

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

479
  if [ "$oaisim" = "1" ] ; then
480
      #to be discussed
481
      # there is no RF device  transport protocol 
482
      HW="None" 
483
      TP="ETHERNET"
484
      
485
486
487
488
489
490
      if [ "$XFORMS" == "True" ] ; then 
	  PRINT_STATS="True"
      fi 
  fi
  
  
491
492
493
  echo_info "3. building the compilation directives ..."

  DIR=$OPENAIR_DIR/cmake_targets
494
495
496
497
498
499
500
  if [ "$NOS1" =  "1" ] ; then
      lte_build_dir=lte_noS1_build_oai
      lte_exec=lte-softmodem-nos1
  else
      lte_build_dir=lte_build_oai
      lte_exec=lte-softmodem
  fi
501

502
503
  # first generate the CMakefile in the right directory
  if [ "$eNB" = "1" -o "$UE" = "1" -o "$HW" = "EXMIMO" ] ; then
504

505
    # LTE softmodem compilation
506
507
508
509
510
511
512
    [ "$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
513
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
514
    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
515
    echo "set ( XFORMS $XFORMS )"                  >>  $cmake_file
516
517
518
    if [ "$FLEXRAN_AGENT" = "1" ] ; then
	echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )"      >>  $cmake_file
    fi
519
520
521
    echo "set ( RRC_ASN1_VERSION \"${REL}\")"      >>  $cmake_file
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"     >>  $cmake_file
    echo "set ( RF_BOARD \"${HW}\")"               >>  $cmake_file
522
523
    echo "set ( TRANSP_PRO \"${TP}\")"             >>  $cmake_file
    echo "set(PACKAGE_NAME \"${lte_exec}\")"       >>  $cmake_file
laurent's avatar
laurent committed
524
    echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )"    >>$cmake_file
Rohit Gupta's avatar
Rohit Gupta committed
525
    echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"      >>$cmake_file
526
    echo "set ( T_TRACER $T_TRACER )"              >>  $cmake_file
527
    echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
528
529
    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
530
    echo "set (DISABLE_LOG_X $DISABLE_LOG_X)"        >>  $cmake_file
Gabriel's avatar
Gabriel committed
531
532
533
534
535
    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
536
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
537
    cd  $DIR/$lte_build_dir/build
538
    eval $CMAKE_CMD
539
540
  fi

Florian Kaltenberger's avatar
Florian Kaltenberger committed
541
  if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
542
    echo_info "Compiling $lte_exec"
543
    compilations \
544
545
546
547
548
549
550
551
552
553
554
555
	  $lte_build_dir $lte_exec \
	  $lte_exec $dbin/$lte_exec.$REL

    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
556
  fi
thomasl's avatar
thomasl committed
557

Florian Kaltenberger's avatar
Florian Kaltenberger committed
558
  if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
559
560
561
    # ue_ip driver compilation
    echo_info "Compiling UE specific part"
    compilations \
562
      $lte_build_dir ue_ip \
gauthier's avatar
gauthier committed
563
      CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
564

gauthier's avatar
gauthier committed
565
566
#    mkdir -p $DIR/at_commands/build
#    cd $DIR/at_commands/build
567
#    eval $CMAKE_CMD
gauthier's avatar
gauthier committed
568
569
570
#    compilations \
#      at_commands at_nas_ue \
#      at_nas_ue $dbin/at_nas_ue
571
    
gauthier's avatar
gauthier committed
572
    [ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build
573
574
    mkdir -p $DIR/nas_sim_tools/build
    cd $DIR/nas_sim_tools/build
gauthier's avatar
gauthier committed
575
    
576
    eval $CMAKE_CMD
thomasl's avatar
thomasl committed
577
    compilations \
578
579
      nas_sim_tools usim \
      usim $dbin/usim
thomasl's avatar
thomasl committed
580
    compilations \
581
582
      nas_sim_tools nvram \
      nvram $dbin/nvram
thomasl's avatar
thomasl committed
583
    compilations \
584
585
        nas_sim_tools conf2uedata \
        conf2uedata $dbin/conf2uedata
586
587

    # generate USIM data
588
589
    if [ -f $dbin/conf2uedata ]; then
      install_nas_tools $conf_nvram_path $gen_nvram_path
590
      echo_info "Copying UE specific part to $DIR/$lte_build_dir/build"
591
592
593
      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
594
595
596
    else
      echo_warning "not generated UE NAS files: binaries not found"
    fi
597
  fi
thomasl's avatar
thomasl committed
598

599
  if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
600
601
602
603
604
    cd $OPENAIR_DIR/cmake_targets/lte-simulators
    [ "$CLEAN" = "1" ] && rm -rf build
    mkdir -p build
    cd build
    rm -f *sim
605
    eval $CMAKE_CMD
606
  fi
607

608
609
610
  if [ "$SIMUS_PHY" = "1" ] ; then
    # lte unitary simulators compilation
    echo_info "Compiling unitary tests simulators"
611
    simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
612
613
614
615
616
617
    for f in $simlist ; do
      compilations \
      lte-simulators $f \
	  $f $dbin/$f.$REL
    done
  fi
thomasl's avatar
thomasl committed
618

gauthier's avatar
gauthier committed
619
  # Core simulators
620
621
622
623
624
625
626
627
628
629
630
  #############
  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
631

632
633
  # EXMIMO drivers & firmware loader
  ###############
634
  if [ "$HW" = "EXMIMO" ] ; then
gauthier's avatar
gauthier committed
635
    
636
637
    echo_info "Compiling Express MIMO 2 board drivers"
    compilations \
638
        $lte_build_dir openair_rf \
thomasl's avatar
thomasl committed
639
        CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko
640
    compilations \
641
	  $lte_build_dir updatefw \
gauthier's avatar
gauthier committed
642
	  updatefw $dbin/updatefw
643
    echo_info "Compiling oarf tools. The logfile for compilation is here: $dlog/oarf.txt"
644
645
646
647
648
649
650
    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
651
    cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
652
  fi
thomasl's avatar
thomasl committed
653

654
655
  # oaisim compilation
  ###############
656
  if [ "$oaisim" = "1" ] ; then
657
    dconf=$OPENAIR_DIR/targets/bin
658
659
660
661
662
663
664
      if [ "$NOS1" =  "1" ] ; then
	  oaisim_build_dir=oaisim_noS1_build_oai
	  oaisim_exec=oaisim_nos1
      else
	  oaisim_build_dir=oaisim_build_oai
	  oaisim_exec=oaisim
      fi
665
    
666
667
668
    echo_info "Compiling $oaisim_exec ($oaisim_build_dir)"
    cmake_file=$DIR/$oaisim_build_dir/CMakeLists.txt
    cp $DIR/$oaisim_build_dir/CMakeLists.template $cmake_file
669
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
670
    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
671
    echo "set ( XFORMS $XFORMS )" >>  $cmake_file
672
673
674
    if [ "$FLEXRAN_AGENT" = "1" ] ; then
	echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )"      >>  $cmake_file
    fi
675
676
677
    echo "set ( PRINT_STATS $PRINT_STATS )" >>  $cmake_file
    echo "set ( RRC_ASN1_VERSION \"${REL}\")" >>  $cmake_file
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >>  $cmake_file
678
    echo "set ( T_TRACER $T_TRACER )"          >>  $cmake_file
679
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
680
681
682
    [ "$CLEAN" = "1" ] && rm -rf $DIR/$oaisim_build_dir/build
    mkdir -p $DIR/$oaisim_build_dir/build
    cd $DIR/$oaisim_build_dir/build
683
    eval $CMAKE_CMD
684
    compilations \
685
686
687
688
689
690
691
692
693
	  $oaisim_build_dir $oaisim_exec \
	  $oaisim_exec $dbin/$oaisim_exec.$REL

    if [ "$NOS1" != "1" ] ; then

	[ "$CLEAN" = "1" ] && rm -rf $DIR/at_commands/build
    	echo_info "Compiling at_nas_ue"
	mkdir -p $DIR/at_commands/build
	cd $DIR/at_commands/build
694
	eval $CMAKE_CMD
695
696
697
698
699
700
701
702
703
704
705
706
707
	compilations \
	    at_commands at_nas_ue \
	    at_nas_ue $dbin/at_nas_ue

	# ue_ip driver compilation
	echo_info "Compiling UE specific part (ue_ip driver and usim tools)"
	compilations \
	    oaisim_build_oai ue_ip \
	    CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko

	[ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build
	mkdir -p $DIR/nas_sim_tools/build
	cd $DIR/nas_sim_tools/build
708
	eval $CMAKE_CMD
709
710
711
712
713
714
715
	compilations \
	    nas_sim_tools usim \
	    usim $dbin/usim
	compilations \
	    nas_sim_tools nvram \
	    nvram $dbin/nvram
	compilations \
716
717
        nas_sim_tools conf2uedata \
        conf2uedata $dbin/conf2uedata
718
719

	# generate USIM data
720
721
	if [ -f $dbin/conf2uedata ]; then
	    install_nas_tools $conf_nvram_path $gen_nvram_path
722
723
724
	else
	    echo_warning "not generated UE NAS files: binaries not found"
	fi
725
726
    else

727
728
729
	compilations \
	    $oaisim_build_dir rb_tool \
	    rb_tool $dbin/rb_tool
gauthier's avatar
gauthier committed
730

731
732
733
734
	# nasmesh driver compilation
	compilations \
	    $oaisim_build_dir nasmesh \
	    CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
735

736
	#oai_nw_drv
Cedric Roux's avatar
Cedric Roux committed
737
738
739
	#compilations \
	#    $oaisim_build_dir oai_nw_drv \
	#    CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko
740
    fi
741

742
743
744
745
    if [ "$TP" == "ETHERNET" ] ; then
	compilations \
	    $oaisim_build_dir oai_eth_transpro \
	    liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
746
747
	ln -sf liboai_eth_transpro.so liboai_transpro.so
	ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
748
749
750
	echo_info "liboai_transpro.so is linked with ETHERNET library"	 
    fi
      
751
752
    cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt
    cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file
753
754
    echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
    echo "set ( XFORMS $XFORMS )" >>  $cmake_file
755
756
757
    if [ "$FLEXRAN_AGENT" = "1" ] ; then
	echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )"      >>  $cmake_file
    fi
758
759
    echo "set ( RRC_ASN1_VERSION \"${REL}\")" >>  $cmake_file
    echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >>  $cmake_file
760
    echo "set ( T_TRACER $T_TRACER )"        >>  $cmake_file
761
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
762
763
764
    #[ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_mme_build_oai/build
    #mkdir -p $DIR/oaisim_mme_build_oai/build
    #cd $DIR/oaisim_mme_build_oai/build
765
    #eval $CMAKE_CMD
766
767
768
    #compilations \
	#  oaisim_mme_build_oai oaisim_mme \
	#  oaisim_mme $dbin/oaisim_mme.$REL
769
770
  fi

771
  # RRH compilation
772
  #####################
773
774
  if [ "$RRH" = "1" ] ; then

775
776
777
778
779
     rrh_exec=rrh_gw
     rrh_build_dir=rrh_gw
     
     echo_info "Compiling $rrh_exec ..."
    
780
781
     [ "$CLEAN" = "1" ] && rm -rf $DIR/rrh_gw/build 
     mkdir -p $DIR/$rrh_build_dir/build
782
783
     cmake_file=$DIR/$rrh_build_dir/CMakeLists.txt
     echo "cmake_minimum_required(VERSION 2.8)"   >   $cmake_file
784
785
786
787
788
789
790
791
     echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
     echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"     >>  $cmake_file
     echo "set ( ENABLE_ITTI False )"     		 >>  $cmake_file
     echo "set ( RF_BOARD \"${HW}\")"               >>  $cmake_file
     echo "set ( TRANSP_PRO \"${TP}\")"             >>  $cmake_file
     echo 'set ( PACKAGE_NAME "\"rrh_gw\"")'        >>  $cmake_file
     echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )"    >>$cmake_file
     echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )"    >>$cmake_file
792
     echo "set ( T_TRACER $T_TRACER )"            >>  $cmake_file
793
     echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file    
794
     cd $DIR/$rrh_build_dir/build
795
     eval $CMAKE_CMD
796
797
798
     compilations \
	 rrh_gw rrh_gw \
	 rrh_gw $dbin/rrh_gw
799

800
  fi
801
802
803
  
  # build RF device and transport protocol libraries
  #####################################
Wilson's avatar
Wilson committed
804
  if [ "$eNB" = "1" -o "$UE" = "1" -o  "$RRH" = "1" ] ; then
805

Wilson's avatar
Wilson committed
806
      if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
807
808
809
810
811
	  build_dir=$lte_build_dir	  
      else
	  build_dir=$rrh_build_dir	 
      fi

812
      # build RF device libraries
813
      if [ "$HW" != "None" ] ; then
814
	  rm -f liboai_device.so
815
	  rm -f $dbin/liboai_device.so
816

817
	  # link liboai_device.so with the selected RF device library
818
	  if [ "$HW" == "EXMIMO" ] ; then
819
820
821
	      compilations \
		  $build_dir oai_exmimodevif \
		  liboai_exmimodevif.so $dbin/liboai_exmimodevif.so.$REL
822
823
824

	      ln -sf liboai_exmimodevif.so liboai_device.so
	      ln -sf $dbin/liboai_exmimodevif.so.$REL $dbin/liboai_device.so
825
826
	      echo_info "liboai_device.so is linked to EXMIMO device library"       
	  elif [ "$HW" == "OAI_USRP" ] ; then
827
828
829
830
831
832
	      if [ -d "/usr/include/uhd" ] ; then
		  compilations \
		      $build_dir oai_usrpdevif \
		      liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
	      fi

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

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

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

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

877

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

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

main "$@"