Replace the macOS-only AudioToolbox decoder with mt_host::decode_audio: a RIFF/WAVE PCM parser plus vendored dr_mp3, resampled/remixed to 44.1 kHz stereo float with SDL_ConvertAudioSamples. macOS and Android now share one path; the AudioToolbox link is gone. BGM is no longer cached in clips_ (a 5-minute track is ~100 MB of float): only the playing track is kept, and a new one decodes on a worker thread (the pack read stays on the main thread) so map changes do not stall. host.audio_decode test: synthetic wav layouts + all 1578 pack .wav, 9 pack .mp3 and 25 Client/BGM .mp3 decode (7060 s of audio in ~3.6 s on M2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
102 lines
4.6 KiB
CMake
102 lines
4.6 KiB
CMake
find_package(Vulkan REQUIRED)
|
|
find_package(SDL3 CONFIG REQUIRED)
|
|
find_program(GLSLC glslc REQUIRED)
|
|
|
|
set(MT_NATIVE_VERT_SPV "${CMAKE_CURRENT_BINARY_DIR}/native.vert.spv")
|
|
set(MT_NATIVE_FRAG_SPV "${CMAKE_CURRENT_BINARY_DIR}/native.frag.spv")
|
|
add_custom_command(OUTPUT "${MT_NATIVE_VERT_SPV}"
|
|
COMMAND "${GLSLC}" -fshader-stage=vert "${CMAKE_CURRENT_SOURCE_DIR}/shaders/native.vert" -o "${MT_NATIVE_VERT_SPV}"
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/shaders/native.vert")
|
|
add_custom_command(OUTPUT "${MT_NATIVE_FRAG_SPV}"
|
|
COMMAND "${GLSLC}" -fshader-stage=frag "${CMAKE_CURRENT_SOURCE_DIR}/shaders/native.frag" -o "${MT_NATIVE_FRAG_SPV}"
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/shaders/native.frag")
|
|
add_custom_target(mt_native_shaders DEPENDS "${MT_NATIVE_VERT_SPV}" "${MT_NATIVE_FRAG_SPV}")
|
|
|
|
set(MT_NATIVE_RENDER_SOURCES
|
|
main.cpp
|
|
audio_decode.cpp
|
|
frame_policy.cpp
|
|
host_util.cpp
|
|
input_keymap.cpp
|
|
live_client.cpp
|
|
native_audio.cpp
|
|
render_state.cpp
|
|
texture_decode.cpp
|
|
vulkan_window.cpp
|
|
stb_image_impl.cpp
|
|
dxt.cpp
|
|
)
|
|
if(TARGET port_platform AND TARGET mtpython)
|
|
list(APPEND MT_NATIVE_RENDER_SOURCES
|
|
"${PROJECT_SOURCE_DIR}/tests/port/port_login_flow_server.cpp"
|
|
"${PROJECT_SOURCE_DIR}/tests/port/classic/classic_cipher.cpp"
|
|
)
|
|
endif()
|
|
|
|
if(ANDROID)
|
|
# SDLActivity loads libmain.so; Android does not launch a native executable.
|
|
set(MT_NATIVE_TARGET main)
|
|
add_library(${MT_NATIVE_TARGET} SHARED ${MT_NATIVE_RENDER_SOURCES})
|
|
else()
|
|
set(MT_NATIVE_TARGET mt_native_render)
|
|
add_executable(${MT_NATIVE_TARGET} ${MT_NATIVE_RENDER_SOURCES})
|
|
endif()
|
|
if(APPLE)
|
|
set_target_properties(${MT_NATIVE_TARGET} PROPERTIES
|
|
OSX_ARCHITECTURES "${CMAKE_HOST_SYSTEM_PROCESSOR}"
|
|
)
|
|
endif()
|
|
add_dependencies(${MT_NATIVE_TARGET} mt_native_shaders)
|
|
target_include_directories(${MT_NATIVE_TARGET} PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/third_party"
|
|
"${PROJECT_SOURCE_DIR}/src"
|
|
"${PROJECT_SOURCE_DIR}/src/platform/EterLib")
|
|
if(NOT ANDROID)
|
|
add_custom_command(TARGET ${MT_NATIVE_TARGET} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${MT_NATIVE_VERT_SPV}" "$<TARGET_FILE_DIR:${MT_NATIVE_TARGET}>/native.vert.spv"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${MT_NATIVE_FRAG_SPV}" "$<TARGET_FILE_DIR:${MT_NATIVE_TARGET}>/native.frag.spv")
|
|
endif()
|
|
target_link_libraries(${MT_NATIVE_TARGET} PRIVATE Vulkan::Vulkan SDL3::SDL3)
|
|
if(TARGET port_platform AND TARGET mtpython)
|
|
target_compile_definitions(${MT_NATIVE_TARGET} PRIVATE MT_NATIVE_HAS_LIVE_CLIENT=1)
|
|
target_link_libraries(${MT_NATIVE_TARGET} PRIVATE port_platform)
|
|
if(TARGET mtpython_stdlib)
|
|
add_dependencies(${MT_NATIVE_TARGET} mtpython_stdlib)
|
|
if(NOT ANDROID)
|
|
add_custom_command(TARGET ${MT_NATIVE_TARGET} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${MT_PYTHON_STDLIB_ZIP}" "$<TARGET_FILE_DIR:${MT_NATIVE_TARGET}>/python27.zip")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(ANDROID)
|
|
# Add this directory to the SDL Android app's assets.srcDirs.
|
|
set(MT_NATIVE_ANDROID_ASSETS "${CMAKE_CURRENT_BINARY_DIR}/android-assets")
|
|
add_custom_target(mt_native_android_assets ALL
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${MT_NATIVE_ANDROID_ASSETS}"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_NATIVE_VERT_SPV}" "${MT_NATIVE_ANDROID_ASSETS}/native.vert.spv"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_NATIVE_FRAG_SPV}" "${MT_NATIVE_ANDROID_ASSETS}/native.frag.spv"
|
|
DEPENDS mt_native_shaders)
|
|
if(TARGET mtpython_stdlib)
|
|
add_dependencies(mt_native_android_assets mtpython_stdlib)
|
|
add_custom_command(TARGET mt_native_android_assets POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${MT_PYTHON_STDLIB_ZIP}" "${MT_NATIVE_ANDROID_ASSETS}/python27.zip")
|
|
endif()
|
|
endif()
|
|
|
|
# audio_decode against synthetic .wav and every .wav/.mp3 of the real 40250 Client (pack + BGM).
|
|
if(NOT ANDROID AND TARGET port_platform AND BUILD_TESTING)
|
|
add_executable(host_audio_decode_test
|
|
"${PROJECT_SOURCE_DIR}/tests/host/audio_decode_test.cpp"
|
|
audio_decode.cpp)
|
|
target_include_directories(host_audio_decode_test PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/third_party")
|
|
target_link_libraries(host_audio_decode_test PRIVATE port_platform SDL3::SDL3)
|
|
add_test(NAME host.audio_decode COMMAND $<TARGET_FILE:host_audio_decode_test> "${MT_40250_CLIENT}")
|
|
set_tests_properties(host.audio_decode PROPERTIES SKIP_RETURN_CODE 77)
|
|
endif()
|