#!/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 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/cmake_targets/ran_build/build conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf XFORMS="True" SKIP_SHARED_LIB_FLAG="False" PRINT_STATS="False" HW="None" TP="Ethernet" EPC=0 VERBOSE_CI=0 VERBOSE_COMPILE=0 RUN_GROUP=0 TEST_CASE_GROUP="" BUILD_DIR=ran_build BUILD_DOXYGEN=0 BUILD_COVERITY_SCAN=0 DISABLE_HARDWARE_DEPENDENCY="False" CMAKE_BUILD_TYPE="RelWithDebInfo" CMAKE_CMD="$CMAKE" MAKE_CMD=make BUILD_ECLIPSE=0 NR="False" OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope nrqtscope ldpc_cuda ldpc_t1 websrv oai_iqplayer" RU=0 CMAKE_C_FLAGS=() CMAKE_CXX_FLAGS=() function print_help() { echo_info " This script compiles OpenAirInterface Software, and can install dependencies for a number of distributions (Ubuntu 18-22, Fedora, RHEL7/8). Options: --arch-native Passes -march=native to the compiler. -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, ... --cmake-opt Pass the supplied option verbatim to cmake. -d | --build-dir Sets build directory (will be <oai-root>/cmake_targets/<build-dir>/build) -I | --install-external-packages Installs required packages such as LibXML, asn1.1 compiler, ... This option will require root password --install-optional-packages Install useful but not mandatory packages such as valgrind -i | --install-system-files Install OpenAirInterface required files in Linux system This option will require root password -g | --run-with-gdb <Release | RelWithDebInfo | MinSizeRel | Debug specify the build mode used by cmake. defaults to Debug mode if -g is used alone, with no mode parameter if -g is not specifies, Release mode is used. -G | --cmaketrace enable cmake debugging messages --eNB Makes the LTE softmodem --gNB Makes the NR softmodem --RU Makes the OAI RRU --UE Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file --nrUE Makes the NR UE softmodem --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\") -w | --hardware USRP, BLADERF, LMSSDR, IRIS, SIMU, AW2SORI, None (Default) Adds this RF board support (in external packages installation and in compilation) -t | --transport Selects the transport protocol type, options: None, Ethernet, benetel4g, benetel5g -P | --phy_simulators Makes the unitary tests Layer 1 simulators -S | --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 Will compile with software oscilloscope features --verbose-ci Compile with verbose instructions in CI Docker env --verbose-compile Shows detailed compilation instructions in makefile --build-doxygen Builds doxygen based documentation. --build-coverity-scan Builds Coverity-Scan objects for upload --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 --enable-cpu-affinity --disable-T-Tracer Disables 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 --uhd-images-dir Download UHD images in the indicated location --build-eclipse Build eclipse project files. --build-lib <libraries> Build optional shared library, <libraries> can be one or several of $OPTIONAL_LIBRARIES or \"all\" --noavx512 Disable AVX512 intrinsics whatever processor capability is --noavx2 Disable AVX2 intrinsics whatever processor capability is -k | --skip-shared-libraries Skip build for shared libraries to reduce compilation time when building frequently for debugging purposes --ninja Tell cmake to use the Ninja build system. Without, will generate make files --sanitize Shortcut for usage of --sanitize-address --sanitize-undefined --sanitize-address | -fsanitize=address Enable the address sanitizer on all targets --sanitize-undefined | -fsanitize=undefined Enable the undefined behavior sanitizer on all targets -h | --help Print this help" } function main() { until [ -z "$1" ] do case "$1" in --arch-native) CMAKE_C_FLAGS+=("-march=native") CMAKE_CXX_FLAGS+=("-march=native") shift;; -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;; --cmake-opt) CMAKE_CMD="$CMAKE_CMD $2" shift 2;; -d | --build-dir) BUILD_DIR=$2 shift 2;; -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;; -i | --install-system-files) INSTALL_SYSTEM_FILES=1 echo_info "Will copy OpenAirInterface files in Linux directories" shift;; -g | --run-with-gdb) case "$2" in "Release") CMAKE_BUILD_TYPE="Release" echo_info "Will Compile without gdb symbols and with compiler optimization" CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Release" shift ;; "RelWithDebInfo") CMAKE_BUILD_TYPE="RelWithDebInfo" echo_info "Will Compile with gdb symbols" CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=1" shift ;; "MinSizeRel") CMAKE_BUILD_TYPE="MinSizeRel" echo_info "Will Compile for minimal exec size" CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=MinSizeRel" shift ;; "Debug" | *) CMAKE_BUILD_TYPE="Debug" echo_info "Will Compile with gdb symbols and disable compiler optimization" CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug" if [ "$2" == "Debug" ] ; then shift fi ;; esac shift;; -G | --cmaketrace) CMAKE_CMD="$CMAKE_CMD --trace-expand" shift;; --eNB) eNB=1 echo_info "Will compile eNB" shift;; --gNB) gNB=1 echo_info "Will compile gNB" shift;; --RU) RU=1 echo_info "Will compile RRU" shift;; --UE) UE=1 echo_info "Will compile UE" shift;; --nrUE) nrUE=1 rfsimNas=1 echo_info "Will compile NR UE" shift;; --mu) CMAKE_CMD="$CMAKE_CMD -DUE_EXPANSION=True -DPRE_SCD_THREAD=True" echo_info "Will compile with UE_EXPANSION" shift;; --UE-conf-nvram) conf_nvram_path=$(readlink -f "$2") shift 2;; --UE-gen-nvram) gen_nvram_path=$(readlink -f "$2") shift 2;; --UE-ip) UE_ip=1 echo_info "Will compile UE" shift;; -w | --hardware) # Use OAI_USRP as the key word USRP is used inside UHD driver case "$2" in "USRP" | "BLADERF" | "LMSSDR" | "IRIS" | "SIMU" | "AW2SORI") HW="OAI_"$2 ;; "None") HW="None" ;; *) echo_fatal "Unknown HW type $HW: exit..." esac echo_info "Setting hardware to: $HW" #CMAKE_CMD="$CMAKE_CMD -DRF_BOARD=\"${HW}\"" CMAKE_CMD="$CMAKE_CMD -DRF_BOARD=${HW}" shift 2;; -t | --transport) TP=$2 shift 2;; -P | --phy_simulators) SIMUS_PHY=1 echo_info "Will compile dlsim, ulsim, ..." shift;; -S | --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" CMAKE_CMD="$CMAKE_CMD -DENABLE_VCD_FIFO=True" EXE_ARGUMENTS="$EXE_ARGUMENTS -V" shift;; -x | --xforms) XFORMS=1 EXE_ARGUMENTS="$EXE_ARGUMENTS -d" echo_info "Will generate the software oscilloscope features" shift;; --verbose-ci) VERBOSE_CI=1 echo_info "Will compile with verbose instructions in CI Docker env" shift;; --verbose-compile) VERBOSE_COMPILE=1 echo_info "Will compile with verbose instructions" shift;; --build-doxygen) CMAKE_CMD="$CMAKE_CMD -DGENERATE_DOXYGEN=ON" BUILD_DOXYGEN=1 echo_info "Will build doxygen support" shift;; --build-coverity-scan) BUILD_COVERITY_SCAN=1 echo_info "Will build Coverity-Scan objects for upload" shift;; --disable-T-Tracer) CMAKE_CMD="$CMAKE_CMD -DT_TRACER=False" echo_info "Disabling 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) CMAKE_CMD="$CMAKE_CMD -DUE_AUTOTEST_TRACE=True" echo_info "Enabling autotest specific trace for UE" shift 1;; --ue-trace) CMAKE_CMD="$CMAKE_CMD -DUE_DEBUG_TRACE=False" echo_info "Enabling UE trace for debug" shift 1;; --ue-timing) CMAKE_CMD="$CMAKE_CMD -DUE_TIMING_TRACE=True" echo_info "Enabling UE timing trace" 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-lib) BUILD_OPTLIB="" if [ "$2" == "all" ] ; then BUILD_OPTLIB="$OPTIONAL_LIBRARIES" echo_info "Enabling build of all optional shared libraries ($OPTIONAL_LIBRARIES)" else for alib in $2 ; do for oklib in $OPTIONAL_LIBRARIES ; do if [ "$alib" = "$oklib" ] ; then BUILD_OPTLIB="$BUILD_OPTLIB $alib" echo_info "Enabling build of lib${alib}.so" fi done done if [ "${BUILD_OPTLIB## }" != "$2" ] ; then echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES" fi fi for oklib in $BUILD_OPTLIB ; do CMAKE_CMD="$CMAKE_CMD -DENABLE_${oklib^^}=ON" done shift 2;; --noavx512) CMAKE_CMD="$CMAKE_CMD -DAVX512=OFF" echo_info "Disabling AVX512 instructions" shift 1;; --noavx2) CMAKE_CMD="$CMAKE_CMD -DAVX2=OFF" echo_info "Disabling AVX2 instructions" shift 1;; -k | --skip-shared-libraries) SKIP_SHARED_LIB_FLAG="True" echo_info "Skipping build of shared libraries, rfsimulator and transport protocol libraries" shift;; --ninja) CMAKE_CMD="$CMAKE_CMD -GNinja" MAKE_CMD=ninja shift;; --sanitize) CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True -DSANITIZE_UNDEFINED=True" shift;; --sanitize-address | -fsanitize=address) grep -sq "Ubuntu 18.04" /etc/os-release && echo_error "Bug in OS with this option, see CMakeLists.txt" CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True" shift;; --sanitize-undefined | -fundefined=address) CMAKE_CMD="$CMAKE_CMD -DSANITIZE_UNDEFINED=True" shift;; -h | --help) print_help exit 1;; *) print_help echo_fatal "Unknown option $1" break;; esac done ################################### # Check if cov-build is installed # ################################### if [ "$BUILD_COVERITY_SCAN" == "1" ] ; then echo_info "Checking cov-build is installed" IS_INSTALLED=`which cov-build | grep -c cov-build || true` if [ $IS_INSTALLED -eq 1 ] ; then echo_info "Found cov-build" else echo_fatal "Did NOT find cov-build in PATH!" fi 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_info "No local radio head and no transport protocol selected" 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 echo_info "RF HW set to $HW" # If the user doesn't specify the Linux scheduler to use, we set a value ####################################################### # Setting and printing OAI envs, we should check here # ####################################################### 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 dlog=$OPENAIR_DIR/cmake_targets/log mkdir -p $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 [ ! -v BUILD_UHD_FROM_SOURCE ] && [ ! "$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 [ "$HW" == "OAI_IRIS" ] ; then echo_info "installing packages for IRIS support" check_install_soapy #if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then # flash_firmware_iris #fi fi fi if [ "$INSTALL_OPTIONAL" = "1" ] ; then echo_info "Installing optional packages" check_install_additional_tools fi execlist="" if [ "$eNB" = "1" ] ; then execlist="$execlist lte-softmodem" fi if [ "$gNB" = "1" ] ; then execlist="$execlist nr-softmodem nr-cuup" fi if [ "$RU" = "1" ] ; then execlist="$execlist oairu" fi if [ "$UE" = 1 ] ; then execlist="$execlist lte-uesoftmodem" fi if [ "$nrUE" = 1 ] ; then execlist="$execlist nr-uesoftmodem" fi if [[ "$execlist" == "" && "$SIMUS_PHY" != "1" && "$HW" == "None" ]]; then SKIP_SHARED_LIB_FLAG="True" fi DIR=$OPENAIR_DIR/cmake_targets [ "$CLEAN" = "1" ] && rm -rf $DIR/$BUILD_DIR/build mkdir -p $DIR/$BUILD_DIR/build cd $DIR/$BUILD_DIR/build if [[ ${#CMAKE_C_FLAGS[@]} > 0 ]]; then CMAKE_CMD="$CMAKE_CMD -DCMAKE_C_FLAGS=\"${CMAKE_C_FLAGS[*]}\""; fi if [[ ${#CMAKE_CXX_FLAGS[@]} > 0 ]]; then CMAKE_CMD="$CMAKE_CMD -DCMAKE_CXX_FLAGS=\"${CMAKE_CXX_FLAGS[*]}\""; fi # for historical reasons we build in a subdirectory cmake_targets/XYZ/build, # e.g., cmake_targets/ran_build/build, hence the ../../.. CMAKE_CMD="$CMAKE_CMD ../../.." echo_info "running $CMAKE_CMD" eval $CMAKE_CMD for f in $execlist ; do echo_info "Compiling $f..." compilations $BUILD_DIR $f done # mandatory shared libraries common to UE and (e/g)NB if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then echo_info "Building shared libraries common to UE and gNB" # configuration module libraries, one currently available, using libconfig config_libconfig_shlib=params_libconfig compilations $BUILD_DIR $config_libconfig_shlib compilations $BUILD_DIR coding fi if [ "$UE" = 1 ] ; then echo_info "Compiling UE specific part" if [ "$UE_ip" = 1 ] then echo_info "Building ue_ip module" compilations $BUILD_DIR ue_ip else echo_info "Bypassing ue_ip build" fi #IS_CONTAINER # mkdir -p $DIR/at_commands/build # cd $DIR/at_commands/build # eval $CMAKE_CMD # compilations at_commands 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 compilations nas_sim_tools nvram compilations nas_sim_tools conf2uedata # generate USIM data if [ -f conf2uedata ]; then install_nas_tools $conf_nvram_path $DIR/$BUILD_DIR/build "$DIR/$BUILD_DIR/build/conf2uedata.txt" else echo_warning "not generated UE NAS files: binaries not found" fi fi cd $DIR/$BUILD_DIR/build ################## # PHY simulators # ################## if [ "$SIMUS_PHY" = "1" ] ; then echo_info "Compiling physical unitary tests simulators" # TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim" # simlist="ldpctest" for f in $simlist ; do compilations $BUILD_DIR $f done compilations $BUILD_DIR coding fi ################### # Core simulators # ################### if [ "$SIMUS_CORE" = "1" ] ; then echo_info "Compiling security 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 $BUILD_DIR test_$f done fi ###################### # Optional libraries # ###################### if [ ! -z "$BUILD_OPTLIB" ] ; then for oklib in $BUILD_OPTLIB ; do compilations $BUILD_DIR $oklib done fi #################################################### # Build RF device and transport protocol libraries # #################################################### if [ "$eNB" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$RU" = "1" -o "$nrUE" = "1" ] ; then # build RF device libraries if [ "$HW" != "None" ] ; then rm -f liboai_device.so if [ "$HW" == "OAI_USRP" ] ; then compilations $BUILD_DIR oai_usrpdevif ln -sf liboai_usrpdevif.so 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 fi ln -sf liboai_bladerfdevif.so 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 # fi ln -sf liboai_lmssdrdevif.so liboai_device.so echo_info "liboai_device.so is linked to LMSSDR device library" elif [ "$HW" == "OAI_IRIS" ] ; then compilations $BUILD_DIR oai_irisdevif ln -s liboai_irisdevif.so liboai_device.so echo_info "liboai_device.so is linked to IRIS device library" elif [ "$HW" == "OAI_AW2SORI" ] ; then compilations $BUILD_DIR aw2sori_transpro ln -sf libaw2sori_transpro.so libthirdparty_transpro.so echo_info "build libthirdparty_transpro.so for AW2SORI fronthaul" else echo_info "liboai_device.so is not linked to any device library" fi fi #build simulators devices if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then echo_info "Compiling rfsimulator" compilations $BUILD_DIR rfsimulator fi #build transport protocol libraries (currently only ETHERNET is available) if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then echo_info "Building transport protocol libraries" rm -f liboai_transpro.so if [ "$TP" == "Ethernet" ]; then compilations $BUILD_DIR oai_eth_transpro ln -sf liboai_eth_transpro.so liboai_transpro.so echo_info "liboai_transpro.so is linked to ETHERNET transport" fi if [ "$TP" == "benetel4g" ]; then compilations $BUILD_DIR benetel_4g ln -sf libbenetel_4g.so liboai_transpro.so echo_info "liboai_transpro.so is linked to BENETEL4G transport" fi if [ "$TP" == "benetel5g" ]; then compilations $BUILD_DIR benetel_5g ln -sf libbenetel_5g.so liboai_transpro.so echo_info "liboai_transpro.so is linked to BENETEL4G transport" 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" ( $MAKE_CMD doc ) >& $doxygen_log fi ############## # Auto-tests # ############## if [ "$OAI_TEST" = "1" ] ; then 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 at 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_success "BUILD SHOULD BE SUCCESSFUL" fi } main "$@"