Speex编译脚本(iOS)

1、新建文本为speex_build.sh

2、复制以下内容到上面文本中。

#!/bin/sh

ZJ_OGG_VERSION=1.3.0
ZJ_SPEEX_VERSION=1.2rc1
ZJ_IOS_MIN_VERSION=8.0
ZJ_SAVE_DIR=`pwd`/SpeexCompile
ZJ_IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version`
ZJ_XCODE_ROOT=`xcode-select -print-path`

ARCH_ARRAY=(
i386
x86_64
arm64
armv7
armv7s
)

echo "iOS sdk version:$ZJ_IOS_SDK_VERSION"

##############OGG#####################

ZJ_OGG_DIR=$ZJ_SAVE_DIR/libogg
ZJ_OGG_SRC_DIR=$ZJ_OGG_DIR/libogg-$ZJ_OGG_VERSION
if [ -d "$ZJ_OGG_SRC_DIR" ];
	then
 		echo "Ogg src file is exist:$ZJ_OGG_SRC_DIR"
	else
		mkdir -p $ZJ_OGG_DIR
		pushd $ZJ_OGG_DIR
		curl -o libogg-$ZJ_OGG_VERSION.zip https://svn.xiph.org/releases/ogg/libogg-$ZJ_OGG_VERSION.zip
		unzip -o libogg-$ZJ_OGG_VERSION.zip -d .
		rm libogg-$ZJ_OGG_VERSION.zip
fi
pushd $ZJ_OGG_SRC_DIR

OGG_LIPO_PATH=""
for i in "${!ARCH_ARRAY[@]}"; do
	ZJ_ARCH=${ARCH_ARRAY[$i]}
	echo "arch:$ZJ_ARCH"
	
	ZJ_BUILD=x86_64-apple-darwin17.4.0
	
	if [ "$ZJ_ARCH" = "i386" ] || [ "$ZJ_ARCH" = "x86_64" ];
	then
		ZJ_PLATFORM=iPhoneSimulator
		ZJ_HOST=$ZJ_ARCH-apple-darwin 
    ZJ_SDK_PLATFORM=iphonesimulator
    ZJ_IOS_VERSION=ios-simulator-version-min=$ZJ_IOS_MIN_VERSION
	else
		ZJ_PLATFORM=iPhoneOS
		ZJ_HOST=arm-apple-darwin
    ZJ_SDK_PLATFORM=iphoneos
    ZJ_IOS_VERSION=iphoneos-version-min=$ZJ_IOS_MIN_VERSION

	fi
	
ZJ_PLATFORM_PATH=$ZJ_XCODE_ROOT/Platforms/$ZJ_PLATFORM.platform/Developer
ZJ_SDK_PATH=$ZJ_PLATFORM_PATH/SDKs/$ZJ_PLATFORM$ZJ_IOS_SDK_VERSION.sdk
ZJ_FLAGS="-arch $ZJ_ARCH -isysroot $ZJ_SDK_PATH -m$ZJ_IOS_VERSION -fembed-bitcode"

CC=`xcrun -sdk $ZJ_SDK_PLATFORM$ZJ_IOS_SDK_VERSION -find clang`
CXX=`xcrun -sdk $ZJ_SDK_PLATFORM$ZJ_IOS_SDK_VERSION -find clang++`

CFLAGS=$ZJ_FLAGS
CXXFLAGS=$ZJ_FLAGS
LDFLAGS=$ZJ_FLAGS
export CC CXX CFLAGS CXXFLAGS LDFLAGS

ZJ_PREFIX=$ZJ_OGG_DIR/Ogg-$ZJ_ARCH
OGG_LIPO_PATH="$OGG_LIPO_PATH $ZJ_PREFIX/lib/libogg.a "
ZJ_CONFIGURE_FLAGS="-prefix=$ZJ_PREFIX -host=$ZJ_HOST -disable-shared -build=$ZJ_BUILD $ZJ_EXTRA_CONFIGURE_FLAGS"

echo "ZJ_CONFIGURE_FLAGS=$ZJ_CONFIGURE_FLAGS"
echo "ZJ_FLAGS=$ZJ_FLAGS"

$ZJ_OGG_SRC_DIR/configure $ZJ_CONFIGURE_FLAGS
make
make install
make clean
	
done

echo "OGG_LIPO_PATH=$OGG_LIPO_PATH"
mkdir -p $ZJ_SAVE_DIR/Speex/lib
mkdir -p $ZJ_SAVE_DIR/Speex/include
lipo -create $OGG_LIPO_PATH -output $ZJ_SAVE_DIR/Speex/lib/libogg.a
cp -r $ZJ_OGG_DIR/Ogg-arm64/include $ZJ_SAVE_DIR/Speex
popd


##############SPEEX#####################


ZJ_SPEEX_DIR=$ZJ_SAVE_DIR/libspeex
ZJ_SPEEX_SRC_DIR=$ZJ_SPEEX_DIR/speex-$ZJ_SPEEX_VERSION
if [ -d "$ZJ_SPEEX_SRC_DIR" ];
	then
 		echo "Speex src file is exist:$ZJ_SPEEX_SRC_DIR"
	else
		mkdir -p $ZJ_SPEEX_DIR
		pushd $ZJ_SPEEX_DIR
		curl -o speex-$ZJ_SPEEX_VERSION.tar.gz https://svn.xiph.org/releases/speex/speex-$ZJ_SPEEX_VERSION.tar.gz 
		tar xvfz speex-$ZJ_SPEEX_VERSION.tar.gz
		rm speex-$ZJ_SPEEX_VERSION.tar.gz
fi
pushd $ZJ_SPEEX_SRC_DIR

SPEEX_LIPO_PATH=""
SPEEX_LIPO_DSP_PATH=""
for i in "${!ARCH_ARRAY[@]}"; do
	ZJ_ARCH=${ARCH_ARRAY[$i]}
	echo "arch:$ZJ_ARCH"
	
	if [ "$ZJ_ARCH" = "i386" ] || [ "$ZJ_ARCH" = "x86_64" ];
	then
		ZJ_PLATFORM=iPhoneSimulator
		ZJ_HOST=$ZJ_ARCH-apple-darwin 
    ZJ_SDK_PLATFORM=iphonesimulator
    ZJ_IOS_VERSION=ios-simulator-version-min=$ZJ_IOS_MIN_VERSION
	else
		ZJ_PLATFORM=iPhoneOS
		ZJ_HOST=arm-apple-darwin
    ZJ_SDK_PLATFORM=iphoneos
    ZJ_IOS_VERSION=iphoneos-version-min=$ZJ_IOS_MIN_VERSION
	fi
	
ZJ_PLATFORM_PATH=$ZJ_XCODE_ROOT/Platforms/$ZJ_PLATFORM.platform/Developer
ZJ_SDK_PATH=$ZJ_PLATFORM_PATH/SDKs/$ZJ_PLATFORM$ZJ_IOS_SDK_VERSION.sdk
ZJ_FLAGS="-arch $ZJ_ARCH -isysroot $ZJ_SDK_PATH -m$ZJ_IOS_VERSION -fembed-bitcode"

CC=`xcrun -sdk $ZJ_SDK_PLATFORM$ZJ_IOS_SDK_VERSION -find clang`
CXX=`xcrun -sdk $ZJ_SDK_PLATFORM$ZJ_IOS_SDK_VERSION -find clang++`

CFLAGS=$ZJ_FLAGS
CXXFLAGS=$ZJ_FLAGS
LDFLAGS=$ZJ_FLAGS
export CC CXX CFLAGS CXXFLAGS LDFLAGS

ZJ_PREFIX=$ZJ_SPEEX_DIR/Speex-$ZJ_ARCH
SPEEX_LIPO_PATH="$SPEEX_LIPO_PATH $ZJ_PREFIX/lib/libspeex.a "
SPEEX_LIPO_DSP_PATH="$SPEEX_LIPO_DSP_PATH $ZJ_PREFIX/lib/libspeexdsp.a "
ZJ_CONFIGURE_FLAGS="-prefix=$ZJ_PREFIX -host=$ZJ_HOST -disable-shared -enable-static -disable-oggtest -disable-fixed-point -enable-float-api -build=$ZJ_BUILD -with-ogg=$ZJ_OGG_DIR/Ogg-$ZJ_ARCH $ZJ_EXTRA_CONFIGURE_FLAGS"

echo "ZJ_CONFIGURE_FLAGS=$ZJ_CONFIGURE_FLAGS"
echo "ZJ_FLAGS=$ZJ_FLAGS"

./configure $ZJ_CONFIGURE_FLAGS
make
make install
make clean
	
done

echo "SPEEX_LIPO_PATH=$SPEEX_LIPO_PATH"
lipo -create $SPEEX_LIPO_PATH -output $ZJ_SAVE_DIR/Speex/lib/libspeex.a
lipo -create $SPEEX_LIPO_DSP_PATH -output $ZJ_SAVE_DIR/Speex/lib/libspeexdsp.a 
cp -r $ZJ_SPEEX_DIR/Speex-arm64/include $ZJ_SAVE_DIR/Speex

3、修改speex_build.sh的运行权限命令:chmod -R 777 speex_build.sh

4、执行此脚本:./speex_build.sh

在当前目录下回生成SpeexCompile文件夹,而其中Speex文件夹即为编译而成静态库,支持i386、x86_64、arm64、armv7、armv7s。

声明:本文使用speex的版本为1.2rc1,若是1.2rc2及以上的版本因speexdsp已经分离,编译会有点差别。忙于项目,且Shell语言不是太熟练,脚本写的不是那么友好,有什么建议及改善请多多留言。本文参考了网上部分教程及代码,在此感谢!

注:若需要使用最新版本的Speex,可自行下载对应对应脚本:Speex最新库编译脚本(iOS)

猜你喜欢

转载自blog.csdn.net/lizhijian21/article/details/79298213