793 lines
27 KiB
Bash
Executable File
793 lines
27 KiB
Bash
Executable File
#!/bin/bash
|
|
################################################################################
|
|
#
|
|
# Copyright (c) 2015, EURECOM (www.eurecom.fr)
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
#
|
|
# 1. Redistributions of source code must retain the above copyright notice, this
|
|
# list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
# this list of conditions and the following disclaimer in the documentation
|
|
# and/or other materials provided with the distribution.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
# The views and conclusions contained in the software and documentation are those
|
|
# of the authors and should not be interpreted as representing official policies,
|
|
# either expressed or implied, of the FreeBSD Project.
|
|
#
|
|
################################################################################
|
|
# file build_oai
|
|
# brief OAI automated build tool that can be used to install, compile, run OAI.
|
|
# author Navid Nikaein, Lionel GAUTHIER, Laurent Thomas
|
|
|
|
|
|
################################
|
|
# include helper functions
|
|
################################
|
|
ORIGIN_PATH=$PWD
|
|
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
|
|
source $THIS_SCRIPT_PATH/tools/build_helper
|
|
|
|
MSC_GEN="False"
|
|
XFORMS="True"
|
|
PRINT_STATS="False"
|
|
VCD_TIMING="False"
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
FORCE_DEADLINE_SCHEDULER_FLAG_USER=""
|
|
CPU_AFFINITY_FLAG_USER="True" #Only valid when lowlatecy flag is set to False
|
|
REL="Rel10"
|
|
HW="None"
|
|
TP="None"
|
|
NOS1=0
|
|
EPC=0
|
|
VERBOSE_COMPILE=0
|
|
CFLAGS_PROCESSOR_USER=""
|
|
RUN_GROUP=0
|
|
TEST_CASE_GROUP=""
|
|
BUILD_DOXYGEN=0
|
|
trap handle_ctrl_c INT
|
|
|
|
function print_help() {
|
|
echo_info '
|
|
This program installs OpenAirInterface Software
|
|
You should have ubuntu 14.xx, updated, and the Linux kernel >= 3.14
|
|
Options
|
|
-h
|
|
This help
|
|
-c | --clean
|
|
Erase all files to make a rebuild from start"
|
|
-C | --clean-all
|
|
Erase all files made by previous compilations, installations"
|
|
--clean-kernel
|
|
Erase previously installed features in kernel: iptables, drivers, ...
|
|
-I | --install-external-packages
|
|
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
|
|
Add debugging symbols to compilation directives
|
|
-h | --help
|
|
Print this help
|
|
--eNB
|
|
Makes the LTE softmodem
|
|
--UE
|
|
Makes the UE specific parts (ue_ip, usim, nvram)
|
|
--RRH
|
|
Makes the RRH
|
|
-r | --3gpp-release
|
|
default is Rel10,
|
|
Rel8 limits the implementation to 3GPP Release 8 version
|
|
-w | --hardware
|
|
EXMIMO, USRP, BLADERF, ETHERNET, LMSSDR, None (Default)
|
|
Adds this RF board support (in external packages installation and in compilation)
|
|
-t | --transport protocol
|
|
ETHERNET , None
|
|
Adds this trasport protocol support in compilation
|
|
--oaisim
|
|
Makes the oaisim simulator. Hardware will be defaulted to "None".
|
|
--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
|
|
--run-group
|
|
runs only specified test cases specified here. This flag is only valid with -s
|
|
-V | --vcd
|
|
Adds a debgging facility to the binary files: GUI with major internal synchronization events
|
|
-x | --xforms
|
|
Adds a software oscilloscope feature to the produced binaries. If oaisim, then enable PRINT_STATS.
|
|
--install-system-files
|
|
Install OpenArInterface required files in Linux system
|
|
(will ask root password)
|
|
--noS1
|
|
Compiles oaisim or lte-softmodem without S1 interface, using direct link to IP instead
|
|
--verbose-compile
|
|
Shows detailed compilation instructions in makefile
|
|
--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
|
|
--build-doxygen
|
|
Builds doxygen based documentation.
|
|
--disable-deadline
|
|
Disables deadline scheduler of Linux kernel (>=3.14.x).
|
|
--enable-deadline
|
|
Enable deadline scheduler of Linux kernel (>=3.14.x).
|
|
--disable-cpu-affinity
|
|
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
|
|
Usage (first build):
|
|
oaisim (eNB + UE): ./build_oai -I -g --oaisim -x --install-system-files
|
|
Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB -x --install-system-files
|
|
NI/ETTUS B201 + COTS UE : ./build_oai -I -g --eNB -x --install-system-files -w USRP
|
|
Usage (Regular):
|
|
oaisim : ./build_oai --oaisim -x
|
|
Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x
|
|
NI/ETTUS B201 + OAI ENB : ./build_oai --eNB -x -w USRP'
|
|
}
|
|
|
|
|
|
function main() {
|
|
until [ -z "$1" ]
|
|
do
|
|
case "$1" in
|
|
-c | --clean)
|
|
CLEAN=1
|
|
shift;;
|
|
-C | --clean-all)
|
|
CLEAN_ALL=1
|
|
shift;;
|
|
--clean-kernel)
|
|
clean_kernel
|
|
echo_info "Erased iptables config and removed modules from kernel"
|
|
shift;;
|
|
-I | --install-external-packages)
|
|
INSTALL_EXTERNAL=1
|
|
echo_info "Will install external packages"
|
|
shift;;
|
|
--install-optional-packages)
|
|
INSTALL_OPTIONAL=1
|
|
echo_info "Will install optional packages"
|
|
shift;;
|
|
-g | --run-with-gdb)
|
|
GDB=1
|
|
echo_info "Will Compile with gdb symbols"
|
|
shift;;
|
|
--eNB)
|
|
eNB=1
|
|
echo_info "Will compile eNB"
|
|
shift;;
|
|
--UE)
|
|
UE=1
|
|
echo_info "Will compile UE"
|
|
shift;;
|
|
--RRH)
|
|
RRH=1
|
|
echo_info "Will compile RRH"
|
|
shift;;
|
|
-r | --3gpp-release)
|
|
REL=$2
|
|
echo_info "Setting release to: $REL"
|
|
shift 2;;
|
|
-w | --hardware)
|
|
HW="$2" #"${i#*=}"
|
|
# 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" ] ; then
|
|
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
|
|
if [ "$HW" == "LMSSDR" ] ; then
|
|
HW="OAI_LMSSDR"
|
|
fi
|
|
echo_info "Setting hardware to: $HW"
|
|
fi
|
|
shift 2;;
|
|
-t | --transport_protocol)
|
|
TP="$2" #"${i#*=}"
|
|
if [ "$TP" != "ETHERNET" -a "$TP" != "None" ] ; then
|
|
echo_fatal "Unknown TP type $TP will exit..."
|
|
else
|
|
echo_info "Setting transport protocol to: $TP"
|
|
fi
|
|
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;;
|
|
-s | --check)
|
|
OAI_TEST=1
|
|
echo_info "Will run auto-tests"
|
|
shift;;
|
|
--run-group)
|
|
RUN_GROUP=1
|
|
TEST_CASE_GROUP=$2
|
|
echo_info "executing test cases only in group: $TEST_CASE_GROUP"
|
|
shift 2;;
|
|
-V | --vcd)
|
|
echo_info "Setting gtk-wave output"
|
|
VCD_TIMING=1
|
|
EXE_ARGUMENTS="$EXE_ARGUMENTS -V"
|
|
shift;;
|
|
-x | --xforms)
|
|
XFORMS="True"
|
|
EXE_ARGUMENTS="$EXE_ARGUMENTS -d"
|
|
echo_info "Will generate the software oscilloscope features"
|
|
shift;;
|
|
--install-system-files)
|
|
INSTALL_SYSTEM_FILES=1
|
|
echo_info "Will copy OpenAirInterface files in Linux directories"
|
|
shift;;
|
|
--noS1)
|
|
NOS1=1
|
|
echo_info "Will compile without S1 interface"
|
|
shift;;
|
|
--verbose-compile)
|
|
VERBOSE_COMPILE=1
|
|
echo_info "Will compile with verbose instructions"
|
|
shift;;
|
|
--cflags_processor)
|
|
CFLAGS_PROCESSOR_USER=$2
|
|
echo_info "Setting CPU FLAGS from USER to: $CFLAGS_PROCESSOR_USER"
|
|
shift 2;;
|
|
--build-doxygen)
|
|
BUILD_DOXYGEN=1
|
|
echo_info "Will build doxygen support"
|
|
shift;;
|
|
--disable-deadline)
|
|
FORCE_DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
echo_info "Disabling the usage of deadline scheduler"
|
|
shift 1;;
|
|
--enable-deadline)
|
|
FORCE_DEADLINE_SCHEDULER_FLAG_USER="True"
|
|
echo_info "Enabling the usage of deadline scheduler"
|
|
shift 1;;
|
|
--disable-cpu-affinity)
|
|
CPU_AFFINITY_FLAG_USER="False"
|
|
echo_info "Disabling CPU Affinity (only valid when not using deadline scheduler)"
|
|
shift 1;;
|
|
-h | --help)
|
|
print_help
|
|
exit 1;;
|
|
*)
|
|
print_help
|
|
echo_fatal "Unknown option $1"
|
|
break;;
|
|
esac
|
|
done
|
|
|
|
#########################################################
|
|
# check validity of HW and TP parameters for RRH and eNB
|
|
#########################################################
|
|
# to be discussed
|
|
|
|
if [ "$eNB" = "1" ] ; then
|
|
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!"
|
|
fi
|
|
if [ "$HW" != "None" -a "$TP" != "None" ] ; then
|
|
echo_fatal "Currently eNB can not support simultaniously local and remote radio heads!!"
|
|
fi
|
|
if [ "$HW" = "None" ] ; then
|
|
echo_info "No radio head has been selected (HW set to $HW)"
|
|
fi
|
|
if [ "$TP" = "None" ] ; then
|
|
echo_info "No transport protocol has been selected (TP set to $TP)"
|
|
fi
|
|
fi
|
|
|
|
if [ "$RRH" = "1" ] ; then
|
|
if [ "$TP" = "None" ] ; then
|
|
echo_fatal "A transport protocol (e.g. -t ETHERNET) must be defined!"
|
|
fi
|
|
if [ "$HW" = "None" ] ; then
|
|
echo_info "No radio head has been selected (HW set to $HW)"
|
|
fi
|
|
fi
|
|
|
|
echo_info "RF HW set to $HW"
|
|
#Now we set flags to enable deadline scheduler settings
|
|
#By default: USRP: disable,
|
|
#By default: BLADERF: enable,
|
|
#By default: EXMIMO: enable
|
|
if [ "$FORCE_DEADLINE_SCHEDULER_FLAG_USER" = "" ]; then
|
|
if [ "$HW" = "EXMIMO" ] ; then
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
elif [ "$HW" = "ETHERNET" ] ; then
|
|
DEADLINE_SCHEDULER_FLAG_USER="True"
|
|
elif [ "$HW" = "OAI_USRP" ] ; then
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
elif [ "$HW" = "OAI_BLADERF" ] ; then
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
elif [ "$HW" = "OAI_LMSSDR" ] ; then
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
elif [ "$HW" = "None" ] ; then
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
else
|
|
echo_error "Unknown HW type $HW. Exiting now..."
|
|
exit
|
|
fi
|
|
else
|
|
DEADLINE_SCHEDULER_FLAG_USER=$FORCE_DEADLINE_SCHEDULER_FLAG_USER
|
|
fi
|
|
|
|
#Disable CPU Affinity for deadline scheduler
|
|
if [ "$DEADLINE_SCHEDULER_FLAG_USER" = "True" ] ; then
|
|
CPU_AFFINITY_FLAG_USER="False"
|
|
fi
|
|
|
|
echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
|
|
echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
|
|
|
|
############################################
|
|
# setting and printing OAI envs, we should check here
|
|
############################################
|
|
|
|
echo_info "2. Setting the OAI PATHS ..."
|
|
|
|
set_openair_env
|
|
cecho "OPENAIR_DIR = $OPENAIR_DIR" $green
|
|
|
|
# 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
|
|
|
|
|
|
if [ "$CLEAN_ALL" = "1" ] ; then
|
|
clean_all_files
|
|
echo_info "Erased all previously producted files"
|
|
fi
|
|
|
|
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
|
|
if [ "$HW" == "OAI_USRP" ] ; then
|
|
echo_info "installing packages for USRP support"
|
|
check_install_usrp_uhd_driver
|
|
fi
|
|
if [ "$HW" == "OAI_BLADERF" ] ; then
|
|
echo_info "installing packages for BLADERF support"
|
|
check_install_bladerf_driver
|
|
fi
|
|
fi
|
|
|
|
if [ "$INSTALL_OPTIONAL" = "1" ] ; then
|
|
echo_info "Installing optional packages"
|
|
check_install_additional_tools
|
|
fi
|
|
|
|
if [ "$oaisim" = "1" ] ; then
|
|
#to be discussed
|
|
# there is no RF device and no transport protocol
|
|
HW="None"
|
|
TP="None"
|
|
|
|
if [ "$XFORMS" == "True" ] ; then
|
|
PRINT_STATS="True"
|
|
fi
|
|
fi
|
|
|
|
|
|
echo_info "3. building the compilation directives ..."
|
|
|
|
DIR=$OPENAIR_DIR/cmake_targets
|
|
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
|
|
|
|
# first generate the CMakefile in the right directory
|
|
if [ "$eNB" = "1" -o "$UE" = "1" -o "$HW" = "EXMIMO" ] ; then
|
|
|
|
# LTE softmodem compilation
|
|
[ "$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
|
|
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $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 ( TRANSP_PRO \"${TP}\")" >> $cmake_file
|
|
echo "set(PACKAGE_NAME \"${lte_exec}\")" >> $cmake_file
|
|
echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file
|
|
echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file
|
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
|
cd $DIR/$lte_build_dir/build
|
|
cmake ..
|
|
fi
|
|
|
|
if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
|
|
echo_info "Compiling $lte_exec"
|
|
compilations \
|
|
$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
|
|
fi
|
|
|
|
if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then
|
|
# ue_ip driver compilation
|
|
echo_info "Compiling UE specific part"
|
|
compilations \
|
|
$lte_build_dir ue_ip \
|
|
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
|
|
|
|
# mkdir -p $DIR/at_commands/build
|
|
# cd $DIR/at_commands/build
|
|
# cmake ..
|
|
# compilations \
|
|
# at_commands at_nas_ue \
|
|
# at_nas_ue $dbin/at_nas_ue
|
|
|
|
[ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build
|
|
mkdir -p $DIR/nas_sim_tools/build
|
|
cd $DIR/nas_sim_tools/build
|
|
|
|
cmake ..
|
|
compilations \
|
|
nas_sim_tools usim \
|
|
usim $dbin/usim
|
|
compilations \
|
|
nas_sim_tools nvram \
|
|
nvram $dbin/nvram
|
|
|
|
# generate USIM data
|
|
if [ -f $dbin/nvram ]; then
|
|
install_nas_tools $dbin $dconf
|
|
echo_info "Copying UE specific part to $DIR/$lte_build_dir/build"
|
|
cp -Rvf $dbin/.ue_emm.nvram $DIR/$lte_build_dir/build
|
|
cp -Rvf $dbin/.ue.nvram $DIR/$lte_build_dir/build
|
|
cp -Rvf $dbin/.usim.nvram $DIR/$lte_build_dir/build
|
|
|
|
else
|
|
echo_warning "not generated UE NAS files: binaries not found"
|
|
fi
|
|
fi
|
|
|
|
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
|
|
|
|
if [ "$SIMUS_PHY" = "1" ] ; then
|
|
# lte unitary simulators compilation
|
|
echo_info "Compiling unitary tests simulators"
|
|
simlist="dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
|
|
for f in $simlist ; do
|
|
compilations \
|
|
lte-simulators $f \
|
|
$f $dbin/$f.$REL
|
|
done
|
|
fi
|
|
|
|
# Core simulators
|
|
#############
|
|
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
|
|
|
|
# EXMIMO drivers & firmware loader
|
|
###############
|
|
if [ "$HW" = "EXMIMO" ] ; then
|
|
|
|
echo_info "Compiling Express MIMO 2 board drivers"
|
|
compilations \
|
|
$lte_build_dir openair_rf \
|
|
CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko
|
|
compilations \
|
|
$lte_build_dir updatefw \
|
|
updatefw $dbin/updatefw
|
|
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
|
|
cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
|
|
fi
|
|
|
|
if [ "$oaisim" = "1" ] ; then
|
|
dconf=$OPENAIR_DIR/targets/bin
|
|
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
|
|
|
|
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
|
|
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
|
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
|
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
|
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
|
[ "$CLEAN" = "1" ] && rm -rf $DIR/$oaisim_build_dir/build
|
|
mkdir -p $DIR/$oaisim_build_dir/build
|
|
cd $DIR/$oaisim_build_dir/build
|
|
cmake ..
|
|
compilations \
|
|
$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
|
|
cmake ..
|
|
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
|
|
cmake ..
|
|
compilations \
|
|
nas_sim_tools usim \
|
|
usim $dbin/usim
|
|
compilations \
|
|
nas_sim_tools nvram \
|
|
nvram $dbin/nvram
|
|
|
|
# generate USIM data
|
|
if [ -f $dbin/nvram ]; then
|
|
install_nas_tools $dbin $dconf
|
|
else
|
|
echo_warning "not generated UE NAS files: binaries not found"
|
|
fi
|
|
else
|
|
|
|
compilations \
|
|
$oaisim_build_dir rb_tool \
|
|
rb_tool $dbin/rb_tool
|
|
|
|
# nasmesh driver compilation
|
|
compilations \
|
|
$oaisim_build_dir nasmesh \
|
|
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
|
|
|
#oai_nw_drv
|
|
compilations \
|
|
$oaisim_build_dir oai_nw_drv \
|
|
CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko
|
|
fi
|
|
|
|
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
|
|
#[ "$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
|
|
#cmake ..
|
|
#compilations \
|
|
# oaisim_mme_build_oai oaisim_mme \
|
|
# oaisim_mme $dbin/oaisim_mme.$REL
|
|
fi
|
|
|
|
# RRH compilation
|
|
#####################
|
|
if [ "$RRH" = "1" ] ; then
|
|
|
|
rrh_exec=rrh_gw
|
|
rrh_build_dir=rrh_gw
|
|
|
|
echo_info "Compiling $rrh_exec ..."
|
|
|
|
[ "$CLEAN" = "1" ] && rm -rf $DIR/rrh_gw/build
|
|
mkdir -p $DIR/$rrh_build_dir/build
|
|
cmake_file=$DIR/$rrh_build_dir/CMakeLists.txt
|
|
echo "cmake_minimum_required(VERSION 2.8)" > $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
|
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
|
cd $DIR/$rrh_build_dir/build
|
|
cmake ..
|
|
compilations \
|
|
rrh_gw rrh_gw \
|
|
rrh_gw $dbin/rrh_gw
|
|
|
|
fi
|
|
|
|
# build RF device and transport protocol libraries
|
|
#####################################
|
|
if [ "$eNB" = "1" -o "$RRH" = "1" ] ; then
|
|
|
|
if [ "$eNB" = "1" ] ; then
|
|
build_dir=$lte_build_dir
|
|
else
|
|
build_dir=$rrh_build_dir
|
|
fi
|
|
|
|
# build RF device libraries (currently EXMIMO is not complied with the rest of HW targets)
|
|
if [ "$HW" != "None" ] ; then
|
|
rm -f liboai_device.so
|
|
rm -f $dbin/liboai_device.so
|
|
|
|
|
|
# link liboai_device.so with the selected RF device library
|
|
if [ "$HW" == "EXMIMO" ] ; then
|
|
|
|
#add exmimo compilation
|
|
#TODO EXMIMO library support
|
|
|
|
echo_info "liboai_device.so is linked to EXMIMO device library"
|
|
elif [ "$HW" == "OAI_USRP" ] ; then
|
|
if [ -d "/usr/include/uhd" ] ; then
|
|
compilations \
|
|
$build_dir oai_usrpdevif \
|
|
liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
|
|
fi
|
|
|
|
ln -s liboai_usrpdevif.so liboai_device.so
|
|
ln -s $dbin/liboai_usrpdevif.so.$REL $dbin/liboai_device.so
|
|
echo_info "liboai_device.so is linked to USRP device library"
|
|
elif [ "$HW" == "OAI_BLADERF" ] ; then
|
|
if [ -f "/usr/include/libbladeRF.h" ] ; then
|
|
compilations \
|
|
$build_dir oai_bladerfdevif \
|
|
liboai_bladerfdevif.so $dbin/liboai_bladerfdevif.so.$REL
|
|
fi
|
|
|
|
ln -s liboai_bladerfdevif.so liboai_device.so
|
|
ln -s $dbin/liboai_bladerfdevif.so.$REL $dbin/liboai_device.so
|
|
echo_info "liboai_device.so is linked to BLADERF device library"
|
|
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
|
|
|
|
ln -s liboai_lmssdrdevif.so liboai_device.so
|
|
ln -s $dbin/liboai_lmssdrdevif.so.$REL $dbin/liboai_device.so
|
|
echo_info "liboai_device.so is linked to LMSSDR device library"
|
|
else
|
|
echo_info "liboai_device.so is not linked to any device library"
|
|
fi
|
|
fi
|
|
|
|
# build trasport protocol libraries (currently only ETHERNET is available)
|
|
if [ "$TP" != "None" ] ; then
|
|
rm -f liboai_transpro.so
|
|
rm -f $dbin/liboai_transpro.so
|
|
|
|
if [ "$TP" == "ETHERNET" ] ; then
|
|
compilations \
|
|
$build_dir oai_eth_transpro \
|
|
liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
|
|
ln -s liboai_eth_transpro.so liboai_transpro.so
|
|
ln -s $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
|
|
echo_info "liboai_transpro.so is linked with ETHERNET library"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
# 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
|
|
cmake ..
|
|
make doc
|
|
) >& $doxygen_log
|
|
fi
|
|
|
|
# Auto-tests
|
|
#####################
|
|
if [ "$OAI_TEST" = "1" ]; then
|
|
echo_info "10. Running OAI pre commit tests (pre-ci) ..."
|
|
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 "
|
|
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 "
|
|
echo_info "You can hit CTRL-C any time to terminate the autotests..."
|
|
echo "Current User Name: $USER"
|
|
read -s -p "Enter Password: " mypassword
|
|
echo -e "\n"
|
|
rm -fr $OPENAIR_DIR/cmake_targets/autotests/log
|
|
mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log
|
|
if [ "$RUN_GROUP" -eq "1" ]; then
|
|
$OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
|
|
else
|
|
$OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -p $mypassword >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log &
|
|
fi
|
|
wait
|
|
else
|
|
echo_info "10. Bypassing the Tests ..."
|
|
fi
|
|
}
|
|
|
|
main "$@"
|