FROM ghcr.io/falcon-infra/dev:ubuntu24.04

SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
RUN apt update && apt install -y libreadline-dev bison flex libgflags-dev libgoogle-glog-dev libleveldb-dev libssl-dev libthrift-dev libpq-dev fuse libfuse-dev libzookeeper-mt-dev libfmt-dev fio git libcurl4-openssl-dev jq moreutils
# brpc
RUN apt install -y libgflags-dev libssl-dev libsnappy-dev libgoogle-glog-dev libgoogle-perftools-dev libunwind-dev libgtest-dev libgmock-dev autoconf libtool libibverbs-dev

ARG PROTOBUF_VERSION=3.12.4
ARG PROTOBUF_DOWNLOAD_URL=https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${PROTOBUF_VERSION}.tar.gz

RUN wget -O- "${PROTOBUF_DOWNLOAD_URL}" | tar -xzvf - -C /tmp && \
    cd "/tmp/protobuf-${PROTOBUF_VERSION}" && \
    ./autogen.sh && \
    CXXFLAGS="-fPIC" ./configure && \
    make -j$(nproc) && \
    make install && \
    ldconfig

ARG BRPC_VERSION=1.12.1
ARG BRPC_DOWNLOAD_URL=https://github.com/apache/brpc/archive/refs/tags/${BRPC_VERSION}.tar.gz

RUN wget -O- "${BRPC_DOWNLOAD_URL}" | tar -xzvf - -C /tmp && \
    cd "/tmp/brpc-${BRPC_VERSION}" && \
    mkdir build && cd build && \
    cmake -GNinja -DWITH_GLOG=ON -DWITH_RDMA=ON .. && \
    ninja && ninja install && \
    rm -rf "/tmp/brpc-${BRPC_VERSION}"

RUN apt install -y libcurl4-openssl-dev
ARG PROMETHEUS_CPP_VERSION=1.3.0
ARG PROMETHEUS_DOWNLOAD_URL=https://github.com/jupp0r/prometheus-cpp/releases/download/v${PROMETHEUS_CPP_VERSION}/prometheus-cpp-with-submodules.tar.gz

RUN wget -O- "${PROMETHEUS_DOWNLOAD_URL}" | tar -xzvf - -C /tmp && \
    cd "/tmp/prometheus-cpp-with-submodules" && \
    mkdir build && cd build && \
    cmake .. -DBUILD_SHARED_LIBS=ON -DENABLE_PULL=ON -DENABLE_COMPRESSION=OFF && \
    make -j$(nproc) && make install && \
    rm -rf "/tmp/prometheus-cpp-with-submodule"

ARG FLATBUFFERS_VERSION=25.2.10
ARG FLATBUFFERS_DOWNLOAD_URL=https://github.com/google/flatbuffers/archive/refs/tags/v${FLATBUFFERS_VERSION}.tar.gz

RUN wget -O- "${FLATBUFFERS_DOWNLOAD_URL}" | tar -xzvf - -C /tmp && \
    cd "/tmp/flatbuffers-${FLATBUFFERS_VERSION}" && \
    mkdir build && cd build && \
    cmake -GNinja .. && \
    ninja && ninja install && \
    rm -rf "/tmp/flatbuffers-${FLATBUFFERS_VERSION}"

ARG JSONCPP_VERSION=1.9.6
ARG JSONCPP_DOWNLOAD_URL=https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/${JSONCPP_VERSION}.tar.gz

RUN wget -O- "${JSONCPP_DOWNLOAD_URL}" | tar -xzvf - -C /tmp && \
    cd "/tmp/jsoncpp-${JSONCPP_VERSION}" && \
    sed -i 's/set(CMAKE_CXX_STANDARD 11)/set(CMAKE_CXX_STANDARD 17)/' CMakeLists.txt && \
    mkdir build && cd build && \
    cmake .. && \
    make -j$(nproc) && \
    make install && \
    rm -rf "/tmp/jsoncpp-${JSONCPP_VERSION}"

ARG OBS_VERSION=v3.24.12
ARG OBS_DOWNLOAD_URL=https://github.com/huaweicloud/huaweicloud-sdk-c-obs/archive/refs/tags/${OBS_VERSION}.tar.gz
ARG OBS_INSTALL_PREFIX=/usr/local/obs

RUN wget -O- "${OBS_DOWNLOAD_URL}" | tar -xzvf - -C /tmp && \
    cd "/tmp/huaweicloud-sdk-c-obs-${OBS_VERSION#v}" && \
    cd source/eSDK_OBS_API/eSDK_OBS_API_C++ && \
    export SPDLOG_VERSION=spdlog-1.12.0 && \
    # Detect architecture and use appropriate build script
    if [ "$(uname -m)" = "aarch64" ]; then \
        bash build_aarch.sh sdk; \
    else \
        bash build.sh sdk; \
    fi && \
    mkdir -p "${OBS_INSTALL_PREFIX}" && \
    tar zxvf sdk.tgz -C "${OBS_INSTALL_PREFIX}" && \
    # Cleanup
    rm -f ${OBS_INSTALL_PREFIX}/lib/libcurl.so* && \
    rm -rf "/tmp/huaweicloud-sdk-c-obs-${OBS_VERSION#v}" && \
    ln -sf ${OBS_INSTALL_PREFIX}/lib/libiconv.so ${OBS_INSTALL_PREFIX}/lib/libiconv.so.0 && \
    cat <<EOF >> ~/.zshrc
export OBS_INSTALL_PREFIX=${OBS_INSTALL_PREFIX}
export LD_LIBRARY_PATH=\$OBS_INSTALL_PREFIX/lib:\$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=\$OBS_INSTALL_PREFIX/include:\$CPLUS_INCLUDE_PATH
export USER=root

EOF