49 lines
1.6 KiB
Bash
49 lines
1.6 KiB
Bash
|
#!/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[@]}"
|