#!/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" 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" NR_REL="Rel15" HW="None" TP="None" NOS1=0 HW_LATENCY=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 NR="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. 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 --gNB Makes the NR softmodem --nrUE Makes the NR UE 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\") --HWLAT Makes test program for haw latency tests -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, ADRV9371_ZC706, 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;; --gNB) gNB=1 NR="True" echo_info "Will compile gNB" shift;; -a | --agent) echo_info "FlexRAN support is always compiled into the eNB" shift;; --UE) UE=1 echo_info "Will compile UE" shift;; --nrUE) nrUE=1 NR="True" echo_info "Will compile NR UE" shift;; --UE-conf-nvram) conf_nvram_path=$(readlink -f "$1") shift 2;; --UE-gen-nvram) gen_nvram_path=$(readlink -f $2) shift 2;; -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" -a "$HW" != "ADRV9371_ZC706" ] ; then echo_fatal "Unknown HW type $HW will exit..." else if [ "$HW" == "USRP" ] ; then HW="OAI_USRP" fi if [ "$HW" == "ADRV9371_ZC706" ] ; then HW="OAI_ADRV9371_ZC706" 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;; --HWLAT) HWLAT=1 echo_info "Will compile hw latency test program" shift;; --HWLAT_TEST) HWLAT_TEST=1 echo_info "Will compile hw latency test program" 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" if [ "$eNB" = "1" -o "$gNB" = "1" ] && [ "$UE" = "1" -o "$nrUE" = "1" ]; then echo_error "Cannot build UE/nrUE and eNB/gNB on one build_oai execution" echo_error "use 2 build_oai invocations" exit fi ######################################################### # check validity of HW and TP parameters for eNB / gNB ######################################################### # to be discussed if [ "$eNB" = "1" -o "$gNB" = "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 [ "$HWLAT" = "1" ] ; then 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_ADRV9371_ZC706" ] ; 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_ADRV9371_ZC706" ] ; then echo_info "\nInstalling packages for ADRV9371_ZC706 support" check_install_libiio_driver 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 echo_info "installing protobuf/protobuf-c for flexran agent support" install_protobuf_from_source install_protobuf_c_from_source 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 build_dir=noS1_ran_build if [ "$gNB" = "1" ] ; then exec=nr-softmodem-nos1 elif [ "$nrUE" = "1" ] ; then exec=nr-uesoftmodem-nos1 elif [ "$eNB" = "1" ] ; then exec=lte-softmodem-nos1 elif [ "$UE" = "1" ] ; then exec=lte-uesoftmodem-nos1 fi else build_dir=ran_build if [ "$gNB" = "1" ] ; then exec=nr-softmodem elif [ "$nrUE" = "1" ] ; then exec=nr-uesoftmodem elif [ "$eNB" = "1" ] ; then exec=lte-softmodem elif [ "$UE" = "1" ] ; then exec=lte-uesoftmodem fi 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 "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" ] ; then # softmodem compilation [ "$CLEAN" = "1" ] && rm -rf $DIR/$build_dir/build mkdir -p $DIR/$build_dir/build cmake_file=$DIR/$build_dir/CMakeLists.txt echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file if [ "$NOS1" = "1" ] ; then cat $DIR/$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 echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file echo "set ( NR_RRC_ASN1_VERSION \"${NR_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 \"${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/$build_dir/build eval $CMAKE_CMD fi if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" ] ; then echo_info "Compiling $exec" compilations \ $build_dir $exec \ $exec $dbin/$exec.$REL # mandatory shared lib compilations \ $build_dir $config_libconfig_shlib \ lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so compilations \ $build_dir coding \ libcoding.so $dbin/libcoding.so if [ "$NOS1" = "1" ] ; then compilations \ $build_dir nasmesh \ CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko compilations \ $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 \ $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/$build_dir/build" cp -Rvf $dbin/.ue_emm.nvram0 $DIR/$build_dir/build cp -Rvf $dbin/.ue.nvram0 $DIR/$build_dir/build cp -Rvf $dbin/.usim.nvram0 $DIR/$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 \ $build_dir openair_rf \ CMakeFiles/openair_rf/openair_rf.ko $dbin/openair_rf.ko compilations \ $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/$build_dir/build oarf > $dlog/oarf.txt 2>&1 cp $OPENAIR_DIR/cmake_targets/$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 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 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 # Telnet server compilation ##################### if [ "$BUILD_TELNETSRV" = "1" ] ; then build_dir=$build_dir compilations \ $build_dir telnetsrv \ libtelnetsrv.so $dbin/libtelnetsrv.so fi # HWLAT compilation ##################### if [ "$HWLAT" = "1" ] ; then hwlat_exec=lte-hwlat hwlat_build_dir=lte-hwlat echo_info "Compiling $hwlat_exec ..." [ "$CLEAN" = "1" ] && rm -rf $DIR/lte-hwlat/build mkdir -p $DIR/$hwlat_build_dir/build cmake_file=$DIR/$hwlat_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 ( RF_BOARD \"${HW}\")" >> $cmake_file echo 'set ( PACKAGE_NAME "\"lte-hwlat\"")' >> $cmake_file echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file echo "set ( HWLAT \"${HWLAT}\" )" >>$cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file cd $DIR/$hwlat_build_dir/build cmake .. compilations \ lte-hwlat lte-hwlat \ lte-hwlat $dbin/lte-hwlat fi # HWLAT_TEST compilation ##################### if [ "$HWLAT_TEST" = "1" ] ; then hwlat_test_exec=lte-hwlat-test hwlat_test_build_dir=lte-hwlat-test echo_info "Compiling $hwlat_test_exec ..." [ "$CLEAN" = "1" ] && rm -rf $DIR/lte-hwlat-test/build mkdir -p $DIR/$hwlat_test_build_dir/build cmake_file=$DIR/$hwlat_test_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 ( RF_BOARD \"${HW}\")" >> $cmake_file echo 'set ( PACKAGE_NAME "\"lte-hwlat-test\"")' >> $cmake_file echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file echo "set ( HWLAT \"${HWLAT}\" )" >>$cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file cd $DIR/$hwlat_test_build_dir/build cmake .. compilations \ lte-hwlat-test lte-hwlat-test \ lte-hwlat-test $dbin/lte-hwlat-test fi # build RF device and transport protocol libraries ##################################### if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" - o "$HWLAT" = "1" ] ; then build_dir=$build_dir # 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_ADRV9371_ZC706" ] ; then ln -sf $OPENAIR_DIR/targets/ARCH/ADRV9371_ZC706/slib/libadrv9371_zc706.so liboai_device.so echo_info "liboai_device.so is linked to ADRV9371_ZC706 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 "$@"