Skip to content
Merged
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
2 changes: 2 additions & 0 deletions packages/react-native-audio-api/RNAudioAPI.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ s.user_target_xcconfig = {
-force_load #{lib_dir}/libvorbis.a
-force_load #{lib_dir}/libvorbisenc.a
-force_load #{lib_dir}/libvorbisfile.a
-force_load #{lib_dir}/libssl.a
-force_load #{lib_dir}/libcrypto.a
].join(" "),
'HEADER_SEARCH_PATHS' => %W[
$(inherited)
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,32 @@
<key>BinaryPath</key>
<string>libavcodec.framework/libavcodec</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>libavcodec.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>libavcodec.framework/libavcodec</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>libavcodec.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash

# FFmpeg Mobile Architecture Build Script
# Builds static libraries (.a files) for iOS and Android architectures
# Builds shared ffmpeg binaries for iOS and Android architectures
set -e

SOURCE_DIR="/path/to/your/ffmpeg" # Change this to your FFmpeg source directory
Expand Down Expand Up @@ -156,11 +156,88 @@ if [ ! -d "${SOURCE_DIR}" ]; then
fi

# Clean the source directory of any previous builds
echo "Cleaning source directory..."
cd "${SOURCE_DIR}"
make distclean 2>/dev/null || true
cd - > /dev/null

# Use NDK_ROOT if ANDROID_NDK_ROOT is not set
NDK_PATH="${ANDROID_NDK_ROOT:-$NDK_ROOT}"

if [ ! -d "$NDK_PATH" ]; then
echo "Android NDK not found. Please set ANDROID_NDK_ROOT or NDK_ROOT environment variable"
exit 1
fi

API_LEVEL=21
TOOLCHAIN_PATH="${NDK_PATH}/toolchains/llvm/prebuilt"
export ANDROID_NDK_ROOT=${NDK_PATH}

# Detect host OS for toolchain
if [[ "$OSTYPE" == "darwin"* ]]; then
HOST_TAG="darwin-x86_64"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
HOST_TAG="linux-x86_64"
else
echo "Unsupported host OS for Android NDK"
exit 1
fi

TOOLCHAIN="${TOOLCHAIN_PATH}/${HOST_TAG}"
PATH=$TOOLCHAIN/bin:$PATH

OPENSSL_PREBUILT_FOLDER="$(pwd)/openssl-prebuilt"
if [ ! -d "$OPENSSL_PREBUILT_FOLDER" ]; then
echo "Cloning and building OpenSSL..."
if [ ! -d "openssl" ]; then
git clone https://github.com/openssl/openssl.git
fi
cd openssl
mkdir -p "${OPENSSL_PREBUILT_FOLDER}/include"

# ios-arm
./Configure ios64-xcrun no-shared no-asm no-tests
make build_libs -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/iphoneos && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/iphoneos"
cp -r include/crypto include/openssl "${OPENSSL_PREBUILT_FOLDER}/include"
make clean

# arm-simulator
./Configure iossimulator-arm64-xcrun no-shared no-asm no-tests
make build_libs -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/iphonesimulator && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/iphonesimulator"
make clean

# x86_64-simulator
./Configure iossimulator-x86_64-xcrun no-shared no-asm no-tests
make build_libs -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/iphonesimulator-x86_64 && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/iphonesimulator-x86_64"
make clean

# arm64-v8a
./Configure android-arm64 no-shared no-asm no-tests -D__ANDROID_API__=${API_LEVEL}
make build_libs -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/arm64-v8a && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/arm64-v8a"
make clean

# armeabi-v7a
./Configure android-arm no-shared no-asm no-tests -D__ANDROID_API__=${API_LEVEL}
make build_libs -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a"
make clean

./Configure android-x86 no-shared no-asm no-tests -D__ANDROID_API__=${API_LEVEL}
make build_libs -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/x86 && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/x86"
make clean

./Configure android-x86_64 no-shared no-asm no-tests -D__ANDROID_API__=${API_LEVEL}
make build_libs -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/x86_64 && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/x86_64"
make clean

cd .. && rm -rf openssl
fi

# iOS Architectures
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "Building for iOS architectures..."
Expand All @@ -169,13 +246,13 @@ if [[ "$OSTYPE" == "darwin"* ]]; then
IOS_SDK_PATH=$(xcrun --sdk iphoneos --show-sdk-path)
IOS_SIM_SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-path)

# iOS Device architectures
# iOS Device architecture
build_arch "arm64" "darwin" \
"$(xcrun --sdk iphoneos --find clang)" \
"$(xcrun --sdk iphoneos --find clang++)" \
"-arch arm64 -mios-version-min=11.0 -isysroot ${IOS_SDK_PATH}" \
"-arch arm64 -mios-version-min=11.0 -isysroot ${IOS_SDK_PATH}" \
"--disable-iconv --disable-zlib"
"-I${OPENSSL_PREBUILT_FOLDER}/include -arch arm64 -mios-version-min=11.0 -isysroot ${IOS_SDK_PATH}" \
"-L${OPENSSL_PREBUILT_FOLDER}/iphoneos -arch arm64 -mios-version-min=11.0 -isysroot ${IOS_SDK_PATH}" \
"--disable-iconv --disable-zlib --enable-openssl --disable-securetransport"

fix_dynamic_ios_linkage "${OUTPUT_DIR}/ios/iphoneos/lib/libavcodec.${AVCODEC_VERSION}.dylib"
fix_dynamic_ios_linkage "${OUTPUT_DIR}/ios/iphoneos/lib/libavformat.${AVFORMAT_VERSION}.dylib"
Expand All @@ -184,12 +261,13 @@ if [[ "$OSTYPE" == "darwin"* ]]; then

rm -rf "${OUTPUT_DIR}/ios/iphoneos/share"

# iOS Simulator arm (Silicon Macs)
build_arch "arm64" "darwinsim" \
"$(xcrun --sdk iphonesimulator --find clang)" \
"$(xcrun --sdk iphonesimulator --find clang++)" \
"-arch arm64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"-arch arm64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"--disable-iconv --disable-zlib"
"-I${OPENSSL_PREBUILT_FOLDER}/include -arch arm64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"-L${OPENSSL_PREBUILT_FOLDER}/iphonesimulator -arch arm64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"--disable-iconv --disable-zlib --enable-openssl --disable-securetransport"

fix_dynamic_ios_linkage "${OUTPUT_DIR}/ios/iphonesimulator_arm64/lib/libavcodec.${AVCODEC_VERSION}.dylib"
fix_dynamic_ios_linkage "${OUTPUT_DIR}/ios/iphonesimulator_arm64/lib/libavformat.${AVFORMAT_VERSION}.dylib"
Expand All @@ -202,9 +280,9 @@ if [[ "$OSTYPE" == "darwin"* ]]; then
build_arch "x86_64" "darwinsim" \
"$(xcrun --sdk iphonesimulator --find clang)" \
"$(xcrun --sdk iphonesimulator --find clang++)" \
"-arch x86_64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"-arch x86_64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"--disable-iconv --disable-zlib"
"-I${OPENSSL_PREBUILT_FOLDER}/include -arch x86_64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"-L${OPENSSL_PREBUILT_FOLDER}/iphonesimulator-x86_64 -arch x86_64 -mios-simulator-version-min=11.0 -isysroot ${IOS_SIM_SDK_PATH}" \
"--disable-iconv --disable-zlib --enable-openssl --disable-securetransport"

fix_dynamic_ios_linkage "${OUTPUT_DIR}/ios/iphonesimulator_x86_64/lib/libavcodec.${AVCODEC_VERSION}.dylib"
fix_dynamic_ios_linkage "${OUTPUT_DIR}/ios/iphonesimulator_x86_64/lib/libavformat.${AVFORMAT_VERSION}.dylib"
Expand All @@ -214,6 +292,7 @@ if [[ "$OSTYPE" == "darwin"* ]]; then
rm -rf "${OUTPUT_DIR}/ios/iphonesimulator_x86_64/share"

mkdir -p "${OUTPUT_DIR}/ios/iphonesimulator/lib"
# Create universal simulator libraries
lipo -create \
"${OUTPUT_DIR}/ios/iphonesimulator_arm64/lib/libavcodec.${AVCODEC_VERSION}.dylib" \
"${OUTPUT_DIR}/ios/iphonesimulator_x86_64/lib/libavcodec.${AVCODEC_VERSION}.dylib" \
Expand All @@ -238,6 +317,7 @@ if [[ "$OSTYPE" == "darwin"* ]]; then
mv "${OUTPUT_DIR}/ios/iphonesimulator/lib/libavformat.${AVFORMAT_VERSION}.dylib" "${OUTPUT_DIR}/ios/iphonesimulator/lib/libavformat.dylib"
mv "${OUTPUT_DIR}/ios/iphonesimulator/lib/libavcodec.${AVCODEC_VERSION}.dylib" "${OUTPUT_DIR}/ios/iphonesimulator/lib/libavcodec.dylib"

# create frameworks from binaries
bash ./create_xcframework.sh

echo "iOS builds completed!"
Expand All @@ -248,114 +328,54 @@ fi
# Android Architectures
if [ -n "$ANDROID_NDK_ROOT" ] || [ -n "$NDK_ROOT" ]; then
echo "Building for Android architectures..."

# Use NDK_ROOT if ANDROID_NDK_ROOT is not set
NDK_PATH="${ANDROID_NDK_ROOT:-$NDK_ROOT}"

if [ ! -d "$NDK_PATH" ]; then
echo "Android NDK not found. Please set ANDROID_NDK_ROOT or NDK_ROOT environment variable"
else
API_LEVEL=21
TOOLCHAIN_PATH="${NDK_PATH}/toolchains/llvm/prebuilt"

# Detect host OS for toolchain
if [[ "$OSTYPE" == "darwin"* ]]; then
HOST_TAG="darwin-x86_64"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
HOST_TAG="linux-x86_64"
else
echo "Unsupported host OS for Android NDK"
exit 1
fi

TOOLCHAIN="${TOOLCHAIN_PATH}/${HOST_TAG}"

OPENSSL_PREBUILT_FOLDER="$(pwd)/openssl-prebuilt"
if [ ! -d "$OPENSSL_PREBUILT_FOLDER" ]; then
echo "Cloning and building OpenSSL for Android..."
if [ ! -d "openssl" ]; then
git clone https://github.com/openssl/openssl.git
fi
cd openssl
export ANDROID_NDK_ROOT=${NDK_PATH}
PATH=$TOOLCHAIN/bin:$PATH
mkdir -p "${OPENSSL_PREBUILT_FOLDER}/include"

# arm64-v8a
./Configure android-arm64 no-shared no-asm -D__ANDROID_API__=${API_LEVEL}
make -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/arm64-v8a && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/arm64-v8a"
cp -r include/crypto include/openssl "${OPENSSL_PREBUILT_FOLDER}/include"
make clean

# armeabi-v7a
./Configure android-arm no-shared no-asm -D__ANDROID_API__=${API_LEVEL}
make -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a"
make clean

./Configure android-x86 no-shared no-asm -D__ANDROID_API__=${API_LEVEL}
make -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/x86 && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/x86"
make clean

./Configure android-x86_64 no-shared no-asm -D__ANDROID_API__=${API_LEVEL}
make -j10
mkdir -p ${OPENSSL_PREBUILT_FOLDER}/x86_64 && cp libcrypto.a libssl.a "${OPENSSL_PREBUILT_FOLDER}/x86_64"
make clean

cd .. && rm -rf openssl
fi

# ARM64-v8a
build_arch "aarch64" "android" \
"${TOOLCHAIN}/bin/aarch64-linux-android${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/aarch64-linux-android${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/arm64-v8a -L${TOOLCHAIN}/sysroot/usr/lib/aarch64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"

rm -rf ${OUTPUT_DIR}/android/arm64-v8a/share
# ARMv7a
build_arch "armv7a" "android" \
"${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a -L${TOOLCHAIN}/sysroot/usr/lib/arm-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"
# ARM64-v8a
build_arch "aarch64" "android" \
"${TOOLCHAIN}/bin/aarch64-linux-android${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/aarch64-linux-android${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/arm64-v8a -L${TOOLCHAIN}/sysroot/usr/lib/aarch64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"

rm -rf ${OUTPUT_DIR}/android/arm64-v8a/share

# ARMv7a
build_arch "armv7a" "android" \
"${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/armeabi-v7a -L${TOOLCHAIN}/sysroot/usr/lib/arm-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"

rm -rf ${OUTPUT_DIR}/android/armeabi-v7a/share
rm -rf ${OUTPUT_DIR}/android/armeabi-v7a/share

# x86
build_arch "x86" "android" \
"${TOOLCHAIN}/bin/i686-linux-android${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/i686-linux-android${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/x86 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/i686-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"
# x86
build_arch "x86" "android" \
"${TOOLCHAIN}/bin/i686-linux-android${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/i686-linux-android${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/x86 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/i686-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"

rm -rf ${OUTPUT_DIR}/android/x86/share
rm -rf ${OUTPUT_DIR}/android/x86/share


# x86_64
build_arch "x86_64" "android" \
"${TOOLCHAIN}/bin/x86_64-linux-android${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/x86_64-linux-android${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/x86_64 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/x86_64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"
# x86_64
build_arch "x86_64" "android" \
"${TOOLCHAIN}/bin/x86_64-linux-android${API_LEVEL}-clang" \
"${TOOLCHAIN}/bin/x86_64-linux-android${API_LEVEL}-clang++" \
"-I${OPENSSL_PREBUILT_FOLDER}/include -I${TOOLCHAIN}/darwin-x86_64/sysroot/usr/include -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"-L${OPENSSL_PREBUILT_FOLDER}/x86_64 -L${TOOLCHAIN}/darwin-x86_64/sysroot/usr/lib/x86_64-linux-android/${API_LEVEL} -fPIC -Wl,-Bsymbolic -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384" \
"--enable-openssl --extra-libs=-lz"

rm -rf ${OUTPUT_DIR}/android/x86_64/share
rm -rf ${OUTPUT_DIR}/android/x86_64/share


echo "Android builds completed!"
fi
echo "Android builds completed!"
else
echo "Skipping Android builds (ANDROID_NDK_ROOT or NDK_ROOT not set)"
fi

rm -rf "${BUILD_DIR}"

echo ""
echo "All FFmpeg builds completed!"