add_library(audiocommon
  AudioCommon.cpp
  AudioCommon.h
  CubebStream.h
  Enums.h
  Mixer.cpp
  Mixer.h
  SurroundDecoder.cpp
  SurroundDecoder.h
  NullSoundStream.cpp
  NullSoundStream.h
  WaveFile.cpp
  WaveFile.h
)

if(ENABLE_CUBEB)
  message(STATUS "Cubeb found, enabling Cubeb sound backend")
  target_sources(audiocommon PRIVATE
    CubebStream.cpp
    CubebUtils.cpp
    CubebUtils.h
  )
  target_link_libraries(audiocommon PRIVATE cubeb)
endif()

if(ANDROID)
  find_package(OpenSLES)
  if(OPENSLES_FOUND)
    message(STATUS "OpenSLES found, enabling OpenSLES sound backend")
    target_sources(audiocommon PRIVATE
      OpenSLESStream.cpp
      OpenSLESStream.h
    )
    target_link_libraries(audiocommon PRIVATE OpenSLES::OpenSLES)
    target_compile_definitions(audiocommon PRIVATE HAVE_OPENSL_ES=1)
  endif()
endif()

if(ENABLE_ALSA)
  find_package(ALSA)
  if(ALSA_FOUND)
    message(STATUS "ALSA found, enabling ALSA sound backend")
    target_sources(audiocommon PRIVATE
      AlsaSoundStream.cpp
      AlsaSoundStream.h
    )
    target_link_libraries(audiocommon PRIVATE ALSA::ALSA)
    target_compile_definitions(audiocommon PRIVATE HAVE_ALSA=1)
  else()
    message(STATUS "ALSA NOT found, disabling ALSA sound backend")
  endif()
else()
  message(STATUS "ALSA explicitly disabled, disabling ALSA sound backend")
endif()

if(ENABLE_PULSEAUDIO)
  # PulseAudio ships with a PulseAudioConfig.cmake with no imported target
  # So we use our own FindPulseAudio instead with "MODULE"
  find_package(PulseAudio MODULE QUIET)
  if(PulseAudio_FOUND)
    message(STATUS "PulseAudio found, enabling PulseAudio sound backend")
    target_sources(audiocommon PRIVATE
      PulseAudioStream.cpp
      PulseAudioStream.h
    )
    target_link_libraries(audiocommon PRIVATE PulseAudio::PulseAudio)
    target_compile_definitions(audiocommon PRIVATE HAVE_PULSEAUDIO=1)
  else()
    message(STATUS "PulseAudio NOT found, disabling PulseAudio sound backend")
  endif()
else()
  message(STATUS "PulseAudio explicitly disabled, disabling PulseAudio sound backend")
endif()

if(WIN32)
  target_sources(audiocommon PRIVATE
    # Dolphin loads openal32.dll at runtime
    OpenALStream.cpp
    OpenALStream.h

    WASAPIStream.cpp
    WASAPIStream.h
  )
endif()

target_link_libraries(audiocommon
PUBLIC
  common

PRIVATE
  FreeSurround)

if(ENABLE_CUBEB)
  target_link_libraries(audiocommon PRIVATE cubeb::cubeb)
endif()

if(MSVC)
  # Add precompiled header
  target_link_libraries(audiocommon PRIVATE use_pch)
endif()
