FROM ubuntu:24.04

ENV USER=root \
    PATH=/usr/local/bin:/usr/local/cmake/bin:/usr/lib/jvm/default-java/bin:$PATH \
    JAVA_HOME=/usr/lib/jvm/default-java \
    PYTHON_VERSION=3.11.4 \
    DEBIAN_FRONTEND=noninteractive \
    TZ=Asia/Shanghai \
    LC_ALL=en_US.UTF-8 \
    LANG=en_US.UTF-8 \
    ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest \
    ASCEND_HOME_PATH=/usr/local/Ascend/ascend-toolkit/latest

SHELL ["/bin/bash", "-lc"]

RUN echo "dash dash/sh boolean false" | debconf-set-selections && \
    DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash && \
    ln -sf /bin/bash /bin/sh

RUN sed -i 's|URIs: http://ports.ubuntu.com/ubuntu-ports/|URIs: https://mirrors.huaweicloud.com/ubuntu-ports/|g' /etc/apt/sources.list.d/ubuntu.sources && \
    sed -i 's|https://|http://|g' /etc/apt/sources.list.d/ubuntu.sources && \
    apt-get update && \
    apt-get install -y --no-install-recommends ca-certificates && \
    sed -i 's|http://|https://|g' /etc/apt/sources.list.d/ubuntu.sources

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends \
        vim wget xz-utils net-tools openssh-client git curl ntpdate \
        unzip zip tree dos2unix tzdata tcl sudo bzip2 pigz default-jre \
        locales ccache rapidjson-dev \
        gcc-9 g++-9 gcc-13 g++-13 make unar rpm2cpio cpio texinfo flex \
        symlinks sqlite3 libgfortran5 lcov bc file jq cmake \
        build-essential libssl-dev zlib1g zlib1g-dev libbz2-dev \
        libreadline-dev libsqlite3-dev libffi-dev liblzma-dev \
        libncursesw5-dev tk-dev libgdbm-dev libc6-dev && \
    apt-get clean all && \
    rm -rf /var/lib/apt/lists/*

RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 && \
    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 100 && \
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90 && \
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 100 && \
    update-alternatives --set gcc /usr/bin/gcc-9 && \
    update-alternatives --set g++ /usr/bin/g++-9

RUN set -eux; \
    wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz"; \
    mkdir -p /usr/src/python; \
    tar -xJf python.tar.xz -C /usr/src/python --strip-components=1; \
    rm python.tar.xz; \
    cd /usr/src/python; \
    ./configure \
        --enable-optimizations \
        --with-ensurepip=install \
        --enable-shared \
        --with-system-ffi \
        --with-system-expat \
        LDFLAGS="-Wl,-rpath=/usr/local/lib"; \
    make -j "$(nproc)"; \
    make altinstall; \
    ln -sf /usr/local/bin/python${PYTHON_VERSION%.*} /usr/local/bin/python; \
    ln -sf /usr/local/bin/python${PYTHON_VERSION%.*} /usr/local/bin/python3; \
    ln -sf /usr/local/bin/pip${PYTHON_VERSION%.*} /usr/local/bin/pip; \
    ln -sf /usr/local/bin/pip${PYTHON_VERSION%.*} /usr/local/bin/pip3; \
    cd /; \
    rm -rf /usr/src/python; \
    python --version; \
    python3 --version; \
    pip --version; \
    pip3 --version

RUN mkdir -p /root/.pip && \
    echo "[global]" > /root/.pip/pip.conf && \
    echo "index-url=https://repo.huaweicloud.com/repository/pypi/simple" >> /root/.pip/pip.conf && \
    echo "trusted-host=repo.huaweicloud.com" >> /root/.pip/pip.conf && \
    echo "timeout=120" >> /root/.pip/pip.conf

RUN rm -f /etc/localtime && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    locale-gen en_US.UTF-8 zh_CN.UTF-8

RUN cd /tmp && \
    wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%209.0.0/Ascend-cann-toolkit_9.0.0_linux-aarch64.run --no-check-certificate && \
    wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%209.0.0/Ascend-cann-910b-ops_9.0.0_linux-aarch64.run --no-check-certificate && \
    wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%209.0.0/Ascend-cann-nnal_9.0.0_linux-aarch64.run --no-check-certificate && \
    chmod 777 /tmp/*.run && \
    yes | ./Ascend-cann-toolkit_*_linux-aarch64.run --install --quiet && \
    . /usr/local/Ascend/ascend-toolkit/set_env.sh && \
    yes | ./Ascend-cann-910b-ops_*_linux-aarch64.run --install --quiet && \
    yes | ./Ascend-cann-nnal_*_linux-aarch64.run --install --quiet && \
    rm -rf /tmp/*

RUN cd /tmp && \
    wget -q https://pytorch-package.obs.cn-north-4.myhuaweicloud.com/pta/torch/v2.9.0/torch-2.9.0-cp311-cp311-manylinux_2_28_aarch64.whl && \
    wget -q https://pytorch-package.obs.cn-north-4.myhuaweicloud.com/pta/Daily/v2.9.0-7.3.0/20260214.4/pytorch_v2.9.0-7.3.0_py311.tar.gz && \
    python3.11 -m pip install --upgrade pip && \
    pip3.11 install torch-2.9.0-cp311-cp311-manylinux_2_28_aarch64.whl && \
    tar -zxf pytorch_v2.9.0-7.3.0_py311.tar.gz && \
    pip3.11 install torch_npu-2.9.0.*-cp311-cp311-manylinux_2_28_$(uname -i).whl && \
    rm -rf /tmp/*

RUN echo "pyinstaller==5.8.0" > /tmp/requirements.txt && \
    echo "wheel==0.42.0" >> /tmp/requirements.txt && \
    echo "requests" >> /tmp/requirements.txt && \
    echo "pyyaml==6.0.1" >> /tmp/requirements.txt && \
    echo "pybind11==2.13.6" >> /tmp/requirements.txt && \
    echo "setuptools==67.4.0" >> /tmp/requirements.txt && \
    echo "numpy==1.23.4" >> /tmp/requirements.txt && \
    echo "pandas~=2.1.4" >> /tmp/requirements.txt && \
    echo "jsonschema~=4.21.1" >> /tmp/requirements.txt && \
    echo "jsonlines~=4.0.0" >> /tmp/requirements.txt && \
    echo "pyarrow~=15.0.0" >> /tmp/requirements.txt && \
    echo "pydantic~=2.6.3" >> /tmp/requirements.txt && \
    echo "urllib3>=2.1.0" >> /tmp/requirements.txt && \
    echo "twine" >> /tmp/requirements.txt && \
    echo "transformers==4.30.2" >> /tmp/requirements.txt && \
    echo "scikit-build" >> /tmp/requirements.txt && \
    echo "decorator>=4.4.0" >> /tmp/requirements.txt && \
    echo "scipy" >> /tmp/requirements.txt && \
    echo "psutil" >> /tmp/requirements.txt && \
    echo "librosa" >> /tmp/requirements.txt && \
    pip3.11 install -r /tmp/requirements.txt && \
    rm -rf /tmp/*

RUN mkdir -p /opt/buildtools && cd /opt/buildtools && \
    wget https://aoe-flow.obs.cn-north-4.myhuaweicloud.com/inference/dockerfile/obsutil_linux_arm64.tar.gz && \
    tar -zxvf obsutil_linux_arm64.tar.gz && \
    ln -sf /opt/buildtools/obsutil_linux_arm64_5.5.12/obsutil /usr/local/bin/obsutil && \
    rm -rf obsutil_linux_arm64.tar.gz

RUN git config --global credential.helper store

RUN echo "export TZ='Asia/Shanghai'" >> ~/.bashrc && \
    echo "export LC_ALL='en_US.UTF-8'" >> ~/.bashrc && \
    echo "export LANG='en_US.UTF-8'" >> ~/.bashrc && \
    echo "source /usr/local/Ascend/ascend-toolkit/set_env.sh" >> ~/.bashrc

WORKDIR /opt/package
COPY . /opt/package/MindIE-SD

ENV ASCEND_CUSTOM_OPP_PATH=/opt/package/MindIE-SD/mindiesd/ops/vendors/customize:/opt/package/MindIE-SD/mindiesd/ops/vendors/aie_ascendc:${ASCEND_CUSTOM_OPP_PATH}

RUN source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
    python3.11 -m pip install -r /opt/package/MindIE-SD/requirements.txt && \
    cd /opt/package/MindIE-SD && \
    python3.11 setup.py build_py

RUN mkdir -p /workspace && \
    ln -s /opt/package/MindIE-SD /workspace/MindIE-SD

WORKDIR /workspace/MindIE-SD

CMD ["/bin/bash"]