# cuframes-composer — production Docker image.
#
# Multi-stage:
#   1) builder: nvidia/cuda CUDA-toolkit + build deps + cmake build
#   2) runtime: nvidia/cuda base (минимум: libcudart) + runtime deps + бинарь
#
# Размер runtime image: ~250 MB (cuda runtime + apt-deps). Build image: ~5 GB.
#
# Использование:
#   docker build -t gx/cuframes-composer:0.1 -f docker/Dockerfile .
#   docker run --gpus all --network=cctv --ipc=container:cuframes-ipc-anchor \
#       -v cctv_cuframes_sock:/run/cuframes:ro \
#       -v cuda_grid_icons:/icons:ro \
#       -v /usr/share/fonts/truetype/dejavu:/fonts:ro \
#       -p 5599:5599 \
#       gx/cuframes-composer:0.1 grid_record --out - --control tcp://0.0.0.0:5599 ...
#
# Лицензия: LGPL-2.1+

# ── Builder ──────────────────────────────────────────────────────────────
FROM nvidia/cuda:12.6.0-devel-ubuntu24.04 AS builder

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential cmake git \
    libpng-dev libfreetype-dev \
    libzmq3-dev libjson-c-dev libmosquitto-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /src
COPY . .

RUN git submodule update --init --recursive || true

RUN mkdir -p build && cd build && \
    cmake -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CUDA_ARCHITECTURES="61;75;86;89;120" \
          .. && \
    make -j$(nproc)

# ── Runtime ──────────────────────────────────────────────────────────────
FROM nvidia/cuda:12.6.0-runtime-ubuntu24.04 AS runtime

RUN apt-get update && apt-get install -y --no-install-recommends \
    libpng16-16t64 libfreetype6 \
    libzmq5 libjson-c5 libmosquitto1 \
    fonts-dejavu-core \
    && rm -rf /var/lib/apt/lists/*

# Бинари + libcuframes (статически слинкована не вся, libcuframes shared нужен).
COPY --from=builder /src/build/examples/grid_record /usr/local/bin/grid_record
COPY --from=builder /src/build/examples/simple_record /usr/local/bin/simple_record
COPY --from=builder /src/build/third_party/cuframes/libcuframes/libcuframes.so.0.4.0 \
                   /usr/lib/x86_64-linux-gnu/libcuframes.so.0
COPY --from=builder /src/build/src/libcuframes_composer.so.0.1.0 \
                   /usr/lib/x86_64-linux-gnu/libcuframes_composer.so.0

# NVIDIA_DRIVER_CAPABILITIES должен включать 'video' для NVENC через libnvidia-encode.
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,video

ENTRYPOINT ["/usr/local/bin/grid_record"]
CMD ["--help"]
