提交 fc70895c 编写于 作者: B bbcallen

ios: use xcrun instead of gcc to support iOS7 sdk

上级 377e10a9
Changes between 0.0.7 and 0.0.6:
--------------------------------
- ios: support build with SDK7
Changes between 0.0.6 and 0.0.5:
--------------------------------
......
#! /bin/sh
#----------
# modify for your build tool
# export HAVE_IOS7_SDK=1 to prefer ios sdk7
FF_ALL_ARCHS_IOS6_SDK="armv7 armv7s i386"
FF_ALL_ARCHS_IOS7_SDK="armv7 armv7s arm64 i386"
FF_ALL_ARCHS=$FF_ALL_ARCHS_IOS6_SDK
if [ "$HAVE_IOS7_SDK" == "1" ]; then
FF_ALL_ARCHS=$FF_ALL_ARCHS_IOS7_SDK
fi
#----------
UNI_BUILD_ROOT=`pwd`
UNI_TMP="$UNI_BUILD_ROOT/tmp"
UNI_TMP_LLVM_VER_FILE="$UNI_TMP/llvm.ver.txt"
FF_TARGET=$1
set -e
#----------
FF_LIBS="libavcodec libavformat libavutil libswscale libswresample"
#----------
echo_archs() {
echo "===================="
echo "[*] check xcode version"
echo "===================="
echo "HAVE_IOS7_SDK = $HAVE_IOS7_SDK"
echo "FF_ALL_ARCHS = $FF_ALL_ARCHS"
}
do_lipo () {
LIB_FILE=$1
lipo -create \
-arch armv7 $UNI_BUILD_ROOT/build/ffmpeg-armv7/output/lib/$LIB_FILE \
-arch armv7 $UNI_BUILD_ROOT/build/ffmpeg-armv7s/output/lib/$LIB_FILE \
-arch i386 $UNI_BUILD_ROOT/build/ffmpeg-i386/output/lib/$LIB_FILE \
-output $UNI_BUILD_ROOT/build/universal/lib/$LIB_FILE
}
LIPO_FLAGS=
for ARCH in $FF_ALL_ARCHS
do
LIPO_FLAGS="$LIPO_FLAGS $UNI_BUILD_ROOT/build/ffmpeg-$ARCH/output/lib/$LIB_FILE"
done
if [ "$FF_TARGET" == "armv7" -o "$FF_TARGET" == "armv7s" -o "$FF_TARGET" == "i386" ]; then
sh tools/do-compile-ffmpeg.sh $FF_TARGET
elif [ "$FF_TARGET" == "all" ]; then
sh tools/do-compile-ffmpeg.sh armv7
sh tools/do-compile-ffmpeg.sh armv7s
sh tools/do-compile-ffmpeg.sh i386
lipo -create $LIPO_FLAGS -output $UNI_BUILD_ROOT/build/universal/lib/$LIB_FILE
lipo -info $UNI_BUILD_ROOT/build/universal/lib/$LIB_FILE
}
do_lipo_all () {
mkdir -p $UNI_BUILD_ROOT/build/universal/lib
do_lipo libavcodec.a
do_lipo libavformat.a
do_lipo libavutil.a
do_lipo libswresample.a
do_lipo libswscale.a
echo "lipo archs: $FF_ALL_ARCHS"
for FF_LIB in $FF_LIBS
do
do_lipo "$FF_LIB.a";
done
cp -R $UNI_BUILD_ROOT/build/ffmpeg-armv7/output/include $UNI_BUILD_ROOT/build/universal/
}
#----------
if [ "$FF_TARGET" = "armv7" -o "$FF_TARGET" = "armv7s" -o "$FF_TARGET" = "arm64" ]; then
echo_archs
sh tools/do-compile-ffmpeg.sh $FF_TARGET
elif [ "$FF_TARGET" = "i386" -o "$FF_TARGET" = "x86_64" ]; then
echo_archs
sh tools/do-compile-ffmpeg.sh $FF_TARGET
elif [ "$FF_TARGET" = "lipo" ]; then
echo_archs
do_lipo_all
elif [ "$FF_TARGET" = "all" ]; then
echo_archs
for ARCH in $FF_ALL_ARCHS
do
sh tools/do-compile-ffmpeg.sh $ARCH
done
do_lipo_all
elif [ "$FF_TARGET" == "check" ]; then
echo_archs
elif [ "$FF_TARGET" == "clean" ]; then
cd ffmpeg-armv7 && git clean -xdf && cd -
cd ffmpeg-armv7s && git clean -xdf && cd -
cd ffmpeg-i386 && git clean -xdf && cd -
echo_archs
for ARCH in $FF_ALL_ARCHS
do
cd ffmpeg-$ARCH && git clean -xdf && cd -
done
else
echo "You must specific target 'all, clean, armv7, armv7s, i386, ...'.\n"
echo "Usage:"
echo " compile-ffmpeg.sh armv7|armv7s|arm64|i386|x86_64"
echo " compile-ffmpeg.sh lipo"
echo " compile-ffmpeg.sh all"
echo " compile-ffmpeg.sh clean"
echo " compile-ffmpeg.sh check"
exit 1
fi
\ No newline at end of file
fi
......@@ -4,160 +4,150 @@
# https://github.com/kolyvan/kxmovie
# https://github.com/yixia/FFmpeg-Android
# http://git.videolan.org/?p=vlc-ports/android.git;a=summary
# https://github.com/kewlbear/FFmpeg-iOS-build-script/
#--------------------
echo "===================="
echo "[*] check env"
echo "[*] check host"
echo "===================="
set -e
#--------------------
# include
FF_TARGET=$1
if [ -z "$FF_TARGET" ]; then
echo "You must specific target 'armv7, armv7s, ...'.\n"
#--------------------
# common defines
FF_ARCH=$1
if [ -z "$FF_ARCH" ]; then
echo "You must specific an architecture 'armv7, armv7s, arm64, i386, x86_64, ...'.\n"
exit 1
fi
XCODE_ROOT="/Applications/Xcode4.6.3.app/Contents/Developer/Platforms"
FF_BUILD_ROOT=`pwd`
FF_TAGET_OS="darwin"
FF_CFG_FLAGS=
FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=
FF_PLATFORM_NAME=
FF_SDK_NAME=
# ffmpeg build params
export COMMON_FF_CFG_FLAGS=
source $FF_BUILD_ROOT/../tools/ffmpeg-common-profiles.sh
FFMPEG_CFG_FLAGS=
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS --arch=$FF_ARCH"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS --target-os=$FF_TAGET_OS"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS --enable-static"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS --disable-shared"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $COMMON_FF_CFG_FLAGS"
FFMPEG_EXTRA_CFLAGS=
# i386, x86_64
FFMPEG_CFG_FLAGS_SIMULATOR=
FFMPEG_CFG_FLAGS_SIMULATOR="$FFMPEG_CFG_FLAGS_SIMULATOR --disable-asm"
FFMPEG_CFG_FLAGS_SIMULATOR="$FFMPEG_CFG_FLAGS_SIMULATOR --disable-mmx"
FFMPEG_CFG_FLAGS_SIMULATOR="$FFMPEG_CFG_FLAGS_SIMULATOR --assert-level=2"
# armv7, armv7s, arm64
FFMPEG_CFG_FLAGS_ARM=
FFMPEG_CFG_FLAGS_ARM="$FFMPEG_CFG_FLAGS_ARM --enable-pic"
FFMPEG_CFG_FLAGS_ARM="$FFMPEG_CFG_FLAGS_ARM --enable-neon"
FFMPEG_CFG_FLAGS_ARM="$FFMPEG_CFG_FLAGS_ARM --enable-optimizations"
FFMPEG_CFG_FLAGS_ARM="$FFMPEG_CFG_FLAGS_ARM --disable-debug"
FFMPEG_CFG_FLAGS_ARM="$FFMPEG_CFG_FLAGS_ARM --enable-small"
echo "build_root: $FF_BUILD_ROOT"
#--------------------
echo "===================="
echo "[*] config target"
echo "[*] check gas-preprocessor"
echo "===================="
#----- common begin -----
FF_TOOLS_ROOT="$FF_BUILD_ROOT/../extra"
# FIXME: REMOVE ME
GAS_PREP_PATH="$FF_BUILD_ROOT/../extra/gas-preprocessor/gas-preprocessor.pl"
IPHONE_IOS_FF_PLATFORM_NAME="iPhoneOS.platform"
IPHONE_SIM_FF_PLATFORM_NAME="iPhoneSimulator.platform"
IPHONE_IOS_FF_SDK_NAME="iPhoneOS6.1.sdk"
IPHONE_SIM_FF_SDK_NAME="iPhoneSimulator6.1.sdk"
I386_FF_CFG_FLAGS=
I386_FF_CFG_FLAGS="$I386_FF_CFG_FLAGS --arch=i386"
I386_FF_CFG_FLAGS="$I386_FF_CFG_FLAGS --cpu=i386"
I386_FF_CFG_FLAGS="$I386_FF_CFG_FLAGS --disable-asm"
I386_FF_CFG_FLAGS="$I386_FF_CFG_FLAGS --disable-mmx"
I386_FF_CFG_FLAGS="$I386_FF_CFG_FLAGS --assert-level=2"
ARMV7_FF_CFG_FLAGS=
ARMV7_FF_CFG_FLAGS="$ARMV7_FF_CFG_FLAGS --arch=arm"
ARMV7_FF_CFG_FLAGS="$ARMV7_FF_CFG_FLAGS --cpu=cortex-a8"
ARMV7_FF_CFG_FLAGS="$ARMV7_FF_CFG_FLAGS --enable-pic"
ARMV7_FF_CFG_FLAGS="$ARMV7_FF_CFG_FLAGS --enable-neon"
ARMV7_FF_CFG_FLAGS="$ARMV7_FF_CFG_FLAGS --enable-optimizations"
ARMV7_FF_CFG_FLAGS="$ARMV7_FF_CFG_FLAGS --disable-debug"
ARMV7_FF_CFG_FLAGS="$ARMV7_FF_CFG_FLAGS --enable-small"
ARMV7_FF_EXTRA_CFLAGS="-mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad"
ARMV7_FF_EXTRA_LDFLAGS="-Wl"
export COMMON_FF_CFG_FLAGS=
source $FF_BUILD_ROOT/../tools/ffmpeg-common-profiles.sh
#----- common end -----
if [ $FF_TARGET == "armv7" ]; then
echo "armv7"
FF_BUILD_NAME="ffmpeg-armv7"
FF_PLATFORM_NAME="$IPHONE_IOS_FF_PLATFORM_NAME"
FF_SDK_NAME="$IPHONE_IOS_FF_SDK_NAME"
export PATH="$FF_TOOLS_ROOT/gas-preprocessor:$PATH"
FF_CFG_FLAGS="$FF_CFG_FLAGS $ARMV7_FF_CFG_FLAGS"
echo "gasp: $FF_TOOLS_ROOT/gas-preprocessor/gas-preprocessor.pl"
FF_EXTRA_CFLAGS=" $FF_EXTRA_CFLAGS $ARMV7_FF_EXTRA_CFLAGS -arch armv7"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS $ARMV7_FF_EXTRA_LDFLAGS -arch armv7"
elif [ $FF_TARGET == "armv7s" ]; then
echo "armv7s"
FF_BUILD_NAME="ffmpeg-armv7s"
FF_PLATFORM_NAME="$IPHONE_IOS_FF_PLATFORM_NAME"
FF_SDK_NAME="$IPHONE_IOS_FF_SDK_NAME"
#--------------------
echo "===================="
echo "[*] config arch $FF_ARCH"
echo "===================="
FF_CFG_FLAGS="$FF_CFG_FLAGS $ARMV7_FF_CFG_FLAGS"
FF_BUILD_NAME="unknown"
FF_XCRUN_PLATFORM="iPhoneOS"
FF_XCRUN_SIMULATOR=
FF_EXTRA_CFLAGS=" $FF_EXTRA_CFLAGS $ARMV7_FF_EXTRA_CFLAGS -arch armv7s"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS $ARMV7_FF_EXTRA_LDFLAGS -arch armv7s"
elif [ $FF_TARGET == "i386" ]; then
echo "i386"
if [ "$FF_ARCH" == "i386" ]; then
FF_BUILD_NAME="ffmpeg-i386"
FF_PLATFORM_NAME="$IPHONE_SIM_FF_PLATFORM_NAME"
FF_SDK_NAME="$IPHONE_SIM_FF_SDK_NAME"
FF_CFG_FLAGS="$FF_CFG_FLAGS $I386_FF_CFG_FLAGS"
FF_EXTRA_CFLAGS=" $FF_EXTRA_CFLAGS -arch i386"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS -arch i386"
FF_XCRUN_PLATFORM="iPhoneSimulator"
FF_XCRUN_SIMULATOR="-mios-simulator-version-min=5.0"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_SIMULATOR"
elif [ "$FF_ARCH" == "x86_64" ]; then
FF_BUILD_NAME="ffmpeg-x86_64"
FF_XCRUN_PLATFORM="iPhoneSimulator"
FF_XCRUN_SIMULATOR="-mios-simulator-version-min=7.0"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_SIMULATOR"
elif [ "$FF_ARCH" == "armv7" ]; then
FF_BUILD_NAME="ffmpeg-armv7"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_ARM"
# FFMPEG_CFG_CPU="--cpu=cortex-a8"
elif [ "$FF_ARCH" == "armv7s" ]; then
FF_BUILD_NAME="ffmpeg-armv7s"
FFMPEG_CFG_CPU="--cpu=swift"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_ARM"
elif [ "$FF_ARCH" == "arm64" ]; then
FF_BUILD_NAME="ffmpeg-arm64"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_ARM"
else
echo "unknown target $FF_TARGET";
echo "unknown architecture $FF_ARCH";
exit 1
fi
echo "build_name: $FF_BUILD_NAME"
echo "platform: $FF_XCRUN_PLATFORM"
echo "simulator: $FF_XCRUN_SIMULATOR"
#--------------------
echo "===================="
echo "[*] make ios toolchain"
echo "[*] make ios toolchain $FF_BUILD_NAME"
echo "===================="
FF_SOURCE="$FF_BUILD_ROOT/$FF_BUILD_NAME"
FF_PREFIX="$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output"
FF_BUILD_SOURCE="$FF_BUILD_ROOT/$FF_BUILD_NAME"
FF_BUILD_PREFIX="$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output"
FF_PLATFORM_ROOT="$XCODE_ROOT/$FF_PLATFORM_NAME"
FF_SDK_ROOT="$FF_PLATFORM_ROOT/Developer/SDKs/$FF_SDK_NAME"
FF_LIB_ROOT="$FF_PLATFORM_ROOT/Developer/SDKs/$FF_SDK_NAME/usr/lib/system"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS --prefix=$FF_BUILD_PREFIX"
FF_CC_FLAG="$FF_PLATFORM_ROOT/Developer/usr/bin/gcc"
# FIXME: REMOVE ME
FF_AS_FLAG="$GAS_PREP_PATH $FF_CC_FLAG"
echo "SDK: $FF_SDK_ROOT"
mkdir -p $FF_BUILD_PREFIX
echo "build_source: $FF_BUILD_SOURCE"
echo "build_prefix: $FF_BUILD_PREFIX"
export PATH="$FF_TOOLS_ROOT/gas-preprocessor:$PATH"
FF_CFG_FLAGS="$FF_CFG_FLAGS --cc=$FF_CC_FLAG"
# FIXME: REMOVE ME
# FF_CFG_FLAGS="$FF_CFG_FLAGS --as=\"$FF_AS_FLAG\""
FF_CFG_FLAGS="$FF_CFG_FLAGS --sysroot=$FF_SDK_ROOT"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS --isysroot=$FF_SDK_ROOT -L$FF_LIB_ROOT"
mkdir -p $FF_PREFIX
#--------------------
echo "\n--------------------"
echo "[*] check ffmpeg env"
echo "[*] configurate ffmpeg"
echo "--------------------"
FF_CFG_FLAGS="$FF_CFG_FLAGS $COMMON_FF_CFG_FLAGS"
FF_CFG_FLAGS="$FF_CFG_FLAGS --prefix=$FF_PREFIX"
FF_CFG_FLAGS="$FF_CFG_FLAGS --target-os=$FF_TAGET_OS"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-static"
FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-shared"
FF_XCRUN_SDK=`echo $FF_XCRUN_PLATFORM | tr '[:upper:]' '[:lower:]'`
FF_XCRUN_CC="xcrun -sdk $FF_XCRUN_SDK clang"
FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_CPU"
#--------------------
echo "\n--------------------"
echo "[*] configurate ffmpeg"
echo "--------------------"
cd $FF_SOURCE
FFMPEG_CFLAGS=
FFMPEG_CFLAGS="$FFMPEG_CFLAGS -arch $FF_ARCH"
FFMPEG_CFLAGS="$FFMPEG_CFLAGS $FF_XCRUN_SIMULATOR"
FFMPEG_CFLAGS="$FFMPEG_CFLAGS $FFMPEG_EXTRA_CFLAGS"
FFMPEG_CXXFLAGS="$FFMPEG_CFLAGS"
FFMPEG_LDFLAGS="$FFMPEG_CFLAGS"
cd $FF_BUILD_SOURCE
if [ -f "./config.h" ]; then
echo 'reuse configure'
else
echo "config: $FF_CFG_FLAGS"
./configure $FF_CFG_FLAGS \
--extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" \
--extra-ldflags="$FF_EXTRA_LDFLAGS"
echo "config: $FFMPEG_CFG_FLAGS $FF_XCRUN_CC"
./configure \
$FFMPEG_CFG_FLAGS \
--cc="$FF_XCRUN_CC" \
$FFMPEG_CFG_CPU \
--extra-cflags="$FFMPEG_CFLAGS" \
--extra-cxxflags="$FFMPEG_CXXFLAGS" \
--extra-ldflags="$FFMPEG_LDFLAGS"
make clean
fi
......@@ -165,6 +155,6 @@ fi
echo "\n--------------------"
echo "[*] compile ffmpeg"
echo "--------------------"
cp config.* $FF_PREFIX
make $FF_MAKEFLAGS
cp config.* $FF_BUILD_PREFIX
make -j3
make install
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册