# Copyright (C) 2019 Intel Corporation.  All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

FROM ubuntu:20.04 AS base

ENV DEBIAN_FRONTEND=noninteractive


# hadolint ignore=DL3008
RUN apt-get update && apt-get install -y \
    cmake build-essential git curl libssl-dev python3 --no-install-recommends \
    && apt-get clean -y \
    && rm -rf /var/lib/apt/lists/*

# hadolint ignore=DL3008
RUN apt-get update && apt-get install -y wget ca-certificates --no-install-recommends \
    && apt-get clean -y \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir /usr/local/share/ca-certificates/cacert.org \
    && wget -qP /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt \
    && update-ca-certificates \
    && git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt

# Build TensorFlow Lite VX delegate default built for x86-64 simulator
WORKDIR /tmp
RUN git clone https://github.com/VeriSilicon/TIM-VX.git tim-vx \
    && git clone https://github.com/VeriSilicon/tflite-vx-delegate.git \
    && git clone https://github.com/tensorflow/tensorflow.git


# Build TIM-VX
WORKDIR /tmp/tim-vx/host_build
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr/local  ../ \
    && make -j "$(grep -c ^processor /proc/cpuinfo)" \
    && make install

WORKDIR /tmp/tim-vx
#RUN mkdir -p prebuilt-sdk/x86_64_linux/lib/include 
#RUN cp prebuilt-sdk/x86_64_linux/include/CL prebuilt-sdk/x86_64_linux/lib/include -fr


# Build TensorFlow Lite
WORKDIR /tmp/tensorflow/build
RUN cmake \
    -DBUILD_SHARED_LIBS=ON=on \
    -DTFLITE_ENABLE_RUY=on \
    -DTFLITE_ENABLE_NNAPI=off \
    -DTFLITE_ENABLE_XNNPACK=on \
    -DTFLITE_ENABLE_EXTERNAL_DELEGATE=on \
    ../tensorflow/lite/
RUN make -j "$(grep -c ^processor /proc/cpuinfo)" \
    && make install \
    && cp --no-preserve=ownership -d lib*.so* /usr/local/lib \ 
    && cp -r --no-preserve=ownership -d flatbuffers/include/flatbuffers /usr/local/include
# install header files
RUN install -d /usr/local/include/tensorflow/lite 
WORKDIR /tmp/tensorflow/tensorflow/lite 
# hadolint ignore=SC2046
RUN cp --parents \
    $(find . -name "*.h*") \
    /usr/local/include/tensorflow/lite
# install version.h from core
RUN install -d /usr/local/include/tensorflow/core/public && \
    cp /tmp/tensorflow/tensorflow/core/public/version.h /usr/local/include/tensorflow/core/public


# Build Vx Delegate default built for x86-64 simulator
WORKDIR /tmp/tflite-vx-delegate/build
RUN cmake \
    -DBUILD_SHARED_LIBS=ON \
    -DFETCHCONTENT_SOURCE_DIR_TENSORFLOW=/tmp/tensorflow \
    -DTFLITE_LIB_LOC=/usr/local/lib/libtensorflow-lite.so \
    -DTIM_VX_INSTALL=/usr/local \
    -DCMAKE_INSTALL_PREFIX=/usr/  \
    ../
RUN make vx_delegate -j "$(grep -c ^processor /proc/cpuinfo)" \
    && make install \
    && cp --no-preserve=ownership -d lib*.so* /usr/lib
# install header files
RUN install -d /usr/local/include/tensorflow-lite-vx-delegate
WORKDIR /tmp/tflite-vx-delegate/
# hadolint ignore=SC2046
RUN cp --parents \
    $(find . -name "*.h*") \
    /usr/local/include/tensorflow-lite-vx-delegate

ENV VIVANTE_SDK_DIR=/tmp/tim-vx/prebuilt-sdk/x86_64_linux/
ENV VSIMULATOR_CONFIG=czl

ENV LD_LIBRARY_PATH=/tmp/tim-vx/prebuilt-sdk/x86_64_linux/lib:/usr/local/lib:/lib/x86_64-linux-gnu/:/lib64/:/usr/lib:$LD_LIBRARY_PATH 


# Build WASI-NN
WORKDIR /home/wamr

COPY . .

WORKDIR /home/wamr/core/iwasm/libraries/wasi-nn/test/build

# hadolint ignore=SC2086
RUN cmake \
    -DCMAKE_LIBRARY_PATH=${CMAKE_LIBRARY_PATH}:/usr/local/lib/ \
    -DCMAKE_INCLUDE_PATH=${CMAKE_INCLUDE_PATH}:/usr/local/include/ \
    -DWAMR_BUILD_WASI_NN=1 \
    -DWAMR_BUILD_WASI_NN_ENABLE_EXT=1 \
    -DWASI_NN_EXT_DELEGATE_PATH="/usr/lib/libvx_delegate.so" \
    ..

RUN make -j "$(grep -c ^processor /proc/cpuinfo)"

RUN cp /home/wamr/core/iwasm/libraries/wasi-nn/test/build/iwasm /run/iwasm

ENTRYPOINT [ "/run/iwasm" ]
