There are a lot of case where the build scripts fails. Despite this, the build script happily continue to the end and tells "Successfully built xxxx". This fix ensure the build stops early with the first error message on the bottom of the log.
805 lines
27 KiB
Bash
Executable File
805 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
|
|
|
|
set -e
|
|
|
|
################################
|
|
# 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
|
|
T_TRACER="False"
|
|
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
|
|
--T-tracer
|
|
Enables the T tracer.
|
|
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;;
|
|
--T-tracer)
|
|
T_TRACER="True"
|
|
echo_info "Enabling the T tracer"
|
|
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 "set ( T_TRACER $T_TRACER )" >> $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 "set ( T_TRACER $T_TRACER )" >> $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 "set ( T_TRACER $T_TRACER )" >> $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 "set ( T_TRACER $T_TRACER )" >> $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 "$@"
|