# SPDX-License-Identifier: LicenseRef-CSSL-1.0

#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface BUILD service
#   Valid for Ubuntu 24.04
#
#---------------------------------------------------------------------

ARG UBUNTU_IMAGE=ubuntu:noble
FROM ran-base:latest AS ran-build

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
    DEBIAN_FRONTEND=noninteractive apt-get install --yes \
       wget \
       ninja-build \
       #unzip is needed for protobuf
       unzip \
       moreutils \
       vim-tiny \
       nano \
       # To build libnvipc
       cmake libpcap-dev libcunit1-dev libnuma-dev pkg-config

RUN rm -Rf /oai-ran
WORKDIR /oai-ran
COPY . .

RUN /bin/sh oaienv && \
    tar -xvzf nvipc_src.*.tar.gz  && \
    cd nvipc_src.* && \
    rm -rf build && mkdir build && cd build && \
    cmake .. -DNVIPC_DPDK_ENABLE=OFF -DNVIPC_DOCA_ENABLE=OFF -DNVIPC_CUDA_ENABLE=OFF -DENABLE_SLT_RSP=ON && \
    make -j && make install

RUN /bin/sh oaienv && \
    cd cmake_targets && \
    mkdir -p log && \
    ./build_oai -c -w AERIAL --gNB --ninja --build-tool-opt -k10 \
      --cmake-opt -DCMAKE_C_FLAGS="-Werror" --cmake-opt -DCMAKE_CXX_FLAGS="-Werror" \
      --cmake-opt -DT_RECORD_DB=ON


#start from scratch for target executable
FROM ${UBUNTU_IMAGE} AS oai-gnb-aerial
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe
ENV PATH="/opt/oai-gnb/bin:$PATH"

RUN apt-get update && \
    apt-get upgrade --yes && \
    apt-get install --yes \
        software-properties-common \
        procps \
        libsctp1 \
        tzdata \
        libconfig9 \
        openssl \
        net-tools \
        iperf \
        iproute2 \
        iputils-ping \
        gdb \
        moreutils \
        libusb-1.0-0 \
        libyaml-cpp-dev && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /opt/oai-gnb/bin
COPY --from=ran-build \
    /oai-ran/cmake_targets/ran_build/build/nr-softmodem \
    /oai-ran/cmake_targets/ran_build/build/common/utils/T/tracer/record* \
    ./

COPY ./docker/scripts/gnb_entrypoint.sh ./entrypoint.sh

COPY --from=ran-build \
  /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
  /oai-ran/cmake_targets/ran_build/build/libparams_yaml.so \
  /oai-ran/cmake_targets/ran_build/build/_deps*/fmtlog-build*/libfmtlog-shared*.so \
  /oai-ran/cmake_targets/ran_build/build/_deps*/clickhouse-cpp-build*/clickhouse/libclickhouse*.so \
  /usr/local/lib/

COPY --from=ran-build \
    /usr/local/lib/libnvlog.so \
    /usr/local/lib/libnvipc.so \
    /usr/local/lib/

RUN ldconfig && \
    echo "---- ldd on nr-softmodem ----" && \
    ldd /opt/oai-gnb/bin/nr-softmodem && \
    echo "---- ldd on shared libraries ----" && \
    ldd /usr/local/lib/libparams_libconfig.so \
        /usr/local/lib/libfmtlog-shared.so \
        /usr/local/lib/libnvlog.so \
        /usr/local/lib/libnvipc.so

WORKDIR /opt/oai-gnb

COPY --from=ran-build /usr/local/bin/yq /usr/local/bin/yq
COPY --from=ran-build /tini /tini
COPY --from=ran-build /oai-ran/common/utils/T/T_messages.txt ./
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-softmodem"]
