summaryrefslogtreecommitdiffstats
path: root/tools/buildsteps/windows/buildffmpeg.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/buildsteps/windows/buildffmpeg.sh')
-rw-r--r--tools/buildsteps/windows/buildffmpeg.sh129
1 files changed, 129 insertions, 0 deletions
diff --git a/tools/buildsteps/windows/buildffmpeg.sh b/tools/buildsteps/windows/buildffmpeg.sh
new file mode 100644
index 0000000..f2e72cb
--- /dev/null
+++ b/tools/buildsteps/windows/buildffmpeg.sh
@@ -0,0 +1,129 @@
+#!/bin/bash
+
+[[ -f buildhelpers.sh ]] &&
+ source buildhelpers.sh
+
+FFMPEG_CONFIG_FILE=/xbmc/tools/buildsteps/windows/ffmpeg_options.txt
+FFMPEG_VERSION_FILE=/xbmc/tools/depends/target/ffmpeg/FFMPEG-VERSION
+FFMPEG_BASE_OPTS="--disable-debug --disable-doc --enable-gpl --enable-w32threads"
+FFMPEG_DEFAULT_OPTS=""
+FFMPEG_TARGET_OS=mingw32
+
+do_loaddeps $FFMPEG_VERSION_FILE
+FFMPEGDESTDIR=$PREFIX
+
+do_getFFmpegConfig() {
+ if [[ -f "$FFMPEG_CONFIG_FILE" ]]; then
+ FFMPEG_OPTS_SHARED="$FFMPEG_BASE_OPTS $(cat "$FFMPEG_CONFIG_FILE" | sed -e 's:\\::g' -e 's/#.*//')"
+ else
+ FFMPEG_OPTS_SHARED="$FFMPEG_BASE_OPTS $FFMPEG_DEFAULT_OPTS"
+ fi
+
+ if [ "$ARCH" == "x86_64" ]; then
+ FFMPEG_TARGET_OS=mingw64
+ elif [ "$ARCH" == "x86" ]; then
+ FFMPEG_TARGET_OS=mingw32
+ do_addOption "--cpu=i686"
+ elif [ "$ARCH" == "arm" ]; then
+ FFMPEG_TARGET_OS=mingw32
+ do_addOption "--cpu=armv7"
+ fi
+
+ # add options for static modplug
+ if do_checkForOptions "--enable-libmodplug"; then
+ do_addOption "--extra-cflags=-DMODPLUG_STATIC"
+ fi
+
+ # handle gplv3 libs
+ if do_checkForOptions "--enable-libopencore-amrwb --enable-libopencore-amrnb \
+ --enable-libvo-aacenc --enable-libvo-amrwbenc"; then
+ do_addOption "--enable-version3"
+ fi
+
+ do_removeOption "--enable-nonfree"
+ do_removeOption "--enable-libfdk-aac"
+ do_removeOption "--enable-nvenc"
+ do_removeOption "--enable-libfaac"
+
+ # remove libs that don't work with shared
+ do_removeOption "--enable-decklink"
+ do_removeOption "--enable-libutvideo"
+ do_removeOption "--enable-libgme"
+}
+
+do_checkForOptions() {
+ local isPresent=1
+ for option in "$@"; do
+ for option2 in $option; do
+ if echo "$FFMPEG_OPTS_SHARED" | grep -q -E -e "$option2"; then
+ isPresent=0
+ fi
+ done
+ done
+ return $isPresent
+}
+
+do_addOption() {
+ local option=${1%% *}
+ local shared=$2
+ if ! do_checkForOptions "$option"; then
+ FFMPEG_OPTS_SHARED="$FFMPEG_OPTS_SHARED $option"
+ fi
+}
+
+do_removeOption() {
+ local option=${1%% *}
+ FFMPEG_OPTS_SHARED=$(echo "$FFMPEG_OPTS_SHARED" | sed "s/ *$option//g")
+}
+
+do_getFFmpegConfig
+
+# enable OpenSSL, because schannel has issues
+do_removeOption "--enable-gnutls"
+do_addOption "--disable-gnutls"
+do_addOption "--enable-openssl"
+do_addOption "--enable-nonfree"
+do_addOption "--toolchain=msvc"
+do_addOption "--disable-mediafoundation"
+
+if [ "$ARCH" == "x86_64" ]; then
+ FFMPEG_TARGET_OS=win64
+elif [ "$ARCH" = "x86" ]; then
+ FFMPEG_TARGET_OS=win32
+elif [ "$ARCH" = "arm" ]; then
+ FFMPEG_TARGET_OS=win32
+fi
+
+export CFLAGS=""
+export CXXFLAGS=""
+export LDFLAGS=""
+
+extra_cflags="-I$LOCALDESTDIR/include -I/depends/$TRIPLET/include -DWIN32_LEAN_AND_MEAN"
+extra_ldflags="-LIBPATH:\"$LOCALDESTDIR/lib\" -LIBPATH:\"$MINGW_PREFIX/lib\" -LIBPATH:\"/depends/$TRIPLET/lib\""
+if [ $win10 == "yes" ]; then
+ do_addOption "--enable-cross-compile"
+ extra_cflags=$extra_cflags" -MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00"
+ extra_ldflags=$extra_ldflags" -APPCONTAINER WindowsApp.lib"
+fi
+
+# compile ffmpeg with debug symbols
+if do_checkForOptions "--enable-debug"; then
+ extra_cflags=$extra_cflags" -MDd"
+ extra_ldflags=$extra_ldflags" -NODEFAULTLIB:libcmt"
+fi
+
+cd $LOCALBUILDDIR
+
+do_clean_get $1
+[ -f config.mak ] && make distclean
+do_print_status "$LIBNAME-$VERSION (${TRIPLET})" "$blue_color" "Configuring"
+
+[[ -z "$extra_cflags" ]] && extra_cflags=-DPTW32_STATIC_LIB
+[[ -z "$extra_ldflags" ]] && extra_ldflags=-static-libgcc
+
+$LOCALSRCDIR/configure --target-os=$FFMPEG_TARGET_OS --prefix=$FFMPEGDESTDIR --arch=$ARCH \
+ $FFMPEG_OPTS_SHARED \
+ --extra-cflags="$extra_cflags" --extra-ldflags="$extra_ldflags"
+
+do_makelib
+exit $?