# Dolphin Emulator Traversal Server
# Lightweight NAT hole-punching relay for Dolphin netplay
# Supports ALL GameCube/Wii games via Dolphin

# --- Build stage ---
FROM debian:bookworm AS build

RUN apt-get update && apt-get install -y \
    build-essential cmake git pkg-config \
    libfmt-dev libenet-dev libcurl4-openssl-dev \
    libbz2-dev liblzma-dev libzstd-dev zlib1g-dev \
    liblzo2-dev liblz4-dev libspng-dev \
    libusb-1.0-0-dev libevdev-dev libpugixml-dev libxxhash-dev \
    libminiupnpc-dev libhidapi-dev libsystemd-dev libudev-dev \
    glslang-dev glslang-tools \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /dolphin

RUN git clone --depth 1 https://github.com/dolphin-emu/dolphin.git . \
    && git submodule update --init --recursive --depth 1

RUN mkdir build && cd build && cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -DENABLE_QT=OFF \
    -DENABLE_NOGUI=OFF \
    -DENABLE_CLI=OFF \
    -DENABLE_TESTS=OFF \
    -DUSE_DISCORD_PRESENCE=OFF \
    -DENABLE_AUTOUPDATE=OFF \
    -DENABLE_ANALYTICS=OFF

RUN cd build && cmake --build . --target traversal_server -j$(nproc)

# --- Runtime stage ---
FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y \
    libfmt9 libstdc++6 \
    && rm -rf /var/lib/apt/lists/*

RUN useradd -r -s /bin/false dolphin

COPY --from=build /dolphin/build/Binaries/traversal_server /usr/local/bin/traversal_server

USER dolphin

EXPOSE 6262/udp
EXPOSE 6226/udp

CMD ["traversal_server"]
