Created
September 2, 2020 05:40
-
-
Save jeromewu/ac74b678ea182dc84218e11d28a7b05a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -x | |
# verify Emscripten version | |
emcc -v | |
# configure FFMpeg with Emscripten | |
CFLAGS="-s USE_PTHREADS -O3" | |
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 -j4 | |
# 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 | |
-O3 # Optimize code with performance first | |
-s USE_SDL=2 # use SDL2 | |
-s USE_PTHREADS=1 # enable pthreads support | |
-s PROXY_TO_PTHREAD=1 # detach main() from browser/UI main thread | |
-s INVOKE_RUN=0 # not to run the main() in the beginning | |
-s EXPORTED_FUNCTIONS="[_main, _proxy_main]" # export main and proxy_main funcs | |
-s EXTRA_EXPORTED_RUNTIME_METHODS="[FS, cwrap, setValue, writeAsciiToMemory]" # export preamble funcs | |
-s INITIAL_MEMORY=33554432 # 33554432 bytes = 32 MB | |
) | |
emcc "${ARGS[@]}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment