Skip to content
Open
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
36 changes: 36 additions & 0 deletions recipes/recipes_emscripten/miniaudio/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash
set -e

mkdir build
cd build

# Set compiler flags
export CFLAGS="$CFLAGS $EMCC_CFLAGS"
export CXXFLAGS="$CXXFLAGS $EMCC_CFLAGS"
export LDFLAGS="$LDFLAGS $EM_FORGE_SIDE_MODULE_LDFLAGS"

# Configure step
emcmake cmake ${CMAKE_ARGS} .. \
-GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=$PREFIX \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_C_FLAGS_RELEASE="$CFLAGS" \
-DCMAKE_CXX_FLAGS_RELEASE="$CXXFLAGS" \
-DCMAKE_MODULE_LINKER_FLAGS_RELEASE="$LDFLAGS" \
-DCMAKE_PROJECT_INCLUDE=$RECIPE_DIR/overwriteProp.cmake \
-DMINIAUDIO_BUILD_EXAMPLES=OFF \
-DMINIAUDIO_BUILD_TESTS=OFF \
-DMINIAUDIO_BUILD_TOOLS=OFF \
-DMINIAUDIO_NO_EXTRA_NODES=ON

# Build step
emmake ninja -v

# Install step
ninja install

# Install CMake config file
mkdir -p $PREFIX/lib/cmake/miniaudio
cp $RECIPE_DIR/miniaudioConfig.cmake $PREFIX/lib/cmake/miniaudio/miniaudioConfig.cmake
21 changes: 21 additions & 0 deletions recipes/recipes_emscripten/miniaudio/build_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash
set -e

# Set compiler flags for standalone executable (not side module)
export CFLAGS="$CFLAGS $EM_FORGE_CFLAGS_BASE -I${PREFIX}/include"
export CXXFLAGS="$CXXFLAGS $EM_FORGE_CFLAGS_BASE -I${PREFIX}/include"
export LDFLAGS="$LDFLAGS $EM_FORGE_LDFLAGS_BASE"

# Build the tests
emcmake cmake -S tests -B build_tests \
-GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_FIND_ROOT_PATH=$PREFIX \
-DCMAKE_PREFIX_PATH=$PREFIX \
-Dminiaudio_DIR=$PREFIX/lib/cmake/miniaudio

emmake ninja -C build_tests

# Run the tests
echo "Running miniaudio tests..."
node build_tests/test_miniaudio.js
20 changes: 20 additions & 0 deletions recipes/recipes_emscripten/miniaudio/miniaudioConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# miniaudioConfig.cmake
# CMake configuration file for miniaudio

include(CMakeFindDependencyMacro)

# Compute the installation prefix relative to this file
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)

# Create imported target
if(NOT TARGET miniaudio::miniaudio)
add_library(miniaudio::miniaudio STATIC IMPORTED)

set_target_properties(miniaudio::miniaudio PROPERTIES
IMPORTED_LOCATION "${_IMPORT_PREFIX}/lib/libminiaudio.a"
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/miniaudio"
)
endif()
5 changes: 5 additions & 0 deletions recipes/recipes_emscripten/miniaudio/overwriteProp.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# https://github.com/emscripten-core/emscripten/issues/15276
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-s SIDE_MODULE=1")
set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-s SIDE_MODULE=1")
set(CMAKE_STRIP FALSE)
57 changes: 57 additions & 0 deletions recipes/recipes_emscripten/miniaudio/recipe.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
context:
version: 0.11.25

package:
name: miniaudio-c
version: ${{ version }}

source:
url: https://github.com/mackron/miniaudio/archive/refs/tags/${{ version }}.tar.gz
sha256: b900edcffe979816e2560a0580b9b1216d674b4f17fbadeca8f777a7f8ab0274

build:
number: 0
script: build.sh

requirements:
build:
- ${{ compiler('c') }}
- cmake
- ninja

tests:
- package_contents:
include:
- miniaudio/miniaudio.h
files:
- lib/libminiaudio.a
- lib/pkgconfig/miniaudio.pc
- lib/cmake/miniaudio/miniaudioConfig.cmake
- script:
- build_tests.sh
requirements:
build:
- ${{ compiler('c') }}
- cmake
- ninja
files:
recipe:
- build_tests.sh
- tests/

about:
homepage: https://miniaud.io/
license: MIT-0 OR Unlicense
license_file: LICENSE
summary: A single file audio playback and capture library written in C.
description: |
miniaudio is a single-header audio playback and capture library
written in C. It has no external dependencies except the C standard
library. It supports all major platforms including Windows, macOS,
Linux, Android, iOS, and Web (Emscripten).
documentation: https://miniaud.io/docs/manual/
repository: https://github.com/mackron/miniaudio

extra:
recipe-maintainers:
- Alex-PLACET
13 changes: 13 additions & 0 deletions recipes/recipes_emscripten/miniaudio/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 3.15)
project(miniaudio_test C)

set(CMAKE_C_STANDARD 99)

find_package(miniaudio REQUIRED)

add_executable(test_miniaudio test_miniaudio.c)
target_link_libraries(test_miniaudio PRIVATE miniaudio::miniaudio)

set_target_properties(test_miniaudio PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
)
67 changes: 67 additions & 0 deletions recipes/recipes_emscripten/miniaudio/tests/test_miniaudio.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#define MINIAUDIO_IMPLEMENTATION
#include <miniaudio.h>

#include <stdio.h>

int test_version() {
printf("miniaudio version macros: %u.%u.%u\n",
MA_VERSION_MAJOR, MA_VERSION_MINOR, MA_VERSION_REVISION);

if (MA_VERSION_MAJOR == 0 && MA_VERSION_MINOR == 0 && MA_VERSION_REVISION == 0) {
printf("FAIL: All version numbers are zero\n");
return 1;
}

printf(" PASS: Version macros are valid\n");
return 0;
}

int test_encoder_format() {
/* Verify encoding format enum is accessible */
ma_encoding_format format = ma_encoding_format_wav;
if (format != ma_encoding_format_wav) {
printf("FAIL: Encoding format enum mismatch\n");
return 1;
}
printf(" PASS: Encoding format enum accessible\n");
return 0;
}

int test_decoder_config() {
ma_decoder_config config = ma_decoder_config_init_default();
/* Verify the config was initialized (format should be a valid enum value) */
if (config.format > ma_format_count) {
printf("FAIL: Invalid decoder config format: %d\n", (int)config.format);
return 1;
}
printf(" Default decoder config format: %d, channels: %u, sampleRate: %u\n",
(int)config.format, config.channels, config.sampleRate);
printf(" PASS: Decoder config initialized correctly\n");
return 0;
}

int main() {
int failures = 0;

printf("=== miniaudio tests ===\n\n");

printf("test_version...\n");
failures += test_version();
printf("\n");

printf("test_encoder_format...\n");
failures += test_encoder_format();
printf("\n");

printf("test_decoder_config...\n");
failures += test_decoder_config();
printf("\n");

if (failures == 0) {
printf("All tests passed!\n");
return 0;
} else {
printf("%d test(s) failed!\n", failures);
return 1;
}
}