Files
InstanceBrick--nightcap/cmake/MocktailAudio.cmake
T
2026-08-26 02:29:12 +03:00

205 lines
6.4 KiB
CMake

# Copyright 2026 Mocktail Project Authors
# Licensed under the Apache License, Version 2.0.
include_guard(GLOBAL)
get_filename_component(MOCKTAIL_AUDIO_ROOT
"${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE
)
# SDL 3.4 provides the callback needed for OpenSL buffer completion.
find_package(SDL3 3.4 REQUIRED CONFIG)
find_package(Threads REQUIRED)
add_library(mocktail_audio_core STATIC
${MOCKTAIL_AUDIO_ROOT}/src/audio/audio_sink.cc
)
target_include_directories(mocktail_audio_core PUBLIC
${MOCKTAIL_AUDIO_ROOT}/include
)
target_compile_features(mocktail_audio_core PUBLIC cxx_std_17)
set_target_properties(mocktail_audio_core PROPERTIES
POSITION_INDEPENDENT_CODE ON
)
add_library(Mocktail::AudioCore ALIAS mocktail_audio_core)
add_library(mocktail_audio_sdl SHARED
${MOCKTAIL_AUDIO_ROOT}/src/audio/sdl_audio_capture.cc
${MOCKTAIL_AUDIO_ROOT}/src/audio/sdl_audio_sink.cc
)
target_include_directories(mocktail_audio_sdl PUBLIC
${MOCKTAIL_AUDIO_ROOT}/include
)
target_link_libraries(mocktail_audio_sdl PUBLIC
Mocktail::AudioCore
SDL3::SDL3
)
target_compile_features(mocktail_audio_sdl PUBLIC cxx_std_17)
set_target_properties(mocktail_audio_sdl PROPERTIES
POSITION_INDEPENDENT_CODE ON
BUILD_RPATH_USE_ORIGIN TRUE
BUILD_RPATH "\$ORIGIN"
INSTALL_RPATH "\$ORIGIN"
)
add_library(Mocktail::AudioSdl ALIAS mocktail_audio_sdl)
add_library(mocktail_audio_fmod_java_runtime STATIC
${MOCKTAIL_AUDIO_ROOT}/src/audio/fmod_java_audio_runtime.cc
)
target_include_directories(mocktail_audio_fmod_java_runtime PUBLIC
${MOCKTAIL_AUDIO_ROOT}/include
)
target_link_libraries(mocktail_audio_fmod_java_runtime PUBLIC
Mocktail::AudioSdl
Threads::Threads
)
target_compile_features(mocktail_audio_fmod_java_runtime PUBLIC cxx_std_17)
set_target_properties(mocktail_audio_fmod_java_runtime PROPERTIES
POSITION_INDEPENDENT_CODE ON
)
add_library(Mocktail::FmodJavaAudioRuntime ALIAS
mocktail_audio_fmod_java_runtime
)
add_library(mocktail_fmod_jni_audio_bridge STATIC
${MOCKTAIL_AUDIO_ROOT}/src/audio/fmod_jni_audio_bridge.cc
${MOCKTAIL_AUDIO_ROOT}/src/audio/webrtc_jni_audio_bridge.cc
)
target_include_directories(mocktail_fmod_jni_audio_bridge PUBLIC
${MOCKTAIL_AUDIO_ROOT}/include
)
target_link_libraries(mocktail_fmod_jni_audio_bridge PUBLIC
Mocktail::FmodJavaAudioRuntime
Mocktail::LegacyJni
)
target_compile_features(mocktail_fmod_jni_audio_bridge PUBLIC cxx_std_17)
set_target_properties(mocktail_fmod_jni_audio_bridge PROPERTIES
POSITION_INDEPENDENT_CODE ON
)
add_library(Mocktail::FmodJniAudioBridge ALIAS
mocktail_fmod_jni_audio_bridge
)
add_library(mocktail_audio_opensl_adapter STATIC
${MOCKTAIL_AUDIO_ROOT}/src/audio/opensl_simple_buffer_queue.cc
)
target_include_directories(mocktail_audio_opensl_adapter PUBLIC
${MOCKTAIL_AUDIO_ROOT}/include
)
target_link_libraries(mocktail_audio_opensl_adapter PUBLIC
Mocktail::AudioCore
Threads::Threads
)
target_compile_features(mocktail_audio_opensl_adapter PUBLIC cxx_std_17)
set_target_properties(mocktail_audio_opensl_adapter PROPERTIES
POSITION_INDEPENDENT_CODE ON
)
add_library(Mocktail::AudioOpenSlAdapter ALIAS
mocktail_audio_opensl_adapter
)
add_library(mocktail_audio INTERFACE)
target_link_libraries(mocktail_audio INTERFACE
Mocktail::AudioSdl
Mocktail::AudioOpenSlAdapter
)
add_library(Mocktail::Audio ALIAS mocktail_audio)
# Desktop builds use opensl_abi.h when NDK headers are unavailable.
find_path(MOCKTAIL_OPENSL_CORE_INCLUDE_DIR SLES/OpenSLES.h)
find_path(MOCKTAIL_OPENSL_ANDROID_INCLUDE_DIR SLES/OpenSLES_Android.h)
if(MOCKTAIL_OPENSL_CORE_INCLUDE_DIR AND MOCKTAIL_OPENSL_ANDROID_INCLUDE_DIR)
target_include_directories(mocktail_audio_opensl_adapter PUBLIC
${MOCKTAIL_OPENSL_CORE_INCLUDE_DIR}
${MOCKTAIL_OPENSL_ANDROID_INCLUDE_DIR}
)
target_compile_definitions(mocktail_audio_opensl_adapter PUBLIC
MOCKTAIL_USE_SYSTEM_OPENSL_HEADERS=1
)
message(STATUS "Mocktail audio: using system Android OpenSL headers")
else()
message(STATUS
"Mocktail audio: Android OpenSL headers unavailable; using minimal queue ABI boundary"
)
endif()
add_library(mocktail_opensles SHARED
${MOCKTAIL_AUDIO_ROOT}/src/audio/opensl_playback_runtime.cc
)
target_include_directories(mocktail_opensles PUBLIC
${MOCKTAIL_AUDIO_ROOT}/include
)
target_link_libraries(mocktail_opensles PRIVATE
Mocktail::Audio
)
target_compile_features(mocktail_opensles PRIVATE cxx_std_17)
set_target_properties(mocktail_opensles PROPERTIES
OUTPUT_NAME OpenSLES
PREFIX "lib"
SUFFIX ".so"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN YES
BUILD_RPATH_USE_ORIGIN TRUE
BUILD_RPATH "\$ORIGIN"
INSTALL_RPATH "\$ORIGIN"
)
target_link_options(mocktail_opensles PRIVATE
"-Wl,-soname,libOpenSLES.so"
"-Wl,--exclude-libs,ALL"
)
if(BUILD_TESTING AND TARGET GTest::gtest_main)
add_executable(audio_foundation_test
${MOCKTAIL_AUDIO_ROOT}/tests/audio_foundation_test.cc
${MOCKTAIL_AUDIO_ROOT}/stubs/libopensl_stub.cc
)
target_link_libraries(audio_foundation_test PRIVATE
Mocktail::Audio
GTest::gtest_main
)
target_compile_features(audio_foundation_test PRIVATE cxx_std_17)
include(GoogleTest)
gtest_discover_tests(audio_foundation_test
PROPERTIES ENVIRONMENT "SDL_AUDIODRIVER=dummy"
)
add_executable(opensl_playback_runtime_test
${MOCKTAIL_AUDIO_ROOT}/tests/opensl_playback_runtime_test.cc
)
target_link_libraries(opensl_playback_runtime_test PRIVATE
mocktail_opensles
Mocktail::AudioSdl
GTest::gtest_main
)
target_compile_features(opensl_playback_runtime_test PRIVATE cxx_std_17)
gtest_discover_tests(opensl_playback_runtime_test
PROPERTIES ENVIRONMENT "SDL_AUDIODRIVER=dummy"
)
add_executable(fmod_java_audio_runtime_test
${MOCKTAIL_AUDIO_ROOT}/tests/fmod_java_audio_runtime_test.cc
)
target_link_libraries(fmod_java_audio_runtime_test PRIVATE
Mocktail::FmodJavaAudioRuntime
GTest::gtest_main
Threads::Threads
)
target_compile_features(fmod_java_audio_runtime_test PRIVATE cxx_std_17)
gtest_discover_tests(fmod_java_audio_runtime_test
PROPERTIES ENVIRONMENT "SDL_AUDIODRIVER=dummy"
)
add_executable(fmod_jni_audio_bridge_test
${MOCKTAIL_AUDIO_ROOT}/tests/fmod_jni_audio_bridge_test.cc
)
target_link_libraries(fmod_jni_audio_bridge_test PRIVATE
Mocktail::FmodJniAudioBridge
GTest::gtest_main
)
target_compile_features(fmod_jni_audio_bridge_test PRIVATE cxx_std_17)
gtest_discover_tests(fmod_jni_audio_bridge_test
PROPERTIES ENVIRONMENT "SDL_AUDIODRIVER=dummy"
)
endif()