Skip to content

Commit

Permalink
emscripten: support building with emcc
Browse files Browse the repository at this point in the history
  • Loading branch information
mochaaP committed Feb 6, 2025
1 parent 68dbd8f commit a3dbebd
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 6 deletions.
4 changes: 1 addition & 3 deletions examples/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,7 @@ if device_io.enabled() and generation
executable(
'simple_playback_sine',
'simple_playback_sine.c',
# FIXME: simple_playback_sine.c:60:48:
# error: ‘struct <anonymous>’ has no member named ‘name’
ma_example_broken,
name_suffix: host_system == 'emscripten' ? 'html' : [],
dependencies: ma_sys_deps + ma_backend_deps,
install: false,
implicit_include_directories: false,
Expand Down
5 changes: 4 additions & 1 deletion examples/simple_playback_sine.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ int main(int argc, char** argv)
ma_waveform sineWave;
ma_device_config deviceConfig;
ma_device device;
ma_device_info deviceInfo;
ma_waveform_config sineWaveConfig;

deviceConfig = ma_device_config_init(ma_device_type_playback);
Expand All @@ -57,7 +58,9 @@ int main(int argc, char** argv)
return -4;
}

printf("Device Name: %s\n", device.playback.name);
if (ma_device_get_info(&device, ma_device_type_playback, &deviceInfo) == MA_SUCCESS) {
printf("Device Name: %s\n", deviceInfo.name);
}

sineWaveConfig = ma_waveform_config_init(device.playback.format, device.playback.channels, device.sampleRate, ma_waveform_type_sine, 0.2, 220);
ma_waveform_init(&sineWaveConfig, &sineWave);
Expand Down
12 changes: 10 additions & 2 deletions extras/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ opusfile_dep = dependency('opusfile', required: get_option('libopus'))
if opus_dep.found() and opusfile_dep.found()
ma_all_libs += static_library(
'miniaudio_libopus',
'miniaudio_libopus.c',
configure_file(
input: 'miniaudio_libopus.h',
output: 'miniaudio_libopus.c',
copy: true,
),
dependencies: ma_sys_deps + [opus_dep, opusfile_dep],
c_args: ma_extras_c_args,
install: false,
Expand All @@ -27,7 +31,11 @@ vorbisfile_dep = dependency('vorbisfile', required: get_option('libvorbis'))
if vorbis_dep.found() and vorbisfile_dep.found()
ma_all_libs += static_library(
'miniaudio_libvorbis',
'miniaudio_libvorbis.c',
configure_file(
input: 'miniaudio_libvorbis.h',
output: 'miniaudio_libvorbis.c',
copy: true,
),
dependencies: ma_sys_deps + [vorbis_dep, vorbisfile_dep],
c_args: ma_extras_c_args,
install: false,
Expand Down
16 changes: 16 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ if host_system in [
'dragonfly',
'android',
'darwin',
'emscripten',
]
if runtime_linking.enabled()
ma_sys_deps += dependency('dl')
Expand Down Expand Up @@ -226,6 +227,21 @@ if runtime_linking.disabled()
ma_backend_deps += dependency('OpenSLES')
endif

# TODO: should we support non-wasm webaudio builds?
if 'webaudio' in backends and host_system == 'emscripten'
add_project_arguments(
'-sWASM_WORKERS=1',
'-DMA_ENABLE_AUDIO_WORKLETS',
language: ['c', 'cpp'],
)
add_project_link_arguments(
'-sAUDIO_WORKLET=1',
'-sWASM_WORKERS=1',
'-sASYNCIFY',
language: ['c', 'cpp'],
)
endif

if 'sdl' in backends
ma_backend_deps += sdl_dep
endif
Expand Down

0 comments on commit a3dbebd

Please sign in to comment.