build_oai 11.9 KB
Newer Older
thomasl's avatar
thomasl committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash
################################################################################
#   OpenAirInterface
#   Copyright(c) 1999 - 2014 Eurecom
#
#    OpenAirInterface is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) anylater version.
#
#
#    OpenAirInterface is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with OpenAirInterface.The full GNU General Public License is
#    included in this distribution in the file called "COPYING". If not,
#    see <http://www.gnu.org/licenses/>.
#
#  Contact Information
#  OpenAirInterface Admin: openair_admin@eurecom.fr
#  OpenAirInterface Tech : openair_tech@eurecom.fr
#  OpenAirInterface Dev  : openair4g-devel@eurecom.fr
#
#  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
################################################################################
# file build_oai.bash
# brief OAI automated build tool that can be used to install, compile, run OAI.
# author  Navid Nikaein, Lionel GAUTHIER, Laurent Thomas


################################
# include helper functions
################################
thomasl's avatar
thomasl committed
38
ORIGIN_PATH=$PWD
thomasl's avatar
thomasl committed
39
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
thomasl's avatar
thomasl committed
40
source $THIS_SCRIPT_PATH/tools/build_helper.bash
thomasl's avatar
thomasl committed
41
42
43
44
45
46
47

XFORMS="False"
VCD_TIMING="False"
REL="Rel10"
HW="EXMIMO"

until [ -z "$1" ]
48
49
50
51
52
53
do
    case "$1" in
	-c | --clean)
	    CLEAN=1
	    clean_all_files
	    echo_info "Erased all previously producted files"
thomasl's avatar
thomasl committed
54
            shift;;
55
56
57
	--clean-kernel)
	    clean_kernel
	    echo_info "Erased iptables config and removed modules from kernel"
thomasl's avatar
thomasl committed
58
            shift;;
59
	-I | --install-external-packages)
60
            INSTALL_EXTERNAL=1
61
            echo_info "Will install external packages"
thomasl's avatar
thomasl committed
62
            shift;;
thomasl's avatar
thomasl committed
63
64
65
66
	--install-optional-packages)
            INSTALL_OPTIONAL=1
            echo_info "Will install optional packages"
            shift;;
67
	-g | --run-with-gdb)
thomasl's avatar
thomasl committed
68
            GDB=1
69
            echo_info "Will Compile with gdb symbols"
thomasl's avatar
thomasl committed
70
71
            shift;;
	--eNB)
72
73
74
	    eNB=1
	    echo_info "Will compile eNB"
	    shift;;
thomasl's avatar
thomasl committed
75
	--UE)
76
77
78
	    UE=1
	    echo_info "Will compile UE"
	    shift;;
thomasl's avatar
thomasl committed
79
	--EPC)
80
81
82
	    EPC=1
	    echo_info "Will compile EPC"
	    shift;;
thomasl's avatar
thomasl committed
83
84
       -r | --3gpp-release)
            REL=$2 
85
            echo_info "setting release to: $REL"
thomasl's avatar
thomasl committed
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
            shift 2;;
       -w | --hardware)
            HW="$2" #"${i#*=}"
            echo_info "setting hardware to: $HW"
            shift 2;;
	--oaisim)
	    oaisim=1
	    echo_info "Will compile oaisim and drivers nasmesh, ..."
	    shift;;
	--phy_simulators)
            SIMUS_PHY=1
	    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
103
104
       -s | --check)
            OAI_TEST=1
105
            echo_info "Will run auto-tests"
thomasl's avatar
thomasl committed
106
            shift;;
thomasl's avatar
thomasl committed
107
       -V | --vcd)
108
            echo_info "setting gtk-wave output"
thomasl's avatar
thomasl committed
109
110
            VCD_TIMING=1
            EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
thomasl's avatar
thomasl committed
111
            shift;;
thomasl's avatar
thomasl committed
112
113
114
       -x | --xforms)
            XFORMS=1
            EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
115
            echo_info "Will generate the software oscilloscope features"
thomasl's avatar
thomasl committed
116
117
118
119
120
121
122
123
124
            shift;;
	--install-system-files)
	    INSTALL_SYSTEM_FILES=1
	    echo_info "Will copy OpenAirInterface files in Linux directories"
	    shift;;
        -h | --help)
            print_help
            exit 1;;
	*)   
125
126
	    print_help
            echo_fatal "Unknown option $1"
thomasl's avatar
thomasl committed
127
            break;;
thomasl's avatar
thomasl committed
128
129
130
131
132
133
134
135
136
137
138
139
   esac
done

############################################
# setting and printing OAI envs, we should check here
############################################
    
echo_info "2. Setting the OAI PATHS ..."

set_openair_env 
cecho "OPENAIR_HOME    = $OPENAIR_HOME" $green

thomasl's avatar
thomasl committed
140
dbin=$OPENAIR_HOME/targets/bin
thomasl's avatar
thomasl committed
141
142
143
dlog=$OPENAIR_HOME/cmake_targets/log
mkdir -p $dbin $dlog

144
145
if [ "$INSTALL_EXTERNAL" = "1" ] ; then
   echo_info "Installing packages"
thomasl's avatar
thomasl committed
146
   check_install_oai_software
147
   echo_info "Making X.509 certificates"
thomasl's avatar
thomasl committed
148
   make_certs eur
thomasl's avatar
thomasl committed
149
   if [ "$HW" == "USRP" ] ; then
150
     echo_info "installing packages for USRP support"
thomasl's avatar
thomasl committed
151
152
153
154
     check_install_usrp_uhd_driver
   fi
fi

thomasl's avatar
thomasl committed
155
156
157
158
159
if [ "$INSTALL_OPTIONAL" = "1" ] ; then
   echo_info "Installing optional packages"
   check_install_additional_tools
fi

thomasl's avatar
thomasl committed
160
161
echo_info "3. building the compilation directives ..."

162
163
164
165
166
DIR=$OPENAIR_HOME/cmake_targets


if [ "$eNB" = "1" -o "UE" = "1" ] ; then
    # LTE softmodem compilation
167
168
169
170
171
172
173
174
175
176
177
    mkdir -p $DIR/lte_build_oai/build
    cmake_file=$DIR/lte_build_oai/CMakeLists.txt
    echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
    echo "set(XFORMS $XFORMS )" >>  $cmake_file
    echo "set(RRC_ASN1_VERSION \"${REL}\")" >>  $cmake_file
    echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >>  $cmake_file
    echo "set(RF_BOARD \"${HW}\")" >>  $cmake_file
    echo 'set(PACKAGE_NAME "\"lte-softmodem\"")' >>  $cmake_file
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
    cd  $DIR/lte_build_oai/build
    cmake ..
178
179
180
    echo_info "Compiling LTE softmodem"
    compilations \
	lte_build_oai lte-softmodem \
thomasl's avatar
thomasl committed
181
	lte-softmodem lte-softmodem.$REL 
182

183
fi
thomasl's avatar
thomasl committed
184

185
186
187
188
189
if [ "$UE" = 1 ] ; then
    # ue_ip driver compilation
    echo_info "Compiling UE specific part"
    compilations \
	lte_build_oai ue_ip \
thomasl's avatar
thomasl committed
190
191
	CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
    compilations \
thomasl's avatar
thomasl committed
192
193
	lte_build_oai usim \
	usim $dbin/usim
thomasl's avatar
thomasl committed
194
    compilations \
thomasl's avatar
thomasl committed
195
196
	lte_build_oai nvram \
	nvram $dbin/nvram
197
fi
thomasl's avatar
thomasl committed
198

199
200
201
202
203
204
205
206
207
if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
    cd $OPENAIR_DIR/cmake_targets/lte-simulators
    [ "$CLEAN" = "1" ] && rm -rf build
    mkdir -p build
    cd build
    rm -f *sim
    cmake ..
fi

thomasl's avatar
thomasl committed
208
if [ "$SIMUS_PHY" = "1" ] ; then
thomasl's avatar
thomasl committed
209
   # lte unitary simulators compilation
210
   echo_info "Compiling unitary tests simulators"
thomasl's avatar
thomasl committed
211
212
   simlist="dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
   for f in $simlist ; do
thomasl's avatar
thomasl committed
213
214
215
216
217
218
219
       compilations \
	   lte-simulators $f \
	   $f $dbin/$f.$REL
   done
fi

# Core simulators 
thomasl's avatar
thomasl committed
220
#############
thomasl's avatar
thomasl committed
221
222
223
if [ "$SIMUS_CORE" = "1" ] ; then
   # lte unitary simulators compilation
   echo_info "Compiling unitary tests simulators"
thomasl's avatar
thomasl committed
224
   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"
thomasl's avatar
thomasl committed
225
226
227
228
   for f in $simlist ; do
       compilations \
	   lte-simulators test_$f \
	   test_$f $dbin/test_$f.$REL
thomasl's avatar
thomasl committed
229
   done
230
fi
thomasl's avatar
thomasl committed
231

232
# EXMIMO drivers & firmware loader
thomasl's avatar
thomasl committed
233
###############
thomasl's avatar
thomasl committed
234
if [ "$HW" = "EXMIMO" -a "$UE$eNB" != "" ] ; then
235
236
    echo_info "Compiling Express MIMO 2 board drivers"
    compilations \
thomasl's avatar
thomasl committed
237
        lte_build_oai openair_rf \
thomasl's avatar
thomasl committed
238
        CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko
239
240
    compilations \
	lte_build_oai updatefw \
thomasl's avatar
thomasl committed
241
	updatefw $dbin/updatefw 
242
fi
thomasl's avatar
thomasl committed
243

244
if [ "$oaisim" = "1" ] ; then
thomasl's avatar
thomasl committed
245
    echo_info "Compiling oaisim"
246
247
248
249
250
251
252
253
254
    cmake_file=$DIR/oaisim_build_oai/CMakeLists.txt
    cp $DIR/oaisim_build_oai/CMakeLists.template $cmake_file
    echo "set(XFORMS $XFORMS )" >>  $cmake_file
    echo "set(RRC_ASN1_VERSION \"${REL}\")" >>  $cmake_file
    echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >>  $cmake_file
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
    mkdir -p $DIR/oaisim_build_oai/build
    cd $DIR/oaisim_build_oai/build
    cmake ..
255
256
    compilations \
	oaisim_build_oai oaisim \
thomasl's avatar
thomasl committed
257
	oaisim $dbin/oaisim.$REL
258
259

    # nasmesh driver compilation
thomasl's avatar
thomasl committed
260
    compilations \
261
262
	oaisim_build_oai nasmesh \
	CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
263
264
265
    #oai_nw_drv
    compilations \
	oaisim_build_oai oai_nw_drv \
thomasl's avatar
thomasl committed
266
	CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko
267
268
269
270
271
272
273
274
275
276
277
278
    cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt
    cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file
    echo "set(XFORMS $XFORMS )" >>  $cmake_file
    echo "set(RRC_ASN1_VERSION \"${REL}\")" >>  $cmake_file
    echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >>  $cmake_file
    echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
    mkdir -p $DIR/oaisim_mme_build_oai/build
    cd $DIR/oaisim_mme_build_oai/build
    cmake ..
    compilations \
	oaisim_mme_build_oai oaisim_mme \
	oaisim_mme $dbin/oaisim_mme.$REL
thomasl's avatar
thomasl committed
279
280
fi

thomasl's avatar
thomasl committed
281
282
# EPC compilation
##################
283
if [ "$EPC" = "1" ] ; then
284
285
286
287
288
289
290
291
292
293
294
  echo_info "Compiling EPC"
  cmake_file=$DIR/epc_build_oai/CMakeLists.txt
  cp $DIR/epc_build_oai/CMakeLists.template $cmake_file
  echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >>  $cmake_file
  echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
  mkdir -p $DIR/epc_build_oai/build
  cd $DIR/epc_build_oai/build
  cmake ..
  compilations \
  epc_build_oai mme_gw \
  mme_gw $dbin/mme_gw.$REL
thomasl's avatar
thomasl committed
295
296
# Only integrated mme+sgw+pgw is operational today
#    compilations \
297
298
299
300
301
302
303
304
305
306
307
308
309
310
#  epc_build_oai oai_sgw \
#  oai_sgw $dbin/oai_sgw.$REL
  compilations \
    epc_build_oai xt_GTPUAH_lib \
    libxt_GTPUAH_lib.so $dbin
  compilations \
    epc_build_oai xt_GTPURH_lib \
    libxt_GTPURH_lib.so $dbin
  compilations \
    epc_build_oai xt_GTPURH \
    CMakeFiles/xt_GTPURH/xt_GTPURH.ko $dbin
  compilations \
    epc_build_oai xt_GTPUAH \
    CMakeFiles/xt_GTPUAH/xt_GTPUAH.ko $dbin
thomasl's avatar
thomasl committed
311

312
313
314
315
316
317
318
319
320
321
322
  if [ "$INSTALL_SYSTEM_FILES" = "1" ] ;then
    # Example HSS and EPC run on the same host
    $OPENAIR_HOME/cmake_targets/tools/build_hss --clean --debug --install-hss-files --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn`
    # example HHS and EPC run on separate hosts (can use SCTP)
    # $OPENAIR_HOME/cmake_targets/tools/build_hss --clean --debug --install-hss-files
  else
    # Example HSS and EPC run on the same host
    $OPENAIR_HOME/cmake_targets/tools/build_hss --debug --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn`
    # example HHS and EPC run on separate hosts (can use SCTP)
    # $OPENAIR_HOME/cmake_targets/tools/build_hss --debug 
  fi
thomasl's avatar
thomasl committed
323
324
325
fi

if [ "$INSTALL_SYSTEM_FILES" = "1" ] ;then
thomasl's avatar
thomasl committed
326

327
    echo_info "Copying iptables libraries into system directory: /lib/xtables"
328
329
330
331
332
333
334
    if [ -f  $dbin/libxt_GTPURH_lib.so ] ; then
	$SUDO rm -f /lib/xtables/libxt_GTPURH.so /lib/xtables/libxt_GTPUAH.s
	$SUDO ln -s $dbin/libxt_GTPURH_lib.so /lib/xtables/libxt_GTPURH.so
	$SUDO ln -s $dbin/libxt_GTPUAH_lib.so /lib/xtables/libxt_GTPUAH.so
    else
	echo_warning "not installed GTP-U iptables: binaries not found"
    fi
thomasl's avatar
thomasl committed
335

thomasl's avatar
thomasl committed
336
    dconf=$OPENAIR_TARGETS/bin
thomasl's avatar
thomasl committed
337
    mkdir -p $dconf
338
#LG???    cp $ORIGIN_PATH/$CONFIG_FILE $dconf || echo_fatal "config file $ORIGIN_PATH/$CONFIG_FILE not found"
thomasl's avatar
thomasl committed
339
340

    # generate USIM data
341
342
343
344
345
    if [ -f $dbin/nvram ]; then
	install_nas_tools $dbin $dconf
    else
	echo_warning "not generated UE NAS files: binaries not found"
    fi	
thomasl's avatar
thomasl committed
346

thomasl's avatar
thomasl committed
347
    # Do EPC
348
349
350
351
352
353
    if [ -f $DIR/epc_build_oai/build/epc_s6a.conf ] ; then
	cp $DIR/epc_build_oai/build/epc.*.conf $dconf
	$SUDO cp  $DIR/epc_build_oai/build/epc_s6a.conf  /usr/local/etc/freeDiameter
    else
	echo_warning "not installed EPC config files: not found"
    fi
thomasl's avatar
thomasl committed
354

thomasl's avatar
thomasl committed
355
356
    # Do HSS 
    # bash doesn't like space char around = char
357
358
    #cp $DIR/hss_build/hss.conf $dbin
    #$SUDO cp  $DIR/hss_build/build/hss_fd.conf $DIR/hss_build/acl.conf /usr/local/etc/freeDiameter
thomasl's avatar
thomasl committed
359
    
360
361
362
363
364
365
366
367
368
    if [ -f $dbin/hss.conf ] ; then
	sed -e 's/ *= */=/' $dbin/hss.conf > $dconf/hss.conf.nospace
	source $dconf/hss.conf.nospace
	rm -f $dconf/hss.conf.nospace
	create_hss_database root linux "$MYSQL_user" "$MYSQL_pass" "$MYSQL_db"
    else
	echo_warning "not created HSS database: config not found"
    fi
fi
369

thomasl's avatar
thomasl committed
370
371
372
373
# Auto-tests 
#####################
if [ "$OAI_TEST" = "1" ]; then 
    echo_info "10. Running OAI pre commit tests (pre-ci) ..."
374
    $OPENAIR_DIR/cmake_targets/autotests/run_compilation_autotests.bash
thomasl's avatar
thomasl committed
375
    $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash
thomasl's avatar
thomasl committed
376
377
378
else 
    echo_info "10. Bypassing the Tests ..."
fi