FROM emscripten/emsdk:5.0.1 AS build

ARG BUILD_USER=1000
ARG FFMPEG_VERSION=8.0.1

ARG PREFIX=/tmp/ffmpeg-build
ARG MAKEFLAGS="-j4"

RUN wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
RUN echo "deb https://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main\ndeb-src https://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" > /etc/apt/sources.list.d/llvm.list
RUN apt-get update
RUN apt-get install -y libllvm-20-ocaml-dev libllvm20 llvm-20 llvm-20-dev llvm-20-runtime
RUN apt-get install -y libclang-rt-20-dev-wasm32 libclang-rt-20-dev-wasm64 libc++-20-dev-wasm32 libc++abi-20-dev-wasm32 libclang-rt-20-dev-wasm32 libclang-rt-20-dev-wasm64
RUN apt-get update && apt-get install -y autoconf libtool build-essential pkgconf


USER ${BUILD_USER}

# Get ffmpeg source.
WORKDIR /tmp/
RUN wget -O ffmpeg-${FFMPEG_VERSION}.tar.gz http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz && \
  tar zxf ffmpeg-${FFMPEG_VERSION}.tar.gz && rm ffmpeg-${FFMPEG_VERSION}.tar.gz

ARG CFLAGS="-s USE_PTHREADS=1 -O3 -I${PREFIX}/include"
ARG LDFLAGS="$CFLAGS -L${PREFIX}/lib -s INITIAL_MEMORY=33554432"
ENV EM_PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"

# Compile ffmpeg.
WORKDIR /tmp/ffmpeg-${FFMPEG_VERSION}
RUN emconfigure ./configure \
      --prefix=${PREFIX} \
      --target-os=none \
      --arch=x86_32 \
      --enable-cross-compile \
      --disable-debug \
      --disable-x86asm \
      --disable-inline-asm \
      --disable-stripping \
      --disable-programs \
      --disable-doc \
      --disable-all \
      --enable-avcodec \
      --enable-avformat \
      --enable-avutil \
      --enable-swresample \
      --enable-swscale \
      --enable-protocol=file \
      --enable-decoder=h264,hevc,vp8,vp9,av1,prores,aac,mp3,opus,vorbis,flac,alac,pcm_s16le,pcm_s16be,pcm_s24le,pcm_s24be \
      --enable-demuxer=mov,matroska,webm,mpegts,mxf,mp3,wav,ogg,avi,aiff,flac,hevc,h264,av1 \
      --enable-parser=h264,hevc,vp8,vp9,av1,aac,mpegaudio,opus,vorbis,flac \
      --extra-cflags="$CFLAGS" \
      --extra-cxxflags="$CFLAGS" \
      --extra-ldflags="$LDFLAGS" \
      --nm="llvm-nm-20 -g" \
      --ar=emar \
      --as=llvm-as \
      --ranlib=llvm-ranlib-20 \
      --cc=emcc \
      --cxx=em++ \
      --objcc=emcc \
      --dep-cc=emcc

RUN emmake make -j4 && \
  emmake make install


COPY --chown=${BUILD_USER}:${BUILD_USER} ./src/ffprobe-wasm-wrapper.cpp /build/src/ffprobe-wasm-wrapper.cpp
COPY --chown=${BUILD_USER}:${BUILD_USER} ./Makefile /build/Makefile

WORKDIR /build

RUN make
