FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive

# Copy installer to container's tmp folder
COPY houdini*.tar.gz /tmp/houdini/

# Install required packages
RUN apt-get update && apt-get install -y --no-install-recommends \
    libglu1 \ 
    libsm6 \
    bc \
    iputils-ping \ 
    libnss3 \
    libfontconfig1 \
    libxcomposite1 \
    libxcursor1 \ 
    libxi6 \
    libxkbcommon-x11-dev \
    libxss1 \
    libxt-dev \
    libxtst6 \
    libpci3 \
    libasound2-dev \
    libdbus-1-dev \
    libudev-dev \
    lsb-core \
    apt-utils \
    unzip \
    tar \
    curl \
    xz-utils \
    xvfb \
    libxrandr-dev \
    libxdamage-dev \
    nfs-common \
    && rm -rf /var/lib/apt/lists/*

# yyyy-mm-dd
ARG EULA_DATE

# hostname:1715
ARG SESINETD

# Install Houdini
RUN cd /tmp/ && tar -xf houdini/houdini*.tar.gz -C houdini/ \
    && ./houdini/houdini*/houdini.install --install-houdini \
	--no-install-menus --install-hfs-symlink --no-install-license --accept-EULA $EULA_DATE \
	--no-install-hqueue-client --no-install-hqueue-server --auto-install \
    && rm -rf /tmp/houdini \ 
    && echo "serverhost=$SESINETD" > ~/.sesi_licenses.pref

# Needed for submitting ECS tasks from other tasks when submitting a cook as a task
# This step also requires access to the license server, so you can also comment this out if
# this functionality isn't needed
RUN /opt/hfs20.*/bin/hython -m pip install boto3

# Fake a display so that Qt applications work properly when xvfb is used.
ENV DISPLAY=:1

# Install required packages for OpenCL driver installation
RUN apt-get update -q && apt-get install --no-install-recommends -yq alien wget clinfo libnuma1 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# From https://github.com/pkienzle/opencl_docker/blob/master/Dockerfile
ARG INTEL_DRIVER=opencl_runtime_16.1.2_x64_rh_6.4.0.37.tgz
ARG INTEL_DRIVER_URL=http://registrationcenter-download.intel.com/akdlm/irc_nas/12556

# Install Intel OpenCL CPU drivers
RUN mkdir -p /tmp/opencl-driver-intel
WORKDIR /tmp/opencl-driver-intel
RUN echo INTEL_DRIVER is $INTEL_DRIVER; \
    curl -O $INTEL_DRIVER_URL/$INTEL_DRIVER; \
    if echo $INTEL_DRIVER | grep -q "[.]zip$"; then \
        unzip $INTEL_DRIVER; \
        mkdir fakeroot; \
        for f in intel-opencl-*.tar.xz; do tar -C fakeroot -Jxvf $f; done; \
        cp -R fakeroot/* /; \
        ldconfig; \
    else \
        tar -xzf $INTEL_DRIVER; \
        for i in $(basename $INTEL_DRIVER .tgz)/rpm/*.rpm; do alien --to-deb $i; done; \
        dpkg -i *.deb; \
        rm -rf $INTEL_DRIVER $(basename $INTEL_DRIVER .tgz) *.deb; \
        mkdir -p /etc/OpenCL/vendors; \
        echo /opt/intel/*/lib64/libintelocl.so > /etc/OpenCL/vendors/intel.icd; \
    fi; \
    rm -rf /tmp/opencl-driver-intel;

# Uncomment to install AMD OpenCL GPU drivers
#ARG AMD_DRIVER=amdgpu-pro-20.10-1084971-ubuntu-18.04.tar.xz
#RUN mkdir -p /tmp/opencl-driver-amd
#WORKDIR /tmp/opencl-driver-amd
#COPY $AMD_DRIVER /tmp/opencl-driver-amd/$AMD_DRIVER

#RUN echo AMD_DRIVER is $AMD_DRIVER; \
#    tar -Jxvf $AMD_DRIVER; \
#    cd amdgpu-pro-*; \
#    ./amdgpu-install --headless --no-32; \
#    apt-get install opencl-amdgpu-pro -y; \
#    rm -rf /tmp/opencl-driver-amd;

RUN mkdir -p /etc/OpenCL/vendors && \
    echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

RUN rm -f /etc/OpenCL/vendors/mesa.icd
COPY run.sh /root/run.sh

WORKDIR /root
USER root

ENV command COMMAND
CMD /bin/bash -c "/root/run.sh"
ENTRYPOINT /bin/bash -c "/root/run.sh"
