#!/bin/bash -x # https://jeromewu.github.io/build-ffmpeg-webassembly-version-part-3-v0.1/ # verify Emscripten version emcc -v # configure FFMpeg with Emscripten CFLAGS="-s USE_PTHREADS" LDFLAGS="$CFLAGS -s INITIAL_MEMORY=33554432" # 33554432 bytes = 32 MB CONFIG_ARGS=( --target-os=none # use none to prevent any os specific configurations --arch=x86_32 # use x86_32 to achieve minimal architectural optimization --enable-cross-compile # enable cross compile --disable-x86asm # disable x86 asm --disable-inline-asm # disable inline asm --disable-stripping # disable stripping --disable-programs # disable programs build (incl. ffplay, ffprobe & ffmpeg) --disable-doc # disable doc --extra-cflags="$CFLAGS" --extra-cxxflags="$CFLAGS" --extra-ldflags="$LDFLAGS" --nm="llvm-nm -g" --ar=emar --as=llvm-as --ranlib=llvm-ranlib --cc=emcc --cxx=em++ --objcc=emcc --dep-cc=emcc ) emconfigure ./configure "${CONFIG_ARGS[@]}" # build dependencies emmake make -j # build ffmpeg.wasm mkdir -p wasm/dist ARGS=( -I. -I./fftools -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Qunused-arguments -o wasm/dist/ffmpeg.js fftools/ffmpeg_opt.c fftools/ffmpeg_filter.c fftools/ffmpeg_hw.c fftools/cmdutils.c fftools/ffmpeg.c -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -lm -s USE_SDL=2 # use SDL2 -s USE_PTHREADS=1 # enable pthreads support -s INITIAL_MEMORY=33554432 # 33554432 bytes = 32 MB ) emcc "${ARGS[@]}"