# syntax=docker/dockerfile:1.3-labs
FROM fedora:39 AS builder

# To build:
# docker build -t nebulous/solver .

# To run, resulting in a terminal for further experiments:
# docker run -it nebulous/solver

WORKDIR /solver
COPY ./ /solver

RUN <<EOF
    # Development framework
    dnf --assumeyes install gcc-c++ make git-core boost boost-devel ccache qpid-proton-cpp qpid-proton-cpp-devel json-c json-devel json-glib jsoncpp jsoncpp-devel coin-or-Couenne wget
    # Dependencies
    git clone https://github.com/jarro2783/cxxopts.git CxxOpts
    git clone https://github.com/GeirHo/TheronPlusPlus.git Theron++
    mkdir Theron++/Bin

    # Install AMPL library
    wget --no-verbose https://portal.ampl.com/external/?url=https://portal.ampl.com/dl/amplce/ampl.linux64.tgz -O ampl.linux64.tgz
    tar --file=ampl.linux64.tgz --extract
    mv ampl.linux-intel64 AMPL
    rm ampl.linux64.tgz
EOF

# Make AMPL shared libraries findable
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/solver/AMPL:/solver/AMPL/amplapi/lib"

# Build solver
RUN make SolverComponent -e THERON=./Theron++ AMPL_INCLUDE=./AMPL/amplapi/include AMPL_LIB=./AMPL/amplapi/lib  CxxOpts_DIR=./CxxOpts/include

# ============================================================

FROM fedora:39
WORKDIR /solver
RUN dnf --assumeyes install boost qpid-proton-cpp json-c json-glib jsoncpp coin-or-Couenne
COPY --from=builder /solver /solver
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/solver/AMPL:/solver/AMPL/amplapi/lib"

# 
# We set constant `--ModelDir` and `--AMPLDir`; the other arguments can be
# given on the command line, like so (note that `--Endpoint` is mandatory):
# 
# docker run nebulous/solver --Broker=https://somewhere.else/ --Endpoint=my-app-id
# 
# For a shell, to diagnose problems etc.:
# docker run --rm -it --entrypoint /bin/bash nebulous/solver
ENTRYPOINT ["/solver/SolverComponent", "--ModelDir=/tmp", "--AMPLDir=/solver/AMPL"]