mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 21:45:19 +00:00
230 lines
5.4 KiB
Bash
Executable File
230 lines
5.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -x
|
|
|
|
RAW_ARCHS="$2"
|
|
ARCHS=""
|
|
|
|
for RAW_ARCH in $RAW_ARCHS; do
|
|
ARCH_NAME="$RAW_ARCH"
|
|
if [ "$ARCH_NAME" = "i386" -o "$ARCH_NAME" = "x86_64" -o "$ARCH_NAME" = "arm64" -o "$ARCH_NAME" = "armv7" -o "$ARCH_NAME" = "sim_arm64" ]
|
|
then
|
|
ARCHS="$ARCHS $ARCH_NAME"
|
|
else
|
|
echo "Invalid architecture $ARCH"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
BUILD_DIR=$3
|
|
SOURCE_DIR=$4
|
|
|
|
FF_VERSION="4.1"
|
|
SOURCE="$SOURCE_DIR/ffmpeg-$FF_VERSION"
|
|
|
|
GAS_PREPROCESSOR_PATH="$SOURCE_DIR/gas-preprocessor.pl"
|
|
|
|
FAT="$BUILD_DIR/FFmpeg-iOS"
|
|
|
|
SCRATCH="$BUILD_DIR/scratch"
|
|
THIN="$BUILD_DIR/thin"
|
|
|
|
PKG_CONFIG="$SOURCE_DIR/pkg-config"
|
|
|
|
export PATH="$SOURCE_DIR:$PATH"
|
|
|
|
LIB_NAMES="libavcodec libavformat libavutil libswresample"
|
|
|
|
set -e
|
|
|
|
CONFIGURE_FLAGS="--enable-cross-compile --disable-programs \
|
|
--disable-armv5te --disable-armv6 --disable-armv6t2 \
|
|
--disable-doc --enable-pic --disable-all --disable-everything \
|
|
--enable-avcodec \
|
|
--enable-swresample \
|
|
--enable-avformat \
|
|
--disable-xlib \
|
|
--enable-libopus \
|
|
--enable-libvpx \
|
|
--enable-audiotoolbox \
|
|
--enable-bsf=aac_adtstoasc \
|
|
--enable-decoder=h264,libvpx_vp9,hevc,libopus,mp3,aac,flac,alac_at,pcm_s16le,pcm_s24le,gsm_ms_at \
|
|
--enable-demuxer=aac,mov,m4v,mp3,ogg,libopus,flac,wav,aiff,matroska \
|
|
--enable-parser=aac,h264,mp3,libopus \
|
|
--enable-protocol=file \
|
|
--enable-muxer=mp4 \
|
|
"
|
|
|
|
|
|
#--enable-hwaccel=h264_videotoolbox,hevc_videotoolbox \
|
|
|
|
EXTRA_CFLAGS="-DCONFIG_SAFE_BITSTREAM_READER=1"
|
|
|
|
if [ "$1" = "debug" ];
|
|
then
|
|
CONFIGURE_FLAGS="$CONFIGURE_FLAGS --disable-optimizations --disable-stripping"
|
|
elif [ "$1" = "release" ];
|
|
then
|
|
CONFIGURE_FLAGS="$CONFIGURE_FLAGS --disable-debug"
|
|
else
|
|
echo "No configuration specified (debug / release)"
|
|
exit 1
|
|
fi
|
|
|
|
COMPILE="y"
|
|
|
|
DEPLOYMENT_TARGET="9.0"
|
|
|
|
LIBS_HASH=""
|
|
for ARCH in $ARCHS
|
|
do
|
|
for LIB_NAME in $LIB_NAMES
|
|
do
|
|
LIB="$THIN/$ARCH/lib/$LIB_NAME.a"
|
|
if [ -f "$LIB" ]; then
|
|
LIB_DATE=`crc32 "$LIB"`
|
|
LIBS_HASH="$LIBS_HASH $ARCH/$LIB:$LIB_DATE"
|
|
fi
|
|
done
|
|
done
|
|
|
|
if [ "$COMPILE" ]
|
|
then
|
|
if [ ! `which yasm` ]; then
|
|
echo 'Yasm not found'
|
|
exit 1
|
|
fi
|
|
if [ ! `which pkg-config` ]; then
|
|
echo 'pkg-config not found'
|
|
exit 1
|
|
else
|
|
echo "PATH=$PATH"
|
|
echo "pkg-config=$(which pkg-config)"
|
|
fi
|
|
if [ ! `which "$GAS_PREPROCESSOR_PATH"` ]; then
|
|
echo '$GAS_PREPROCESSOR_PATH not found.'
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -r $SOURCE ]; then
|
|
echo "FFmpeg source not found at $SOURCE"
|
|
exit 1
|
|
fi
|
|
|
|
for RAW_ARCH in $ARCHS
|
|
do
|
|
ARCH="$RAW_ARCH"
|
|
if [ "$RAW_ARCH" == "sim_arm64" ]; then
|
|
ARCH="arm64"
|
|
fi
|
|
|
|
echo "building $RAW_ARCH..."
|
|
mkdir -p "$SCRATCH/$RAW_ARCH"
|
|
pushd "$SCRATCH/$RAW_ARCH"
|
|
|
|
LIBOPUS_PATH="$SOURCE_DIR/libopus"
|
|
LIBVPX_PATH="$SOURCE_DIR/libvpx"
|
|
|
|
CFLAGS="$EXTRA_CFLAGS -arch $ARCH"
|
|
if [ "$RAW_ARCH" = "i386" -o "$RAW_ARCH" = "x86_64" ]
|
|
then
|
|
PLATFORM="iPhoneSimulator"
|
|
CFLAGS="$CFLAGS -mios-simulator-version-min=$DEPLOYMENT_TARGET"
|
|
elif [ "$RAW_ARCH" = "sim_arm64" ]; then
|
|
PLATFORM="iPhoneSimulator"
|
|
CFLAGS="$CFLAGS -mios-simulator-version-min=$DEPLOYMENT_TARGET --target=arm64-apple-ios$DEPLOYMENT_TARGET-simulator"
|
|
else
|
|
PLATFORM="iPhoneOS"
|
|
CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"
|
|
if [ "$ARCH" = "arm64" ]
|
|
then
|
|
EXPORT="GASPP_FIX_XCODE5=1"
|
|
fi
|
|
fi
|
|
|
|
XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`
|
|
CC="xcrun -sdk $XCRUN_SDK clang"
|
|
|
|
if [ "$RAW_ARCH" = "arm64" ] || [ "$RAW_ARCH" = "sim_arm64" ]
|
|
then
|
|
AS="$GAS_PREPROCESSOR_PATH -arch aarch64 -- $CC"
|
|
else
|
|
AS="$GAS_PREPROCESSOR_PATH -- $CC"
|
|
fi
|
|
|
|
CXXFLAGS="$CFLAGS"
|
|
LDFLAGS="$CFLAGS"
|
|
|
|
CONFIGURED_MARKER="$THIN/$RAW_ARCH/configured_marker"
|
|
CONFIGURED_MARKER_CONTENTS=""
|
|
if [ -r "$CONFIGURED_MARKER" ]
|
|
then
|
|
CONFIGURED_MARKER_CONTENTS=`cat "$CONFIGURED_MARKER"`
|
|
fi
|
|
if [ "$CONFIGURED_MARKER_CONTENTS" = "$CONFIGURE_FLAGS" ]
|
|
then
|
|
echo "1" >/dev/null
|
|
else
|
|
mkdir -p "$THIN/$RAW_ARCH"
|
|
TMPDIR=${TMPDIR/%\/} "$SOURCE/configure" \
|
|
--target-os=darwin \
|
|
--arch=$ARCH \
|
|
--cc="$CC" \
|
|
--as="$AS" \
|
|
$CONFIGURE_FLAGS \
|
|
--extra-cflags="$CFLAGS" \
|
|
--extra-ldflags="$LDFLAGS" \
|
|
--prefix="$THIN/$RAW_ARCH" \
|
|
--pkg-config="$PKG_CONFIG" \
|
|
--pkg-config-flags="--libopus_path $LIBOPUS_PATH --libvpx_path $LIBVPX_PATH" \
|
|
|| exit 1
|
|
echo "$CONFIGURE_FLAGS" > "$CONFIGURED_MARKER"
|
|
fi
|
|
|
|
CORE_COUNT=`PATH="$PATH:/usr/sbin" sysctl -n hw.logicalcpu`
|
|
make -j$CORE_COUNT install $EXPORT || exit 1
|
|
|
|
popd
|
|
done
|
|
fi
|
|
|
|
UPDATED_LIBS_HASH=""
|
|
for ARCH in $ARCHS
|
|
do
|
|
for LIB_NAME in $LIB_NAMES
|
|
do
|
|
LIB="$THIN/$ARCH/lib/$LIB_NAME.a"
|
|
if [ -f "$LIB" ]; then
|
|
LIB_DATE=`crc32 "$LIB"`
|
|
UPDATED_LIBS_HASH="$UPDATED_LIBS_HASH $ARCH/$LIB:$LIB_DATE"
|
|
fi
|
|
done
|
|
done
|
|
|
|
if [ "$UPDATED_LIBS_HASH" = "$LIBS_HASH" ]
|
|
then
|
|
echo "Libs aren't changed, skipping lipo"
|
|
else
|
|
echo "UPDATED_LIBS_HASH=$UPDATED_LIBS_HASH"
|
|
echo "LIBS_HASH=$LIBS_HASH"
|
|
LIPO="y"
|
|
fi
|
|
|
|
if [ "$LIPO" ]
|
|
then
|
|
echo "building fat binaries in $FAT"
|
|
mkdir -p "$FAT"/lib
|
|
set - $ARCHS
|
|
for LIB in "$THIN/$1/lib/"*.a
|
|
do
|
|
LIB_NAME="$(basename $LIB)"
|
|
echo "LIPO_INPUT command find \"$THIN\" -name \"$LIB_NAME\""
|
|
LIPO_INPUT=`find "$THIN" -name "$LIB_NAME"`
|
|
lipo -create $LIPO_INPUT -output "$FAT/lib/$LIB_NAME" || exit 1
|
|
done
|
|
|
|
cp -rf "$THIN/$1/include" "$FAT"
|
|
fi
|
|
|
|
echo Done
|