Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 47 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ if(AUDIO_BACKEND STREQUAL "")
set(AUDIO_BACKEND "openal")
elseif(PLATFORM STREQUAL "ps2")
set(AUDIO_BACKEND "ps2")
elseif(PLATFORM STREQUAL "libretro")
set(AUDIO_BACKEND "miniaudio")
else()
set(AUDIO_BACKEND "miniaudio")
endif()
Expand Down Expand Up @@ -99,7 +101,11 @@ if (ENABLE_GLES AND ENABLE_LEGACY_GL)
set(ENABLE_LEGACY_GL OFF)
endif()

add_executable(butterscotch ${SOURCES} ${PLATFORM_SOURCES} ${AUDIO_SOURCES})
if(PLATFORM STREQUAL "libretro")
add_library(butterscotch MODULE ${SOURCES} ${PLATFORM_SOURCES} ${AUDIO_SOURCES})
else()
add_executable(butterscotch ${SOURCES} ${PLATFORM_SOURCES} ${AUDIO_SOURCES})
endif()
target_include_directories(butterscotch PRIVATE ${CMAKE_SOURCE_DIR}/src)

if(AUDIO_BACKEND STREQUAL "openal")
Expand Down Expand Up @@ -612,6 +618,46 @@ elseif(PLATFORM STREQUAL "ps3")
# mojoal calls SDL atomics/threads, so SDL2 must link after it (static link order)
target_link_libraries(mojoal PUBLIC ${SDL2_LIBRARIES})
target_link_libraries(butterscotch PRIVATE ${SDL2_LIBRARIES} m gcm_sys rsx sysutil io audio rt lv2 io audio bzip2 stb_ds sha1 ps3gl mojoal stb_vorbis)
elseif(PLATFORM STREQUAL "libretro")
# bzip2 needs -fPIC for linking into shared library
set_target_properties(bzip2 PROPERTIES POSITION_INDEPENDENT_CODE ON)

# SW renderer, image decoder, stb image loader
target_sources(butterscotch PRIVATE
src/sw/sw_renderer.c
src/image/image_decoder.c
src/desktop/stb_impl.c
)
target_include_directories(butterscotch PRIVATE
${CMAKE_SOURCE_DIR}/src/sw
${CMAKE_SOURCE_DIR}/src/image
${CMAKE_SOURCE_DIR}/src/desktop
${CMAKE_SOURCE_DIR}/src/libretro
vendor/stb/image
vendor/stb/vorbis
)

# Rename output to butterscotch_libretro.so
set_target_properties(butterscotch PROPERTIES
PREFIX ""
OUTPUT_NAME "butterscotch_libretro"
)

# Version script for symbol visibility
target_link_options(butterscotch PRIVATE
-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libretro/link.T
-Wl,--no-undefined
)

# Libraries
find_library(DL_LIB dl)
target_link_libraries(butterscotch PRIVATE bzip2 m ${DL_LIB} ${AUDIO_LIBRARIES})

target_compile_definitions(butterscotch PRIVATE
_GNU_SOURCE
_FILE_OFFSET_BITS=64
HAVE_LIBRETRO
)
else()
message(FATAL_ERROR "Unknown platform! ${PLATFORM}")
endif()
5 changes: 5 additions & 0 deletions src/audio/miniaudio/ma_audio_system.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@ static void maInit(AudioSystem* audio, DataWin* dataWin, FileSystem* fileSystem)
ma->fileSystem = fileSystem;

ma_engine_config config = ma_engine_config_init();
#ifdef HAVE_LIBRETRO
config.noDevice = MA_TRUE;
config.channels = 2;
config.sampleRate = 44100;
#endif
ma_result result = ma_engine_init(&config, &ma->engine);
if (result != MA_SUCCESS) {
fprintf(stderr, "Audio: Failed to initialize miniaudio engine (error %d)\n", result);
Expand Down
Loading