It has been chosen to not include the full history of commits from David. He included a binary version of wireshark, probably a modified one that understands NFAPI. Wireshark is released under the GPL license, we cannot include it in the repository. We could have done a next commit to remove this binary. But then it would still be present in the history of commits, which may not be allowed. And it would take space on disk. We could edit the history to remove wireshark entirely. But this operation is too complicated. There was also a pcap capture file, which has nothing to do in the history of commits and would take space on disk. There again, it's too difficult to edit the history to remove it. There was a file .gitignore that was also removed. The original history can be found on David's repository: https://gitlab.eurecom.fr/daveprice/openairinterface5g/ The branch is: nfapi-ru-rau-split. A copy of that branch has been included in the internal OAI repository, for those who have access to it. The branch is the same. The last commit ID is 9106438239e0bc626ff1fa1d97d911caadd0fbb9. You can compare the current commit with the commit 9106... to see what differs. The current commit has to be considered non-working. The commit following the current commit will fix problems with the work in the current commit. If you use git bisect, don't spend time analyzing the current commit.
960 lines
33 KiB
Bash
Executable File
960 lines
33 KiB
Bash
Executable File
#!/bin/bash
|
|
#/*
|
|
# * 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.1 (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
|
|
# */
|
|
|
|
# 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
|
|
|
|
# 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
|
|
|
|
MSC_GEN="False"
|
|
XFORMS="True"
|
|
FLEXRAN_AGENT_SB_IF="True"
|
|
PRINT_STATS="False"
|
|
VCD_TIMING="False"
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
FORCE_DEADLINE_SCHEDULER_FLAG_USER=""
|
|
CPU_AFFINITY_FLAG_USER="False" #Only valid when lowlatecy flag is set to False
|
|
REL="Rel14"
|
|
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"
|
|
DISABLE_HARDWARE_DEPENDENCY="False"
|
|
CMAKE_BUILD_TYPE=""
|
|
CMAKE_CMD="$CMAKE"
|
|
UE_AUTOTEST_TRACE="False"
|
|
UE_DEBUG_TRACE="False"
|
|
UE_TIMING_TRACE="False"
|
|
DISABLE_LOG_X="False"
|
|
USRP_REC_PLAY="False"
|
|
BUILD_ECLIPSE=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. It also disables any compiler optimization. Only for debugging. Do not use in normal operation!
|
|
-h | --help
|
|
Print this help
|
|
--eNB
|
|
Makes the LTE softmodem
|
|
--UE
|
|
Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file
|
|
--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\")
|
|
--RRH
|
|
Makes the RRH
|
|
-a | --agent
|
|
Enables agent for software-defined control of the eNB
|
|
-r | --3gpp-release
|
|
default is Rel14,
|
|
Rel8 limits the implementation to 3GPP Release 8 version
|
|
Rel10 limits the implementation to 3GPP Release 10 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.
|
|
--disable-hardware-dependency
|
|
Disable HW dependency during installation
|
|
--ue-autotest-trace
|
|
Enable specific traces for UE autotest framework
|
|
--ue-trace
|
|
Enable traces for UE debugging
|
|
--ue-timing
|
|
Enable traces for timing
|
|
--disable-log
|
|
Disable all LOG_* macros
|
|
--build-eclipse
|
|
Build eclipse project files. Paths are auto corrected by fixprj.sh
|
|
--usrp-recplay
|
|
Build for I/Q record-playback modes
|
|
Usage (first build):
|
|
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
|
|
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
|
|
CMAKE_BUILD_TYPE="Debug"
|
|
echo_info "Will Compile with gdb symbols and disable compiler optimization"
|
|
CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug --trace-expand"
|
|
shift;;
|
|
--eNB)
|
|
eNB=1
|
|
echo_info "Will compile eNB"
|
|
shift;;
|
|
-a | --agent)
|
|
FLEXRAN_AGENT=1
|
|
echo_info "Will compile eNB with agent support"
|
|
shift;;
|
|
--UE)
|
|
UE=1
|
|
echo_info "Will compile UE"
|
|
shift;;
|
|
--UE-conf-nvram)
|
|
conf_nvram_path=$(readlink -f "$1")
|
|
shift 2;;
|
|
--UE-gen-nvram)
|
|
gen_nvram_path=$(readlink -f $2)
|
|
shift 2;;
|
|
--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;;
|
|
--disable-hardware-dependency)
|
|
echo_info "Disabling hardware dependency for compiling software"
|
|
DISABLE_HARDWARE_DEPENDENCY="True"
|
|
shift 1;;
|
|
--ue-autotest-trace)
|
|
UE_AUTOTEST_TRACE="True"
|
|
echo_info "Enabling autotest specific trace for UE"
|
|
shift 1;;
|
|
--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;;
|
|
--disable-log)
|
|
DISABLE_LOG_X="True"
|
|
echo_info "Disabling all LOG_* traces"
|
|
shift 1;;
|
|
--uhd-images-dir)
|
|
UHD_IMAGES_DIR=$2
|
|
echo_info "Downloading UHD images in the indicated location"
|
|
shift 2;;
|
|
--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;;
|
|
--build-telnetsrv)
|
|
BUILD_TELNETSRV=1
|
|
echo_info "Build embedded telnet server"
|
|
shift ;;
|
|
--usrp-recplay)
|
|
USRP_REC_PLAY="True"
|
|
echo_info "Enabling USRP record playback mode"
|
|
shift 1;;
|
|
-h | --help)
|
|
print_help
|
|
exit 1;;
|
|
*)
|
|
print_help
|
|
echo_fatal "Unknown option $1"
|
|
break;;
|
|
esac
|
|
done
|
|
|
|
CMAKE_CMD="$CMAKE_CMD .."
|
|
echo_info "CMAKE_CMD=$CMAKE_CMD"
|
|
|
|
#########################################################
|
|
# 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" ] ; 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="True"
|
|
elif [ "$HW" = "ETHERNET" ] ; then
|
|
DEADLINE_SCHEDULER_FLAG_USER="False"
|
|
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"
|
|
|
|
if [ -n "$UHD_IMAGES_DIR" ] && [ -z "$INSTALL_EXTERNAL" ]; then
|
|
echo_error "UHD images download settings will not be applied without -I present"
|
|
exit
|
|
fi
|
|
############################################
|
|
# setting and printing OAI envs, we should check here
|
|
############################################
|
|
|
|
echo_info "2. Setting the OAI PATHS ..."
|
|
|
|
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
|
|
if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
|
|
install_usrp_uhd_driver $UHD_IMAGES_DIR
|
|
fi
|
|
fi
|
|
if [ "$HW" == "OAI_BLADERF" ] ; then
|
|
echo_info "installing packages for BLADERF support"
|
|
check_install_bladerf_driver
|
|
if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then
|
|
flash_firmware_bladerf
|
|
fi
|
|
fi
|
|
if [ "$FLEXRAN_AGENT" == "1" ] ; then
|
|
echo_info "installing protobuf/protobuf-c for flexran agent support"
|
|
install_protobuf_from_source
|
|
install_protobuf_c_from_source
|
|
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 transport protocol
|
|
HW="None"
|
|
TP="ETHERNET"
|
|
|
|
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
|
|
|
|
# configuration module libraries, one currently available, using libconfig
|
|
config_libconfig_shlib=params_libconfig
|
|
|
|
# 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 ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
|
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
|
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
|
if [ "$FLEXRAN_AGENT" = "1" ] ; then
|
|
echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )" >> $cmake_file
|
|
fi
|
|
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 "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file
|
|
echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file
|
|
echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file
|
|
echo "set (DISABLE_LOG_X $DISABLE_LOG_X)" >> $cmake_file
|
|
echo "set (USRP_REC_PLAY $USRP_REC_PLAY)" >> $cmake_file
|
|
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
|
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
|
cd $DIR/$lte_build_dir/build
|
|
eval $CMAKE_CMD
|
|
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
|
|
|
|
# mandatory shared lib
|
|
compilations \
|
|
$lte_build_dir $config_libconfig_shlib \
|
|
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
|
|
|
|
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
|
|
# eval $CMAKE_CMD
|
|
# 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
|
|
|
|
eval $CMAKE_CMD
|
|
compilations \
|
|
nas_sim_tools usim \
|
|
usim $dbin/usim
|
|
compilations \
|
|
nas_sim_tools nvram \
|
|
nvram $dbin/nvram
|
|
compilations \
|
|
nas_sim_tools conf2uedata \
|
|
conf2uedata $dbin/conf2uedata
|
|
|
|
# generate USIM data
|
|
if [ -f $dbin/conf2uedata ]; then
|
|
install_nas_tools $conf_nvram_path $gen_nvram_path
|
|
echo_info "Copying UE specific part to $DIR/$lte_build_dir/build"
|
|
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
|
|
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
|
|
eval $CMAKE_CMD
|
|
fi
|
|
|
|
if [ "$SIMUS_PHY" = "1" ] ; then
|
|
# lte unitary simulators compilation
|
|
echo_info "Compiling unitary tests simulators"
|
|
simlist="dlsim_tm4 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
|
|
echo_info "Compiling oarf tools. The logfile for compilation is here: $dlog/oarf.txt"
|
|
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
|
|
|
|
# oaisim compilation
|
|
###############
|
|
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 ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
|
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
|
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
|
if [ "$FLEXRAN_AGENT" = "1" ] ; then
|
|
echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )" >> $cmake_file
|
|
fi
|
|
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
|
|
eval $CMAKE_CMD
|
|
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
|
|
eval $CMAKE_CMD
|
|
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
|
|
eval $CMAKE_CMD
|
|
compilations \
|
|
nas_sim_tools usim \
|
|
usim $dbin/usim
|
|
compilations \
|
|
nas_sim_tools nvram \
|
|
nvram $dbin/nvram
|
|
compilations \
|
|
nas_sim_tools conf2uedata \
|
|
conf2uedata $dbin/conf2uedata
|
|
|
|
# generate USIM data
|
|
if [ -f $dbin/conf2uedata ]; then
|
|
install_nas_tools $conf_nvram_path $gen_nvram_path
|
|
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
|
|
|
|
if [ "$TP" == "ETHERNET" ] ; then
|
|
compilations \
|
|
$oaisim_build_dir oai_eth_transpro \
|
|
liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
|
|
ln -sf liboai_eth_transpro.so liboai_transpro.so
|
|
ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
|
|
echo_info "liboai_transpro.so is linked with ETHERNET library"
|
|
fi
|
|
|
|
cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt
|
|
cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file
|
|
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
|
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
|
if [ "$FLEXRAN_AGENT" = "1" ] ; then
|
|
echo "set ( FLEXRAN_AGENT_SB_IF $FLEXRAN_AGENT_SB_IF )" >> $cmake_file
|
|
fi
|
|
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
|
|
#eval $CMAKE_CMD
|
|
#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 ( 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
|
|
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
|
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
|
cd $DIR/$rrh_build_dir/build
|
|
eval $CMAKE_CMD
|
|
compilations \
|
|
rrh_gw rrh_gw \
|
|
rrh_gw $dbin/rrh_gw
|
|
|
|
fi
|
|
# Telnet server compilation
|
|
#####################
|
|
if [ "$BUILD_TELNETSRV" = "1" ] ; then
|
|
|
|
telnetsrv_build_dir=telnetsrv
|
|
mkdir -p $DIR/$telnetsrv_build_dir/build
|
|
cd $DIR/$telnetsrv_build_dir/build
|
|
echo_info "Compiling telnet server library ..."
|
|
|
|
[ "$CLEAN" = "1" ] && rm -rf $DIR/$telnetsrv_build_dir
|
|
cmake_file=$OPENAIR_DIR/common/utils/$telnetsrv_build_dir/CMakeLists.txt
|
|
cd $DIR/$telnetsrv_build_dir/build
|
|
eval "$CMAKE_CMD $OPENAIR_DIR/common/utils/$telnetsrv_build_dir/"
|
|
make
|
|
|
|
fi
|
|
# build RF device and transport protocol libraries
|
|
#####################################
|
|
if [ "$eNB" = "1" -o "$UE" = "1" -o "$RRH" = "1" ] ; then
|
|
|
|
if [ "$eNB" = "1" -o "$UE" = "1" ] ; then
|
|
build_dir=$lte_build_dir
|
|
else
|
|
build_dir=$rrh_build_dir
|
|
fi
|
|
|
|
# build RF device libraries
|
|
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
|
|
compilations \
|
|
$build_dir oai_exmimodevif \
|
|
liboai_exmimodevif.so $dbin/liboai_exmimodevif.so.$REL
|
|
|
|
ln -sf liboai_exmimodevif.so liboai_device.so
|
|
ln -sf $dbin/liboai_exmimodevif.so.$REL $dbin/liboai_device.so
|
|
echo_info "liboai_device.so is linked to EXMIMO device library"
|
|
elif [ "$HW" == "OAI_USRP" ] ; then
|
|
compilations \
|
|
$build_dir oai_usrpdevif \
|
|
liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
|
|
|
|
ln -sf liboai_usrpdevif.so liboai_device.so
|
|
ln -sf $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 -sf liboai_bladerfdevif.so liboai_device.so
|
|
ln -sf $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 -sf liboai_lmssdrdevif.so liboai_device.so
|
|
ln -sf $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 -sf liboai_eth_transpro.so liboai_transpro.so
|
|
ln -sf $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
|
|
eval $CMAKE_CMD
|
|
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 "$@"
|