379 lines
12 KiB
Bash
Executable File
379 lines
12 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [[ -z ${ARCH} ]]; then
|
|
echo -e "(*) ARCH not defined\n"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z ${IOS_MIN_VERSION} ]]; then
|
|
echo -e "(*) IOS_MIN_VERSION not defined\n"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z ${TARGET_SDK} ]]; then
|
|
echo -e "(*) TARGET_SDK not defined\n"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z ${SDK_PATH} ]]; then
|
|
echo -e "(*) SDK_PATH not defined\n"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z ${BASEDIR} ]]; then
|
|
echo -e "(*) BASEDIR not defined\n"
|
|
exit 1
|
|
fi
|
|
|
|
if ! [ -x "$(command -v pkg-config)" ]; then
|
|
echo -e "(*) pkg-config command not found\n"
|
|
exit 1
|
|
fi
|
|
|
|
# ENABLE COMMON FUNCTIONS
|
|
. ${BASEDIR}/build/ios-common.sh
|
|
|
|
# PREPARING PATHS & DEFINING ${INSTALL_PKG_CONFIG_DIR}
|
|
LIB_NAME="ffmpeg"
|
|
set_toolchain_clang_paths ${LIB_NAME}
|
|
|
|
# PREPARING FLAGS
|
|
TARGET_HOST=$(get_target_host)
|
|
FFMPEG_CFLAGS=""
|
|
FFMPEG_LDFLAGS=""
|
|
export PKG_CONFIG_LIBDIR="${INSTALL_PKG_CONFIG_DIR}"
|
|
|
|
TARGET_CPU=""
|
|
TARGET_ARCH=""
|
|
NEON_FLAG=""
|
|
case ${ARCH} in
|
|
armv7)
|
|
TARGET_CPU="armv7"
|
|
TARGET_ARCH="armv7"
|
|
NEON_FLAG=" --enable-neon"
|
|
;;
|
|
armv7s)
|
|
TARGET_CPU="armv7s"
|
|
TARGET_ARCH="armv7s"
|
|
NEON_FLAG=" --enable-neon"
|
|
;;
|
|
arm64)
|
|
TARGET_CPU="armv8"
|
|
TARGET_ARCH="aarch64"
|
|
NEON_FLAG=" --enable-neon"
|
|
;;
|
|
i386)
|
|
TARGET_CPU="i386"
|
|
TARGET_ARCH="i386"
|
|
NEON_FLAG=" --disable-neon"
|
|
;;
|
|
x86-64)
|
|
TARGET_CPU="x86_64"
|
|
TARGET_ARCH="x86_64"
|
|
NEON_FLAG=" --disable-neon"
|
|
;;
|
|
esac
|
|
|
|
CONFIGURE_POSTFIX=""
|
|
|
|
for library in {1..35}
|
|
do
|
|
if [[ ${!library} -eq 1 ]]; then
|
|
ENABLED_LIBRARY=$(get_library_name $((library - 1)))
|
|
|
|
echo -e "INFO: Enabling library ${ENABLED_LIBRARY}" >> ${BASEDIR}/build.log
|
|
|
|
case ${ENABLED_LIBRARY} in
|
|
fontconfig)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags fontconfig)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static fontconfig)"
|
|
CONFIGURE_POSTFIX+=" --enable-libfontconfig"
|
|
;;
|
|
freetype)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags freetype2)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static freetype2)"
|
|
CONFIGURE_POSTFIX+=" --enable-libfreetype"
|
|
;;
|
|
fribidi)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags fribidi)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static fribidi)"
|
|
CONFIGURE_POSTFIX+=" --enable-libfribidi"
|
|
;;
|
|
gmp)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags gmp)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static gmp)"
|
|
CONFIGURE_POSTFIX+=" --enable-gmp"
|
|
;;
|
|
gnutls)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags gnutls)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static gnutls)"
|
|
CONFIGURE_POSTFIX+=" --enable-gnutls"
|
|
;;
|
|
kvazaar)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags kvazaar)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static kvazaar)"
|
|
CONFIGURE_POSTFIX+=" --enable-libkvazaar"
|
|
;;
|
|
lame)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags libmp3lame)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libmp3lame)"
|
|
CONFIGURE_POSTFIX+=" --enable-libmp3lame"
|
|
;;
|
|
libass)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags libass)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libass)"
|
|
CONFIGURE_POSTFIX+=" --enable-libass"
|
|
;;
|
|
libiconv)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags libiconv)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libiconv)"
|
|
CONFIGURE_POSTFIX+=" --enable-iconv"
|
|
;;
|
|
libilbc)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags libilbc)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libilbc)"
|
|
CONFIGURE_POSTFIX+=" --enable-libilbc"
|
|
;;
|
|
libtheora)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags theora)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static theora)"
|
|
CONFIGURE_POSTFIX+=" --enable-libtheora"
|
|
;;
|
|
libvorbis)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags vorbis)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static vorbis)"
|
|
CONFIGURE_POSTFIX+=" --enable-libvorbis"
|
|
;;
|
|
libvpx)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags vpx)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs vpx)"
|
|
CONFIGURE_POSTFIX+=" --enable-libvpx"
|
|
;;
|
|
libwebp)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags libwebp)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libwebp)"
|
|
CONFIGURE_POSTFIX+=" --enable-libwebp"
|
|
;;
|
|
libxml2)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags libxml-2.0)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libxml-2.0)"
|
|
CONFIGURE_POSTFIX+=" --enable-libxml2"
|
|
;;
|
|
opencore-amr)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags opencore-amrnb)"
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags opencore-amrwb)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static opencore-amrnb)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static opencore-amrwb)"
|
|
CONFIGURE_POSTFIX+=" --enable-libopencore-amrnb"
|
|
CONFIGURE_POSTFIX+=" --enable-libopencore-amrwb"
|
|
;;
|
|
opus)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags opus)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static opus)"
|
|
CONFIGURE_POSTFIX+=" --enable-libopus"
|
|
;;
|
|
shine)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags shine)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static shine)"
|
|
CONFIGURE_POSTFIX+=" --enable-libshine"
|
|
;;
|
|
snappy)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags snappy)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static snappy)"
|
|
CONFIGURE_POSTFIX+=" --enable-libsnappy"
|
|
;;
|
|
speex)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags speex)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static speex)"
|
|
CONFIGURE_POSTFIX+=" --enable-libspeex"
|
|
;;
|
|
wavpack)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags wavpack)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static wavpack)"
|
|
CONFIGURE_POSTFIX+=" --enable-libwavpack"
|
|
;;
|
|
x264)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags x264)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static x264)"
|
|
CONFIGURE_POSTFIX+=" --enable-libx264 --enable-gpl"
|
|
;;
|
|
xvidcore)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags xvidcore)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static xvidcore)"
|
|
CONFIGURE_POSTFIX+=" --enable-libxvid --enable-gpl"
|
|
;;
|
|
expat)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags expat)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static expat)"
|
|
;;
|
|
libogg)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags ogg)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static ogg)"
|
|
;;
|
|
libpng)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags libpng)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libpng)"
|
|
;;
|
|
libuuid)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags uuid)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static uuid)"
|
|
;;
|
|
nettle)
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags nettle)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static nettle)"
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags hogweed)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static hogweed)"
|
|
;;
|
|
ios-*)
|
|
|
|
# BUILT-IN LIBRARIES SHARE INCLUDE AND LIB DIRECTORIES
|
|
# INCLUDING ONLY ONE OF THEM IS ENOUGH
|
|
FFMPEG_CFLAGS+=" $(pkg-config --cflags zlib)"
|
|
FFMPEG_LDFLAGS+=" $(pkg-config --libs --static zlib)"
|
|
|
|
case ${ENABLED_LIBRARY} in
|
|
ios-zlib)
|
|
CONFIGURE_POSTFIX+=" --enable-zlib"
|
|
;;
|
|
ios-audiotoolbox)
|
|
CONFIGURE_POSTFIX+=" --enable-audiotoolbox"
|
|
;;
|
|
ios-coreimage)
|
|
CONFIGURE_POSTFIX+=" --enable-coreimage"
|
|
;;
|
|
ios-bzip2)
|
|
CONFIGURE_POSTFIX+=" --enable-bzlib"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
else
|
|
|
|
# THE FOLLOWING LIBRARIES SHOULD BE EXPLICITLY DISABLED TO PREVENT AUTODETECT
|
|
if [[ ${library} -eq 8 ]]; then
|
|
CONFIGURE_POSTFIX+=" --disable-iconv"
|
|
elif [[ ${library} -eq 32 ]]; then
|
|
CONFIGURE_POSTFIX+=" --disable-zlib"
|
|
elif [[ ${library} -eq 33 ]]; then
|
|
CONFIGURE_POSTFIX+=" --disable-audiotoolbox"
|
|
elif [[ ${library} -eq 34 ]]; then
|
|
CONFIGURE_POSTFIX+=" --disable-coreimage"
|
|
elif [[ ${library} -eq 35 ]]; then
|
|
CONFIGURE_POSTFIX+=" --disable-bzlib"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# CFLAGS PARTS
|
|
ARCH_CFLAGS=$(get_arch_specific_cflags);
|
|
APP_CFLAGS=$(get_app_specific_cflags ${LIB_NAME});
|
|
COMMON_CFLAGS=$(get_common_cflags);
|
|
OPTIMIZATION_CFLAGS=$(get_size_optimization_cflags ${LIB_NAME});
|
|
MIN_VERSION_CFLAGS=$(get_min_version_cflags);
|
|
COMMON_INCLUDES=$(get_common_includes);
|
|
|
|
# LDFLAGS PARTS
|
|
ARCH_LDFLAGS=$(get_arch_specific_ldflags);
|
|
LINKED_LIBRARIES=$(get_common_linked_libraries);
|
|
COMMON_LDFLAGS=$(get_common_ldflags);
|
|
|
|
# REORDERED FLAGS
|
|
CFLAGS="${ARCH_CFLAGS} ${APP_CFLAGS} ${COMMON_CFLAGS} ${OPTIMIZATION_CFLAGS} ${MIN_VERSION_CFLAGS} ${FFMPEG_CFLAGS} ${COMMON_INCLUDES}"
|
|
CXXFLAGS=$(get_cxxflags ${LIB_NAME})
|
|
LDFLAGS="${ARCH_LDFLAGS} ${FFMPEG_LDFLAGS} ${LINKED_LIBRARIES} ${COMMON_LDFLAGS}"
|
|
|
|
cd ${BASEDIR}/src/${LIB_NAME} || exit 1
|
|
|
|
echo -n -e "\n${LIB_NAME}: "
|
|
|
|
make distclean 2>/dev/null 1>/dev/null
|
|
|
|
./configure \
|
|
--sysroot=${SDK_PATH} \
|
|
--prefix=${BASEDIR}/prebuilt/ios-$(get_target_host)/${LIB_NAME} \
|
|
--extra-cflags="${CFLAGS}" \
|
|
--extra-cxxflags="${CXXFLAGS}" \
|
|
--extra-ldflags="${LDFLAGS}" \
|
|
--enable-version3 \
|
|
--arch="${TARGET_ARCH}" \
|
|
--cpu="${TARGET_CPU}" \
|
|
--target-os=darwin \
|
|
--ar="${AR}" \
|
|
--cc="${CC}" \
|
|
--cxx="${CXX}" \
|
|
--as="${AS}" \
|
|
--ranlib="${RANLIB}" \
|
|
--strip="${STRIP}" \
|
|
${NEON_FLAG} \
|
|
--enable-cross-compile \
|
|
--enable-pic \
|
|
--enable-asm \
|
|
--enable-inline-asm \
|
|
--enable-optimizations \
|
|
--enable-small \
|
|
--enable-swscale \
|
|
--enable-shared \
|
|
--disable-xmm-clobber-test \
|
|
--disable-debug \
|
|
--disable-neon-clobber-test \
|
|
--disable-programs \
|
|
--disable-postproc \
|
|
--disable-doc \
|
|
--disable-htmlpages \
|
|
--disable-manpages \
|
|
--disable-podpages \
|
|
--disable-txtpages \
|
|
--disable-static \
|
|
--disable-jack \
|
|
--disable-sndio \
|
|
--disable-schannel \
|
|
--disable-sdl2 \
|
|
--disable-securetransport \
|
|
--disable-xlib \
|
|
--disable-cuda \
|
|
--disable-cuvid \
|
|
--disable-nvenc \
|
|
--disable-vaapi \
|
|
--disable-vda \
|
|
--disable-vdpau \
|
|
--disable-videotoolbox \
|
|
--disable-appkit \
|
|
--disable-alsa \
|
|
--disable-cuda \
|
|
--disable-cuvid \
|
|
--disable-nvenc \
|
|
--disable-vaapi \
|
|
--disable-vda \
|
|
--disable-vdpau \
|
|
--disable-videotoolbox \
|
|
${CONFIGURE_POSTFIX} 1>>${BASEDIR}/build.log 2>>${BASEDIR}/build.log
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "failed"
|
|
exit 1
|
|
fi
|
|
|
|
make -j$(get_cpu_count) 1>>${BASEDIR}/build.log 2>>${BASEDIR}/build.log
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "failed"
|
|
exit 1
|
|
fi
|
|
|
|
make install 1>>${BASEDIR}/build.log 2>>${BASEDIR}/build.log
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "failed"
|
|
exit 1
|
|
fi
|
|
|
|
# MANUALLY ADD CONFIG HEADER
|
|
cp -f ${BASEDIR}/src/ffmpeg/config.h ${BASEDIR}/prebuilt/ios-$(get_target_host)/ffmpeg/include
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "ok"
|
|
else
|
|
echo "failed"
|
|
exit 1
|
|
fi
|