From f1ba7832a57e21381a49623c665a47d4c9859afe Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sun, 5 Feb 2017 00:18:59 +0100 Subject: [PATCH 1/7] cmake: Reindent AudioCommon --- Source/Core/AudioCommon/CMakeLists.txt | 50 +++++++++++++------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index cd852e0366..0d4521af4e 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -1,50 +1,52 @@ -set(SRCS AudioCommon.cpp - DPL2Decoder.cpp - Mixer.cpp - WaveFile.cpp - NullSoundStream.cpp) +set(SRCS + AudioCommon.cpp + DPL2Decoder.cpp + Mixer.cpp + WaveFile.cpp + NullSoundStream.cpp +) set(LIBS "") find_package(OpenSLES) if(OPENSLES_FOUND) - message(STATUS "OpenSLES found, enabling OpenSLES sound backend") - set(SRCS ${SRCS} OpenSLESStream.cpp) - set(LIBS ${LIBS} OpenSLES::OpenSLES) + message(STATUS "OpenSLES found, enabling OpenSLES sound backend") + set(SRCS ${SRCS} OpenSLESStream.cpp) + set(LIBS ${LIBS} OpenSLES::OpenSLES) endif() if(ALSA_FOUND) - set(SRCS ${SRCS} AlsaSoundStream.cpp) - set(LIBS ${LIBS} ${ALSA_LIBRARIES}) + set(SRCS ${SRCS} AlsaSoundStream.cpp) + set(LIBS ${LIBS} ${ALSA_LIBRARIES}) endif() if(AO_FOUND) - set(SRCS ${SRCS} AOSoundStream.cpp) - set(LIBS ${LIBS} ${AO_LIBRARIES}) + set(SRCS ${SRCS} AOSoundStream.cpp) + set(LIBS ${LIBS} ${AO_LIBRARIES}) endif() if(OPENAL_FOUND) - set(SRCS ${SRCS} OpenALStream.cpp aldlist.cpp) - set(LIBS ${LIBS} ${OPENAL_LIBRARY} SoundTouch ) + set(SRCS ${SRCS} OpenALStream.cpp aldlist.cpp) + set(LIBS ${LIBS} ${OPENAL_LIBRARY} SoundTouch ) endif() if(PULSEAUDIO_FOUND) - set(SRCS ${SRCS} PulseAudioStream.cpp) - set(LIBS ${LIBS} ${PULSEAUDIO_LIBRARIES}) + set(SRCS ${SRCS} PulseAudioStream.cpp) + set(LIBS ${LIBS} ${PULSEAUDIO_LIBRARIES}) endif() if(WIN32) - set(SRCS ${SRCS} XAudio2Stream.cpp) + set(SRCS ${SRCS} XAudio2Stream.cpp) - add_dolphin_library(audiocommon_xaudio27 "XAudio2_7Stream.cpp" "${LIBS}") - target_include_directories(audiocommon_xaudio27 PRIVATE - ${PROJECT_SOURCE_DIR}/Externals - ${PROJECT_SOURCE_DIR}/Externals/XAudio2_7 - ) - list(APPEND LIBS audiocommon_xaudio27) + add_dolphin_library(audiocommon_xaudio27 "XAudio2_7Stream.cpp" "${LIBS}") + target_include_directories(audiocommon_xaudio27 PRIVATE + ${PROJECT_SOURCE_DIR}/Externals + ${PROJECT_SOURCE_DIR}/Externals/XAudio2_7 + ) + list(APPEND LIBS audiocommon_xaudio27) elseif(APPLE) - set(SRCS ${SRCS} CoreAudioSoundStream.cpp) + set(SRCS ${SRCS} CoreAudioSoundStream.cpp) endif() From ee8a21f1d0a0a0e63e996ae1f8e1aa03513dc22a Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sun, 5 Feb 2017 00:33:53 +0100 Subject: [PATCH 2/7] cmake: In AudioCommon, append sources and dependencies to a real target --- Source/Core/AudioCommon/CMakeLists.txt | 29 +++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index 0d4521af4e..51617eede9 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -6,48 +6,47 @@ set(SRCS NullSoundStream.cpp ) -set(LIBS "") +add_dolphin_library(audiocommon "${SRCS}" "") find_package(OpenSLES) if(OPENSLES_FOUND) message(STATUS "OpenSLES found, enabling OpenSLES sound backend") - set(SRCS ${SRCS} OpenSLESStream.cpp) - set(LIBS ${LIBS} OpenSLES::OpenSLES) + target_sources(audiocommon PRIVATE OpenSLESStream.cpp) + target_link_libraries(audiocommon PRIVATE OpenSLES::OpenSLES) endif() if(ALSA_FOUND) - set(SRCS ${SRCS} AlsaSoundStream.cpp) - set(LIBS ${LIBS} ${ALSA_LIBRARIES}) + target_sources(audiocommon PRIVATE AlsaSoundStream.cpp) + target_link_libraries(audiocommon PRIVATE ${ALSA_LIBRARIES}) endif() if(AO_FOUND) - set(SRCS ${SRCS} AOSoundStream.cpp) - set(LIBS ${LIBS} ${AO_LIBRARIES}) + target_sources(audiocommon PRIVATE AOSoundStream.cpp) + target_link_libraries(audiocommon PRIVATE ${AO_LIBRARIES}) endif() if(OPENAL_FOUND) - set(SRCS ${SRCS} OpenALStream.cpp aldlist.cpp) - set(LIBS ${LIBS} ${OPENAL_LIBRARY} SoundTouch ) + target_sources(audiocommon PRIVATE OpenALStream.cpp aldlist.cpp) + target_link_libraries(audiocommon PRIVATE ${OPENAL_LIBRARY} SoundTouch) endif() if(PULSEAUDIO_FOUND) - set(SRCS ${SRCS} PulseAudioStream.cpp) - set(LIBS ${LIBS} ${PULSEAUDIO_LIBRARIES}) + target_sources(audiocommon PRIVATE PulseAudioStream.cpp) + target_link_libraries(audiocommon PRIVATE ${PULSEAUDIO_LIBRARIES}) endif() if(WIN32) - set(SRCS ${SRCS} XAudio2Stream.cpp) + target_sources(audiocommon PRIVATE XAudio2Stream.cpp) add_dolphin_library(audiocommon_xaudio27 "XAudio2_7Stream.cpp" "${LIBS}") target_include_directories(audiocommon_xaudio27 PRIVATE ${PROJECT_SOURCE_DIR}/Externals ${PROJECT_SOURCE_DIR}/Externals/XAudio2_7 ) - list(APPEND LIBS audiocommon_xaudio27) + target_link_libraries(audiocommon PRIVATE audiocommon_xaudio27) elseif(APPLE) - set(SRCS ${SRCS} CoreAudioSoundStream.cpp) + target_sources(audiocommon PRIVATE CoreAudioSoundStream.cpp) endif() -add_dolphin_library(audiocommon "${SRCS}" "${LIBS}") From 31dfaafe0b2b99e7724f4c9c6b40e7021554ef11 Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sun, 5 Feb 2017 00:57:42 +0100 Subject: [PATCH 3/7] AudioCommon: Remove checks against NullSound::isValid() The NullAudio backend is guaranteed to be compiled in, so no reason to check it. In addition to that, if it wasn't valid, it wouldn't work as a fallback in InitSoundStream as there are uses to g_sound_stream later. --- Source/Core/AudioCommon/AudioCommon.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Source/Core/AudioCommon/AudioCommon.cpp b/Source/Core/AudioCommon/AudioCommon.cpp index 0d0309a5c0..1ffb323a3f 100644 --- a/Source/Core/AudioCommon/AudioCommon.cpp +++ b/Source/Core/AudioCommon/AudioCommon.cpp @@ -33,7 +33,7 @@ void InitSoundStream() std::string backend = SConfig::GetInstance().sBackend; if (backend == BACKEND_OPENAL && OpenALStream::isValid()) g_sound_stream = std::make_unique(); - else if (backend == BACKEND_NULLSOUND && NullSound::isValid()) + else if (backend == BACKEND_NULLSOUND) g_sound_stream = std::make_unique(); else if (backend == BACKEND_XAUDIO2) { @@ -53,7 +53,7 @@ void InitSoundStream() else if (backend == BACKEND_OPENSLES && OpenSLESStream::isValid()) g_sound_stream = std::make_unique(); - if (!g_sound_stream && NullSound::isValid()) + if (!g_sound_stream) { WARN_LOG(AUDIO, "Could not initialize backend %s, using %s instead.", backend.c_str(), BACKEND_NULLSOUND); @@ -96,8 +96,7 @@ std::vector GetSoundBackends() { std::vector backends; - if (NullSound::isValid()) - backends.push_back(BACKEND_NULLSOUND); + backends.push_back(BACKEND_NULLSOUND); if (XAudio2_7::isValid() || XAudio2::isValid()) backends.push_back(BACKEND_XAUDIO2); if (AOSound::isValid()) From 9ebfaa93249929acb5a31affa75d090fd0dcb734 Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sun, 5 Feb 2017 02:15:38 +0100 Subject: [PATCH 4/7] AudioCommon: Move logic for default sound backend there from ConfigManager This way, we don't have to leak the HAVE_ALSA define there. --- Source/Core/AudioCommon/AudioCommon.cpp | 16 ++++++++++++++++ Source/Core/AudioCommon/AudioCommon.h | 1 + Source/Core/Core/ConfigManager.cpp | 14 +++----------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Source/Core/AudioCommon/AudioCommon.cpp b/Source/Core/AudioCommon/AudioCommon.cpp index 1ffb323a3f..86d3d5943e 100644 --- a/Source/Core/AudioCommon/AudioCommon.cpp +++ b/Source/Core/AudioCommon/AudioCommon.cpp @@ -92,6 +92,22 @@ void ShutdownSoundStream() INFO_LOG(AUDIO, "Done shutting down sound stream"); } +std::string GetDefaultSoundBackend() +{ + std::string backend = BACKEND_NULLSOUND; +#if defined __linux__ + if (AlsaSound::isValid()) + backend = BACKEND_ALSA; +#elif defined __APPLE__ + backend = BACKEND_COREAUDIO; +#elif defined _WIN32 + backend = BACKEND_XAUDIO2; +#elif defined ANDROID + backend = BACKEND_OPENSLES; +#endif + return backend; +} + std::vector GetSoundBackends() { std::vector backends; diff --git a/Source/Core/AudioCommon/AudioCommon.h b/Source/Core/AudioCommon/AudioCommon.h index 249f608aad..8ba06ccac2 100644 --- a/Source/Core/AudioCommon/AudioCommon.h +++ b/Source/Core/AudioCommon/AudioCommon.h @@ -18,6 +18,7 @@ namespace AudioCommon { void InitSoundStream(); void ShutdownSoundStream(); +std::string GetDefaultSoundBackend(); std::vector GetSoundBackends(); bool SupportsDPL2Decoder(const std::string& backend); bool SupportsLatencyControl(const std::string& backend); diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index edb2386bd4..8e7837c90a 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -6,6 +6,8 @@ #include #include +#include "AudioCommon/AudioCommon.h" + #include "Common/CDUtils.h" #include "Common/CommonPaths.h" #include "Common/CommonTypes.h" @@ -613,17 +615,7 @@ void SConfig::LoadDSPSettings(IniFile& ini) dsp->Get("DumpAudio", &m_DumpAudio, false); dsp->Get("DumpAudioSilent", &m_DumpAudioSilent, false); dsp->Get("DumpUCode", &m_DumpUCode, false); -#if defined __linux__ && HAVE_ALSA - dsp->Get("Backend", &sBackend, BACKEND_ALSA); -#elif defined __APPLE__ - dsp->Get("Backend", &sBackend, BACKEND_COREAUDIO); -#elif defined _WIN32 - dsp->Get("Backend", &sBackend, BACKEND_XAUDIO2); -#elif defined ANDROID - dsp->Get("Backend", &sBackend, BACKEND_OPENSLES); -#else - dsp->Get("Backend", &sBackend, BACKEND_NULLSOUND); -#endif + dsp->Get("Backend", &sBackend, AudioCommon::GetDefaultSoundBackend()); dsp->Get("Volume", &m_Volume, 100); dsp->Get("CaptureLog", &m_DSPCaptureLog, false); From c3b2039153cbec85be140ab3211780ad1a0ee411 Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sun, 5 Feb 2017 02:33:58 +0100 Subject: [PATCH 5/7] cmake: Import FindALSA from upstream CMake --- CMakeTests/FindALSA.cmake | 52 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 CMakeTests/FindALSA.cmake diff --git a/CMakeTests/FindALSA.cmake b/CMakeTests/FindALSA.cmake new file mode 100644 index 0000000000..fa9a43438b --- /dev/null +++ b/CMakeTests/FindALSA.cmake @@ -0,0 +1,52 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindALSA +# -------- +# +# Find alsa +# +# Find the alsa libraries (asound) +# +# :: +# +# This module defines the following variables: +# ALSA_FOUND - True if ALSA_INCLUDE_DIR & ALSA_LIBRARY are found +# ALSA_LIBRARIES - Set when ALSA_LIBRARY is found +# ALSA_INCLUDE_DIRS - Set when ALSA_INCLUDE_DIR is found +# +# +# +# :: +# +# ALSA_INCLUDE_DIR - where to find asoundlib.h, etc. +# ALSA_LIBRARY - the asound library +# ALSA_VERSION_STRING - the version of alsa found (since CMake 2.8.8) + +find_path(ALSA_INCLUDE_DIR NAMES alsa/asoundlib.h + DOC "The ALSA (asound) include directory" +) + +find_library(ALSA_LIBRARY NAMES asound + DOC "The ALSA (asound) library" +) + +if(ALSA_INCLUDE_DIR AND EXISTS "${ALSA_INCLUDE_DIR}/alsa/version.h") + file(STRINGS "${ALSA_INCLUDE_DIR}/alsa/version.h" alsa_version_str REGEX "^#define[\t ]+SND_LIB_VERSION_STR[\t ]+\".*\"") + + string(REGEX REPLACE "^.*SND_LIB_VERSION_STR[\t ]+\"([^\"]*)\".*$" "\\1" ALSA_VERSION_STRING "${alsa_version_str}") + unset(alsa_version_str) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA + REQUIRED_VARS ALSA_LIBRARY ALSA_INCLUDE_DIR + VERSION_VAR ALSA_VERSION_STRING) + +if(ALSA_FOUND) + set( ALSA_LIBRARIES ${ALSA_LIBRARY} ) + set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} ) +endif() + +mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY) From d615c0f868f93c99a9fe4053b87594f6c8b2d39b Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sun, 5 Feb 2017 02:39:44 +0100 Subject: [PATCH 6/7] cmake: Add imported target to FindALSA --- CMakeTests/FindALSA.cmake | 7 ++++++- Source/Core/AudioCommon/CMakeLists.txt | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeTests/FindALSA.cmake b/CMakeTests/FindALSA.cmake index fa9a43438b..86c1510287 100644 --- a/CMakeTests/FindALSA.cmake +++ b/CMakeTests/FindALSA.cmake @@ -39,7 +39,7 @@ if(ALSA_INCLUDE_DIR AND EXISTS "${ALSA_INCLUDE_DIR}/alsa/version.h") unset(alsa_version_str) endif() -include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA REQUIRED_VARS ALSA_LIBRARY ALSA_INCLUDE_DIR VERSION_VAR ALSA_VERSION_STRING) @@ -47,6 +47,11 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(ALSA if(ALSA_FOUND) set( ALSA_LIBRARIES ${ALSA_LIBRARY} ) set( ALSA_INCLUDE_DIRS ${ALSA_INCLUDE_DIR} ) + add_library(ALSA::ALSA UNKNOWN IMPORTED) + set_target_properties(ALSA::ALSA PROPERTIES + IMPORTED_LOCATION ${ALSA_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${ALSA_INCLUDE_DIR} + ) endif() mark_as_advanced(ALSA_INCLUDE_DIR ALSA_LIBRARY) diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index 51617eede9..63423667d1 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -15,9 +15,10 @@ if(OPENSLES_FOUND) target_link_libraries(audiocommon PRIVATE OpenSLES::OpenSLES) endif() +find_package(ALSA) if(ALSA_FOUND) target_sources(audiocommon PRIVATE AlsaSoundStream.cpp) - target_link_libraries(audiocommon PRIVATE ${ALSA_LIBRARIES}) + target_link_libraries(audiocommon PRIVATE ALSA::ALSA) endif() if(AO_FOUND) From 2fceb016b495b30eceb65b35cde058e773d8de49 Mon Sep 17 00:00:00 2001 From: Florent Castelli Date: Sun, 5 Feb 2017 02:44:03 +0100 Subject: [PATCH 7/7] cmake: Move ALSA detection to AudioCommon --- CMakeLists.txt | 13 ------------- Source/Core/AudioCommon/CMakeLists.txt | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a6d82b0d65..091feb451e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -434,19 +434,6 @@ if (OPENGL_GL) include_directories(${OPENGL_INCLUDE_DIR}) endif() -if(ENABLE_ALSA) - find_package(ALSA) - if(ALSA_FOUND) - add_definitions(-DHAVE_ALSA=1) - message(STATUS "ALSA found, enabling ALSA sound backend") - else() - add_definitions(-DHAVE_ALSA=0) - message(STATUS "ALSA NOT found, disabling ALSA sound backend") - endif() -else() - message(STATUS "ALSA explicitly disabled, disabling ALSA sound backend") -endif() - if(ENABLE_AO) check_lib(AO ao ao QUIET) if(AO_FOUND) diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index 63423667d1..c5b58c23be 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -15,10 +15,18 @@ if(OPENSLES_FOUND) target_link_libraries(audiocommon PRIVATE OpenSLES::OpenSLES) endif() -find_package(ALSA) -if(ALSA_FOUND) - target_sources(audiocommon PRIVATE AlsaSoundStream.cpp) - target_link_libraries(audiocommon PRIVATE ALSA::ALSA) +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(AO_FOUND)