#!/usr/bin/env bash
# Rebuilds the LAME WebAssembly module used by @mediabunny/mp3-encoder, following the
# instructions in that package's README. Needs an activated Emscripten SDK (emcc,
# emconfigure, emmake), curl and tar. Run it next to lame-bridge.c; it writes lame.js.
set -euo pipefail

LAME_VERSION="${LAME_VERSION:-3.100}"
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORK_DIR="${WORK_DIR:-$HERE/build}"

mkdir -p "$WORK_DIR"
cd "$WORK_DIR"

if [ ! -d "lame-$LAME_VERSION" ]; then
  curl -L "https://sourceforge.net/projects/lame/files/lame/$LAME_VERSION/lame-$LAME_VERSION.tar.gz/download" \
    -o "lame-$LAME_VERSION.tar.gz"
  tar xzf "lame-$LAME_VERSION.tar.gz"
fi

cd "lame-$LAME_VERSION"
emconfigure ./configure \
  CFLAGS="-DNDEBUG -DNO_STDIO -O3 -msimd128" \
  --disable-dependency-tracking \
  --disable-shared \
  --disable-gtktest \
  --disable-analyzer-hooks \
  --disable-decoder \
  --disable-frontend
emmake make clean
emmake make

cd "$HERE"
emcc lame-bridge.c "$WORK_DIR/lame-$LAME_VERSION/libmp3lame/.libs/libmp3lame.a" \
  -s MODULARIZE=1 \
  -s EXPORT_ES6=1 \
  -s SINGLE_FILE=1 \
  -s ALLOW_MEMORY_GROWTH=1 \
  -s ENVIRONMENT=web,worker \
  -s EXPORTED_RUNTIME_METHODS=cwrap,HEAPU8 \
  -s EXPORTED_FUNCTIONS=_malloc,_free \
  -msimd128 \
  -O3 \
  -o lame.js
