diff --git a/CMakeLists.txt b/CMakeLists.txt index 24ed3fc450..6a2d955413 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -421,19 +421,6 @@ if (OPENGL_GL) include_directories(${OPENGL_INCLUDE_DIR}) endif() -if(ENABLE_AO) - check_lib(AO ao ao QUIET) - if(AO_FOUND) - add_definitions(-DHAVE_AO=1) - message(STATUS "ao found, enabling ao sound backend") - else() - add_definitions(-DHAVE_AO=0) - message(STATUS "ao NOT found, disabling ao sound backend") - endif() -else() - message(STATUS "ao explicitly disabled, disabling ao sound backend") -endif() - if(ENABLE_BLUEZ) check_lib(BLUEZ bluez bluez QUIET) if(BLUEZ_FOUND) @@ -460,23 +447,6 @@ else() message(STATUS "PulseAudio explicitly disabled, disabling PulseAudio sound backend") endif() -if(ENABLE_OPENAL) - if(WIN32) - set(ENV{OPENALDIR} ${CMAKE_CURRENT_LIST_DIR}/Externals/OpenAL) - endif() - find_package(OpenAL) - if(OPENAL_FOUND) - add_definitions(-DHAVE_OPENAL=1) - include_directories(${OPENAL_INCLUDE_DIR}) - message(STATUS "OpenAL found, enabling OpenAL sound backend") - else() - add_definitions(-DHAVE_OPENAL=0) - message(STATUS "OpenAL NOT found, disabling OpenAL sound backend") - endif() -else() - message(STATUS "OpenAL explicitly disabled, disabling OpenAL sound backend") -endif() - if(ENABLE_LLVM) find_package(LLVM) if (LLVM_FOUND) @@ -691,6 +661,7 @@ else() set(PNG png) endif() +find_package(OpenAL) if(OPENAL_FOUND) if(NOT APPLE) check_lib(SOUNDTOUCH soundtouch SoundTouch soundtouch/SoundTouch.h QUIET) diff --git a/CMakeTests/FindAO.cmake b/CMakeTests/FindAO.cmake new file mode 100644 index 0000000000..e091eeb4dc --- /dev/null +++ b/CMakeTests/FindAO.cmake @@ -0,0 +1,42 @@ +# - Find AO library +# This module defines +# AO_INCLUDE_DIR +# AO_LIBRARIES +# AO_FOUND +# +# vim: expandtab sw=4 ts=4 sts=4: + +include(FindPkgConfig) +pkg_check_modules (AO_PKG QUIET ao) + +find_path(AO_INCLUDE_DIR NAMES ao/ao.h + PATHS + ${AO_PKG_INCLUDE_DIRS} + /usr/include/ao + /usr/include + /usr/local/include/ao + /usr/local/include +) + +find_library(AO_LIBRARIES NAMES ao + PATHS + ${AO_PKG_LIBRARY_DIRS} + /usr/lib + /usr/local/lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(AO + REQUIRED_VARS AO_LIBRARIES AO_INCLUDE_DIR) + +if(AO_FOUND) + if(NOT TARGET AO::AO) + add_library(AO::AO UNKNOWN IMPORTED) + set_target_properties(AO::AO PROPERTIES + IMPORTED_LOCATION ${AO_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${AO_INCLUDE_DIR} + ) + endif() +endif() + +mark_as_advanced(AO_INCLUDE_DIR AO_LIBRARIES) diff --git a/CMakeTests/FindOpenAL.cmake b/CMakeTests/FindOpenAL.cmake new file mode 100644 index 0000000000..9fc2fadad1 --- /dev/null +++ b/CMakeTests/FindOpenAL.cmake @@ -0,0 +1,118 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindOpenAL +# ---------- +# +# +# +# Locate OpenAL This module defines OPENAL_LIBRARY OPENAL_FOUND, if +# false, do not try to link to OpenAL OPENAL_INCLUDE_DIR, where to find +# the headers +# +# $OPENALDIR is an environment variable that would correspond to the +# ./configure --prefix=$OPENALDIR used in building OpenAL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module. + +# This makes the presumption that you are include al.h like +# #include "al.h" +# and not +# #include +# The reason for this is that the latter is not entirely portable. +# Windows/Creative Labs does not by default put their headers in AL/ and +# OS X uses the convention . +# +# For Windows, Creative Labs seems to have added a registry key for their +# OpenAL 1.1 installer. I have added that key to the list of search paths, +# however, the key looks like it could be a little fragile depending on +# if they decide to change the 1.00.0000 number for bug fix releases. +# Also, they seem to have laid down groundwork for multiple library platforms +# which puts the library in an extra subdirectory. Currently there is only +# Win32 and I have hardcoded that here. This may need to be adjusted as +# platforms are introduced. +# The OpenAL 1.0 installer doesn't seem to have a useful key I can use. +# I do not know if the Nvidia OpenAL SDK has a registry key. +# +# For OS X, remember that OpenAL was added by Apple in 10.4 (Tiger). +# To support the framework, I originally wrote special framework detection +# code in this module which I have now removed with CMake's introduction +# of native support for frameworks. +# In addition, OpenAL is open source, and it is possible to compile on Panther. +# Furthermore, due to bugs in the initial OpenAL release, and the +# transition to OpenAL 1.1, it is common to need to override the built-in +# framework. +# Per my request, CMake should search for frameworks first in +# the following order: +# ~/Library/Frameworks/OpenAL.framework/Headers +# /Library/Frameworks/OpenAL.framework/Headers +# /System/Library/Frameworks/OpenAL.framework/Headers +# +# On OS X, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# OPENAL_LIBRARY to override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. + +find_path(OPENAL_INCLUDE_DIR al.h + HINTS + ENV OPENALDIR + PATH_SUFFIXES include/AL include/OpenAL include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir] +) + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_OpenAL_ARCH_DIR libs/Win64) +else() + set(_OpenAL_ARCH_DIR libs/Win32) +endif() + +find_library(OPENAL_LIBRARY + NAMES OpenAL al openal OpenAL32 + HINTS + ENV OPENALDIR + PATH_SUFFIXES lib64 lib libs64 libs ${_OpenAL_ARCH_DIR} + PATHS + ~/Library/Frameworks + /Library/Frameworks + /sw + /opt/local + /opt/csw + /opt + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir] +) + +unset(_OpenAL_ARCH_DIR) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenAL DEFAULT_MSG OPENAL_LIBRARY OPENAL_INCLUDE_DIR) + +if(OPENAL_FOUND) + if(NOT TARGET OpenAL::OpenAL) + add_library(OpenAL::OpenAL UNKNOWN IMPORTED) + if(OPENAL_LIBRARY MATCHES "/([^/]+)\\.framework$") + set(_al_fw "${OPENAL_LIBRARY}/${CMAKE_MATCH_1}") + if(EXISTS "${_al_fw}.tbd") + set(_al_fw "${_al_fw}.tbd") + endif() + set_target_properties(OpenAL::OpenAL PROPERTIES + IMPORTED_LOCATION "${_al_fw}") + else() + set_target_properties(OpenAL::OpenAL PROPERTIES + IMPORTED_LOCATION "${OPENAL_LIBRARY}") + endif() + set_target_properties(OpenAL::OpenAL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${OPENAL_INCLUDE_DIR} + ) + endif() +endif() + +mark_as_advanced(OPENAL_LIBRARY OPENAL_INCLUDE_DIR) diff --git a/Source/Core/AudioCommon/CMakeLists.txt b/Source/Core/AudioCommon/CMakeLists.txt index c5b58c23be..cfcd4be569 100644 --- a/Source/Core/AudioCommon/CMakeLists.txt +++ b/Source/Core/AudioCommon/CMakeLists.txt @@ -29,14 +29,35 @@ else() message(STATUS "ALSA explicitly disabled, disabling ALSA sound backend") endif() -if(AO_FOUND) - target_sources(audiocommon PRIVATE AOSoundStream.cpp) - target_link_libraries(audiocommon PRIVATE ${AO_LIBRARIES}) +if(ENABLE_AO) + find_package(AO) + if(AO_FOUND) + message(STATUS "ao found, enabling ao sound backend") + target_sources(audiocommon PRIVATE AOSoundStream.cpp) + target_link_libraries(audiocommon PRIVATE AO::AO) + target_compile_definitions(audiocommon PRIVATE HAVE_AO=1) + else() + message(STATUS "ao NOT found, disabling ao sound backend") + endif() +else() + message(STATUS "ao explicitly disabled, disabling ao sound backend") endif() -if(OPENAL_FOUND) - target_sources(audiocommon PRIVATE OpenALStream.cpp aldlist.cpp) - target_link_libraries(audiocommon PRIVATE ${OPENAL_LIBRARY} SoundTouch) +if(ENABLE_OPENAL) + if(WIN32) + set(ENV{OPENALDIR} ${PROJECT_SOURCE_DIR}/Externals/OpenAL) + endif() + find_package(OpenAL) + if(OPENAL_FOUND) + message(STATUS "OpenAL found, enabling OpenAL sound backend") + target_sources(audiocommon PRIVATE OpenALStream.cpp aldlist.cpp) + target_link_libraries(audiocommon PRIVATE OpenAL::OpenAL SoundTouch) + target_compile_definitions(audiocommon PRIVATE HAVE_OPENAL=1) + else() + message(STATUS "OpenAL NOT found, disabling OpenAL sound backend") + endif() +else() + message(STATUS "OpenAL explicitly disabled, disabling OpenAL sound backend") endif() if(PULSEAUDIO_FOUND)