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