From c9d288c3dc1efc6155cedc8eea0f87be991cab54 Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Sat, 19 Jul 2025 22:35:09 +0200 Subject: [PATCH 1/4] Link linux backends if NO_RUNTIME_LINKING is enabled Signed-off-by: Marcin Serwin --- CMakeLists.txt | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 18e5261b..cf990c47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -580,6 +580,81 @@ add_library(miniaudio_common_options INTERFACE) target_compile_options(miniaudio_common_options INTERFACE ${COMPILE_OPTIONS}) target_link_libraries (miniaudio_common_options INTERFACE ${COMMON_LINK_LIBRARIES}) +function(is_backend_enabled NAME) + if (NOT MINIAUDIO_NO_${NAME} AND (NOT MINIAUDIO_ENABLE_ONLY_SPECIFIC_BACKENDS OR MINIAUDIO_ENABLE_${NAME})) + set(${NAME}_ENABLED TRUE PARENT_SCOPE) + else() + set(${NAME}_ENABLED FALSE PARENT_SCOPE) + endif() +endfunction() + +if(MINIAUDIO_NO_RUNTIME_LINKING) + is_backend_enabled(PULSEAUDIO) + if (PULSEAUDIO_ENABLED) + find_package(PulseAudio REQUIRED) + target_link_libraries(miniaudio PRIVATE ${PULSEAUDIO_LIBRARY}) + target_include_directories(miniaudio SYSTEM PRIVATE ${PULSEAUDIO_INCLUDE_DIR}) + endif() + + is_backend_enabled(ALSA) + if (ALSA_ENABLED) + find_package(PkgConfig QUIET) + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_ALSA alsa) + endif() + + find_library(ALSA_LIBRARY + NAMES asound + HINTS ${PC_ALSA_LIBRARY_DIRS} + ) + find_path(ALSA_INCLUDE_DIR + NAMES alsa/asoundlib.h + HINTS ${PC_ALSA_INCLUDE_DIRS} + ) + + target_link_libraries(miniaudio PRIVATE ${ALSA_LIBRARY}) + target_include_directories(miniaudio PRIVATE ${ALSA_INCLUDE_DIR}) + endif() + + is_backend_enabled(SNDIO) + if (SNDIO_ENABLED) + find_package(PkgConfig QUIET) + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_SNDIO sndio) + endif() + + find_library(SNDIO_LIBRARY + NAMES sndio + HINTS ${PC_SNDIO_LIBRARY_DIRS} + ) + target_link_libraries(miniaudio PRIVATE ${SNDIO_LIBRARY}) + endif() + + is_backend_enabled(JACK) + if (JACK_ENABLED) + find_package(PkgConfig QUIET) + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_JACK jack) + endif() + + find_library(JACK_LIBRARY + NAMES jack + HINTS ${PC_JACK_LIBRARY_DIRS} + ) + + find_path(JACK_INCLUDE_DIR + NAMES jack/jack.h + HINTS ${PC_JACK_INCLUDE_DIRS} + ) + + target_link_libraries(miniaudio PRIVATE ${JACK_LIBRARY}) + target_include_directories(miniaudio PRIVATE ${JACK_INCLUDE_DIR}) + endif() +endif() + # Tests # # All tests are compiled as a single translation unit. There is no need to add miniaudio as a link library. From badf36a37897a80c2a0803114acd4415d287284f Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Sat, 19 Jul 2025 22:35:09 +0200 Subject: [PATCH 2/4] Generate and install pkg-config file Signed-off-by: Marcin Serwin --- CMakeLists.txt | 27 ++++++++++++++++++++++++++- miniaudio.pc.in | 15 +++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 miniaudio.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index cf990c47..c0d0660c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.10) project(miniaudio - VERSION 0.11 + VERSION 0.11.22 ) @@ -588,12 +588,15 @@ function(is_backend_enabled NAME) endif() endfunction() +set(LINKED_LIBS) + if(MINIAUDIO_NO_RUNTIME_LINKING) is_backend_enabled(PULSEAUDIO) if (PULSEAUDIO_ENABLED) find_package(PulseAudio REQUIRED) target_link_libraries(miniaudio PRIVATE ${PULSEAUDIO_LIBRARY}) target_include_directories(miniaudio SYSTEM PRIVATE ${PULSEAUDIO_INCLUDE_DIR}) + list(APPEND LINKED_LIBS libpulse) endif() is_backend_enabled(ALSA) @@ -615,6 +618,7 @@ if(MINIAUDIO_NO_RUNTIME_LINKING) target_link_libraries(miniaudio PRIVATE ${ALSA_LIBRARY}) target_include_directories(miniaudio PRIVATE ${ALSA_INCLUDE_DIR}) + list(APPEND LINKED_LIBS alsa) endif() is_backend_enabled(SNDIO) @@ -630,6 +634,7 @@ if(MINIAUDIO_NO_RUNTIME_LINKING) HINTS ${PC_SNDIO_LIBRARY_DIRS} ) target_link_libraries(miniaudio PRIVATE ${SNDIO_LIBRARY}) + list(APPEND LINKED_LIBS sndio) endif() is_backend_enabled(JACK) @@ -652,6 +657,7 @@ if(MINIAUDIO_NO_RUNTIME_LINKING) target_link_libraries(miniaudio PRIVATE ${JACK_LIBRARY}) target_include_directories(miniaudio PRIVATE ${JACK_INCLUDE_DIR}) + list(APPEND LINKED_LIBS jack) endif() endif() @@ -767,6 +773,25 @@ if (MINIAUDIO_BUILD_EXAMPLES) add_miniaudio_example(miniaudio_simple_spatialization simple_spatialization.c) endif() +if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") + set(MINIAUDIO_PC_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") +else() + set(MINIAUDIO_PC_INCLUDEDIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") +endif() +if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") + set(MINIAUDIO_PC_LIBDIR "${CMAKE_INSTALL_LIBDIR}") +else() + set(MINIAUDIO_PC_LIBDIR "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") +endif() + +string(JOIN ", " MINIAUDIO_PC_REQUIRES_PRIVATE ${LINKED_LIBS}) +list(TRANSFORM COMMON_LINK_LIBRARIES PREPEND "-l") +string(JOIN " " MINIAUDIO_PC_LIBS_PRIVATE ${COMMON_LINK_LIBRARIES}) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/miniaudio.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/miniaudio.pc" @ONLY) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/miniaudio.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + message(STATUS "Library list: ${LIBS_TO_INSTALL}") install(TARGETS ${LIBS_TO_INSTALL} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} diff --git a/miniaudio.pc.in b/miniaudio.pc.in new file mode 100644 index 00000000..cae173bd --- /dev/null +++ b/miniaudio.pc.in @@ -0,0 +1,15 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +includedir=@MINIAUDIO_PC_INCLUDEDIR@ +libdir=@MINIAUDIO_PC_LIBDIR@ + +Name: miniaudio +Description: An audio playback and capture library. +URL: https://miniaud.io/ +License: Unlicense OR MIT-0 +Version: @PROJECT_VERSION@ + +Requires.private: @MINIAUDIO_PC_REQUIRES_PRIVATE@ +Cflags: -I${includedir} @MINIAUDIO_PC_CFLAGS@ +Libs: -L${libdir} -lminiaudio +Libs.private: @MINIAUDIO_PC_LIBS_PRIVATE@ From a2f92095dc16246ed91722dfcaaba738817f2bef Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Sun, 20 Jul 2025 23:58:47 +0200 Subject: [PATCH 3/4] Expose compile defines in pkg-config file Signed-off-by: Marcin Serwin --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0d0660c..39b2c2ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -787,6 +787,8 @@ endif() string(JOIN ", " MINIAUDIO_PC_REQUIRES_PRIVATE ${LINKED_LIBS}) list(TRANSFORM COMMON_LINK_LIBRARIES PREPEND "-l") string(JOIN " " MINIAUDIO_PC_LIBS_PRIVATE ${COMMON_LINK_LIBRARIES}) +list(TRANSFORM COMPILE_DEFINES PREPEND "-D") +string(JOIN " " MINIAUDIO_PC_CFLAGS ${COMPILE_DEFINES}) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/miniaudio.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/miniaudio.pc" @ONLY) From 346d86ffa10acc3a579939d1aa18aec566406b18 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sat, 23 Aug 2025 05:45:05 +1000 Subject: [PATCH 4/4] Update gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 36d70bce..88062784 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ /research/_build/ /tests/_build/bin/ /tests/_build/res/output/ +/tests/_build/cmake-emcc/ /tests/_build/tcc/ /tests/_build/vc6/ /tests/_build/vc15/