add_library(audiocommon
  AudioCommon.cpp
  AudioStretcher.cpp
  CubebStream.cpp
  CubebUtils.cpp
  DPL2Decoder.cpp
  Mixer.cpp
  NullSoundStream.cpp
  WaveFile.cpp
)

find_package(OpenSLES)
if(OPENSLES_FOUND)
  message(STATUS "OpenSLES found, enabling OpenSLES sound backend")
  target_sources(audiocommon PRIVATE OpenSLESStream.cpp)
  target_link_libraries(audiocommon PRIVATE OpenSLES::OpenSLES)
endif()

if(ENABLE_ALSA)
  find_package(ALSA)
  if(ALSA_FOUND)
    message(STATUS "ALSA found, enabling ALSA sound backend")
    target_sources(audiocommon PRIVATE AlsaSoundStream.cpp)
    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)
    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 WASAPIStream.cpp)
  target_sources(audiocommon PRIVATE XAudio2Stream.cpp)

  add_library(audiocommon_xaudio27 "XAudio2_7Stream.cpp")
  target_include_directories(audiocommon_xaudio27 PRIVATE
    ${PROJECT_SOURCE_DIR}/Externals
    ${PROJECT_SOURCE_DIR}/Externals/XAudio2_7
  )
  target_link_libraries(audiocommon PRIVATE audiocommon_xaudio27)

  set(ENV{OPENALDIR} ${PROJECT_SOURCE_DIR}/Externals/OpenAL)
  # Dolphin loads openal32.dll at runtime
  find_package(OpenAL)
  if(OPENAL_FOUND)
    message(STATUS "OpenAL found, enabling OpenAL sound backend")
    target_sources(audiocommon PRIVATE OpenALStream.cpp)
    target_link_libraries(audiocommon PRIVATE OpenAL::OpenAL)
  else()
    message(STATUS "OpenAL NOT found in Externals")
  endif()
endif()

target_link_libraries(audiocommon PRIVATE cubeb SoundTouch)
