.
#
# Dockerfile for Vortex POCL compiler
#

# set base OS
FROM ubuntu:18.04

# set build variables
ARG LOGIN=user:pass
ARG RISC_GNU_TOOLS_PATH=/opt/riscv_gnu_toolchain
ARG LLVM_HOME=/opt/llvm-10
ARG POCL_CC_PATH=/opt/pocl_cc
ARG POCL_RT_PATH=/opt/pocl_rt  
ARG VORTEX_HOME=/home/vortex 
ARG VORTEX_DRIVER_INC=$VORTEX_HOME/driver/sw/include
ARG VORTEX_DRIVER_LIB=$VORTEX_HOME/driver/sw/stub/libvortex.so
ARG VORTEX_RUNTIME_PATH=$VORTEX_HOME/runtime

# system update
RUN apt update
RUN apt upgrade -y

# install GNU RISC-V Tools dependencies
RUN apt-get -y install \
  binutils build-essential libtool texinfo \
  gzip zip unzip patchutils curl git \
  make cmake ninja-build automake bison flex gperf \
  grep sed gawk python bc \
  zlib1g-dev libexpat1-dev libmpc-dev \
  libglib2.0-dev libfdt-dev libpixman-1-dev

# install GNU RISC-V Tools dependencies
RUN git clone https://github.com/riscv/riscv-gnu-toolchain /tmp/riscv-gnu-toolchain
RUN cd /tmp/riscv-gnu-toolchain; \
    git submodule update --init --recursive
RUN cd /tmp/riscv-gnu-toolchain; \
    mkdir build
RUN cd /tmp/riscv-gnu-toolchain/build; \
    ../configure --prefix=$RISC_GNU_TOOLS_PATH --with-arch=rv32im --with-abi=ilp32;
RUN cd /tmp/riscv-gnu-toolchain/build; \
    make -j`nproc`; \
    make -j`nproc` build-qemu
RUN rm -rf /tmp/riscv-gnu-toolchain

# install LLVM 10
RUN git clone -b release/10.x https://github.com/llvm/llvm-project.git /tmp/llvm-project
RUN cd /tmp/llvm-project; \
    mkdir build
RUN cd /tmp/llvm-project/build; \
    cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang" -DBUILD_SHARED_LIBS=True -DLLVM_USE_SPLIT_DWARF=True -DCMAKE_INSTALL_PREFIX=$LLVM_HOME -DLLVM_OPTIMIZED_TABLEGEN=True -DLLVM_BUILD_TESTS=True -DDEFAULT_SYSROOT=$RISC_GNU_TOOLS_PATH/riscv32-unknown-elf -DLLVM_DEFAULT_TARGET_TRIPLE="riscv32-unknown-elf" -DLLVM_TARGETS_TO_BUILD="RISCV" ../llvm
RUN cd /tmp/llvm-project/build; \
    cmake --build . --target install
RUN rm -rf /tmp/llvm-project

# install Vortex
RUN git clone -b fpga_synthesis https://$LOGIN@github.gatech.edu/casl/Vortex.git $VORTEX_HOME
RUN cd $VORTEX_HOME; \
    make -C rtl build_config; \
    make -C runtime build_config; \
    make -C driver/sw/stub

# install POCL
RUN git clone https://$LOGIN@github.gatech.edu/casl/pocl.git /tmp/pocl
RUN cd /tmp/pocl; \
    mkdir build_cc
RUN cd /tmp/pocl/build_cc; \
    cmake -G Ninja -DCMAKE_INSTALL_PREFIX=$POCL_CC_PATH -DOCS_AVAILABLE=ON -DWITH_LLVM_CONFIG=$LLVM_HOME/bin/llvm-config -DENABLE_VORTEX=ON -DVORTEX_RUNTIME_PATH=$VORTEX_RUNTIME_PATH -DVORTEX_DRIVER_INC=$VORTEX_DRIVER_INC -DVORTEX_DRIVER_LIB=$VORTEX_DRIVER_LIB -DBUILD_TESTS=OFF -DPOCL_DEBUG_MESSAGES=ON ..
RUN cd /tmp/pocl/build_cc; \
    cmake --build . --target install
RUN cd /tmp/pocl; \
    mkdir build_rt 
RUN cd /tmp/pocl/build_rt; \
    cmake -G Ninja -DCMAKE_INSTALL_PREFIX=$POCL_RT_PATH -DOCS_AVAILABLE=OFF -DHOST_DEVICE_BUILD_HASH=riscv32-unknown-unknown-elf -DENABLE_VORTEX=ON -DVORTEX_RUNTIME_PATH=$VORTEX_RUNTIME_PATH -DVORTEX_DRIVER_INC=$VORTEX_DRIVER_INC -DVORTEX_DRIVER_LIB=$VORTEX_DRIVER_LIB -DBUILD_TESTS=OFF -DPOCL_DEBUG_MESSAGES=ON ..
RUN cd /tmp/pocl/build_rt; \
    cmake --build . --target install
RUN rm -rf /tmp/pocl

# Set the working directory to /mnt.
WORKDIR	/mnt