#/*
# * 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
# */
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface BUILD service
#   Valid for RHEL9
#
#---------------------------------------------------------------------

FROM ran-base:latest AS phy-sim-build

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

#only install address and undefined behavior sanitizer for this container, the others don't need it
RUN dnf install -y libasan libubsan

#run build_oai to build the target image
RUN /bin/sh oaienv && \ 
    cd cmake_targets && \
    mkdir -p log && \
    ./build_oai --phy_simulators --ninja --sanitize --noavx512 -c --cmake-opt -DCMAKE_C_FLAGS=-Werror --cmake-opt -DCMAKE_CXX_FLAGS=-Werror

#start from scratch for target executable
FROM registry.access.redhat.com/ubi9/ubi:latest as oai-physim

RUN dnf update -y && \
    dnf install -y \
        lksctp-tools \
        tzdata \
        atlas \
        hostname \
        sudo \
        procps-ng \
        net-tools \
        iputils \
        bc \
        iproute && \
    echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
    echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf

WORKDIR /opt/oai-physim/bin
COPY --from=phy-sim-build \
    /oai-ran/cmake_targets/ran_build/build/dlsim \
    /oai-ran/cmake_targets/ran_build/build/nr_dlsim \
    /oai-ran/cmake_targets/ran_build/build/nr_prachsim \
    /oai-ran/cmake_targets/ran_build/build/nr_ulschsim \
    /oai-ran/cmake_targets/ran_build/build/polartest \
    /oai-ran/cmake_targets/ran_build/build/ulsim \
    /oai-ran/cmake_targets/ran_build/build/ldpctest \
    /oai-ran/cmake_targets/ran_build/build/nr_dlschsim \
    /oai-ran/cmake_targets/ran_build/build/nr_pbchsim \
    /oai-ran/cmake_targets/ran_build/build/nr_pucchsim \
    /oai-ran/cmake_targets/ran_build/build/nr_ulsim \
    /oai-ran/cmake_targets/ran_build/build/smallblocktest \
    ./

COPY --from=phy-sim-build \
    /oai-ran/cmake_targets/ran_build/build/libcoding.so \
    /lib64/liblapacke.so.3 \
    /lib64/libX11.so.6 \
    /lib64/libXpm.so.4 \
    /lib64/libxcb.so.1 \
    /lib64/libXau.so.6 \
    /lib64/libforms.so.2 \
    /lib64/libblas.so.3 \
    /lib64/libcblas.so.3 \
    /lib64/liblapack.so.3 \
    /lib64/libexslt.so.0 \
    /lib64/libxslt.so.1 \
    /usr/lib64/libasan.so.6 \
    /usr/lib64/libubsan.so.1 \
    /oai-ran/cmake_targets/ran_build/build/libdfts.so \
    /oai-ran/cmake_targets/ran_build/build/libldpc*.so \
    /usr/local/lib/

RUN ldconfig

# Copy some executables
WORKDIR /usr/bin/

COPY --from=phy-sim-build \
    /usr/bin/killall \
    /usr/bin/xmlstarlet \
    ./

# Copy the relevant configuration files for phySim
WORKDIR /opt/oai-physim/

COPY --from=phy-sim-build \
    /oai-ran/cmake_targets/autotests/run_exec_autotests.bash \
    /oai-ran/cmake_targets/autotests/test_case_list.xml \
    /opt/oai-physim/cmake_targets/autotests/
COPY --from=phy-sim-build \
    /oai-ran/cmake_targets/tools/build_helper \
    /oai-ran/cmake_targets/tools/test_helper \
    /opt/oai-physim/cmake_targets/tools/

#CMD ["sleep", "infinity"]
