FROM exaloop/codon-llvm:15.0.1
ENV pass="codon-jupyter"

# Install dependencies
RUN yum -y install openssl-devel libsodium-devel libuuid-devel

# Build Codon core
RUN git clone -b develop https://github.com/exaloop/codon /github/codon
RUN cmake3 -S /github/codon -B /github/codon/build \
    -G Ninja \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=/opt/llvm-codon/bin/clang \
    -DCMAKE_CXX_COMPILER=/opt/llvm-codon/bin/clang++ \
    -DLLVM_DIR=/opt/llvm-codon/lib/cmake/llvm \
    -DCMAKE_INSTALL_PREFIX=/opt/codon
RUN cmake3 --build /github/codon/build
RUN cmake3 --install /github/codon/build

# Build Codon Jupyter support
RUN cmake3 -S /github/codon/jupyter -B /github/codon/jupyter/build \
    -G Ninja \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=/opt/llvm-codon/bin/clang \
    -DCMAKE_CXX_COMPILER=/opt/llvm-codon/bin/clang++ \
    -DLLVM_DIR=/opt/llvm-codon/lib/cmake/llvm \
    -DCODON_PATH=/opt/codon \
    -DOPENSSL_ROOT_DIR=$(openssl version -d | cut -d' ' -f2 | tr -d '"') \
    -DOPENSSL_CRYPTO_LIBRARY=/usr/lib64/libssl.so \
    -DXEUS_USE_DYNAMIC_UUID=ON
RUN cmake3 --build /github/codon/jupyter/build
RUN cmake3 --install /github/codon/jupyter/build

# Build Seq (bioinformatics plugin) for Codon
RUN git clone -b develop https://github.com/exaloop/seq /github/seq
RUN cmake3 -S /github/seq -B /github/seq/build \
    -G Ninja \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=/opt/llvm-codon/bin/clang \
    -DCMAKE_CXX_COMPILER=/opt/llvm-codon/bin/clang++ \
    -DLLVM_DIR=/opt/llvm-codon/lib/cmake/llvm \
    -DCODON_PATH=/opt/codon
RUN cmake3 --build /github/seq/build
RUN cmake3 --install /github/seq/build

# Set up Codon Jupyter kernel
RUN pip3 install ipywidgets==7.6.5 numpy matplotlib pandas scipy jupyter plotly
RUN mkdir -p /usr/share/jupyter/kernels/codon
RUN echo '{"display_name": "Codon", "argv": [ "/opt/codon/bin/codon", "jupyter", "-plugin", "seq", "{connection_file}" ], "language": "python"}' > /usr/share/jupyter/kernels/codon/kernel.json

# Launch Jupyter
ENV CODON_PYTHON="/usr/lib64/libpython3.so"
CMD jupyter notebook --port=8888 --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token=${pass}