# Building WASM module
add_executable(musica-wasm 
  bindings/musica_wasm.cpp
)

target_compile_features(musica-wasm PUBLIC cxx_std_20)

# Link against MUSICA
target_link_libraries(musica-wasm musica::musica)

# Set output name and location
# NOTE: Writing to source directory is intentional for ease of use and
# to keep the WASM files alongside the JavaScript wrapper that uses them.
# The generated files (musica.js, musica.wasm) are excluded via .gitignore.
set_target_properties(musica-wasm PROPERTIES
  OUTPUT_NAME "musica"
  SUFFIX ".js"
  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/wasm"
)

# Emscripten linker flags for generating WASM
target_link_options(musica-wasm PRIVATE
  "SHELL:-s WASM=1"
  "SHELL:-s MODULARIZE=1"
  "SHELL:-s EXPORT_ES6=1"
  "SHELL:-s EXPORT_NAME='createMusicaModule'"
  "SHELL:-s DISABLE_EXCEPTION_CATCHING=0"
  "SHELL:-s ALLOW_MEMORY_GROWTH=1"
  "SHELL:-s FORCE_FILESYSTEM=1"
  "SHELL:-lnodefs.js"
  "SHELL:-s EXPORTED_RUNTIME_METHODS=['FS','NODEFS']"
  "SHELL:--bind"
)
