file(GLOB HEADERS "*.h") file(GLOB SRC "*.cpp") set(_openal_config_required) set(_openal_config_quiet QUIET) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") # CONFIG mode should be REQUIRED (to avoid the deprecated OpenAL.framework) set(_openal_config_required REQUIRED) set(_openal_config_quiet) endif() find_package(OpenAL CONFIG ${_openal_config_quiet} ${_openal_config_required}) # explicitly try via CONFIG mode first if (NOT TARGET OpenAL::OpenAL) find_package(OpenAL MODULE REQUIRED) message(STATUS "Found OpenAL using FindModule") # Since FindOpenAL.cmake may not define an imported target, do it here if (NOT TARGET OpenAL::OpenAL) add_library(OpenAL::OpenAL UNKNOWN IMPORTED) set_target_properties(OpenAL::OpenAL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${OPENAL_INCLUDE_DIR} IMPORTED_LOCATION ${OPENAL_LIBRARY} ) endif() endif() find_package(OggVorbis REQUIRED) find_package(Ogg REQUIRED) find_package(Opus REQUIRED) INCLUDE(CMakePushCheckState) INCLUDE(CheckIncludeFileCXX) get_target_property(_openal_includes OpenAL::OpenAL INTERFACE_INCLUDE_DIRECTORIES) cmake_push_check_state(RESET) set(CMAKE_REQUIRED_INCLUDES ${_openal_includes}) message(STATUS "OpenAL INTERFACE_INCLUDE_DIRECTORIES = \"${_openal_includes}\"") CHECK_INCLUDE_FILE_CXX("AL/alext.h" HAVE_OPENAL_ALEXT_H) cmake_pop_check_state() add_library(sound STATIC ${HEADERS} ${SRC}) set_property(TARGET sound PROPERTY FOLDER "lib") include(WZTargetConfiguration) WZ_TARGET_CONFIGURATION(sound) if (HAVE_OPENAL_ALEXT_H) target_compile_definitions(sound PRIVATE "-DHAVE_OPENAL_ALEXT_H") endif() target_include_directories(sound PRIVATE "${OGGVORBIS_INCLUDE_DIR}") target_link_libraries(sound PRIVATE framework nlohmann_json ${OGGVORBIS_LIBRARIES}) target_link_libraries(sound PRIVATE Ogg::ogg Opus::opus) target_link_libraries(sound PUBLIC optional-lite) target_link_libraries(sound PUBLIC OpenAL::OpenAL) # Opusfile find_package(Opusfile QUIET) if (NOT WZ_FORCE_MINIMAL_OPUSFILE AND Opusfile_FOUND) # Link the found Opusfile message(STATUS "Found Opusfile library: ${OPUSFILE_LIBRARY}") target_link_libraries(sound PRIVATE Opus::opusfile) else() # Build and link the in-repo Opusfile submodule message(STATUS "Building Opusfile from source") add_library(opusfile STATIC "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opusfile/include/opusfile.h" "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opusfile/src/info.c" "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opusfile/src/internal.c" "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opusfile/src/internal.h" "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opusfile/src/opusfile.c" "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opusfile/src/stream.c" ) # opusfile.h includes "opus_multistream.h" instead of "opus/opus_multistream.h" # so add "opus" subdirectory to fix that set(OPUS_MULTISTREAM_DIR "${Opus_INCLUDE_DIR}/opus") target_include_directories(opusfile PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/opusfile/include" "${OPUS_MULTISTREAM_DIR}") target_link_libraries(opusfile PRIVATE Ogg::ogg Opus::opus) include(CMakePushCheckState) include(CheckSymbolExists) cmake_push_check_state(RESET) include(CheckLibraryExists) check_library_exists(m lrintf "" OP_HAVE_LIBM) if(OP_HAVE_LIBM) target_link_libraries(opusfile PRIVATE ${OGG_LIBRARY} ${Opus_LIBRARY}) list(APPEND CMAKE_REQUIRED_LIBRARIES "m") endif() check_symbol_exists(lrintf "math.h" OP_HAVE_LRINTF) cmake_pop_check_state() if(OP_HAVE_LRINTF) target_compile_definitions(opusfile PRIVATE OP_HAVE_LRINTF) endif() if(NOT MSVC) set(_supported_opusfile_c_compiler_flags "") # -Wconditional-uninitialized check_compiler_flags_output("-Werror -Wno-conditional-uninitialized -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wno-conditional-uninitialized" OUTPUT_VARIABLE _supported_opusfile_c_compiler_flags APPEND) if (NOT _supported_opusfile_c_compiler_flags STREQUAL "") string(REPLACE " " ";" _supported_opusfile_c_compiler_flags "${_supported_opusfile_c_compiler_flags}") target_compile_options(opusfile PRIVATE ${_supported_opusfile_c_compiler_flags}) endif() endif() set_property(TARGET opusfile PROPERTY FOLDER "3rdparty") target_link_libraries(sound PRIVATE opusfile) endif()