From 65756d41a315f1c72399a0318f0b749cc4ab2d45 Mon Sep 17 00:00:00 2001 From: Rechi Date: Sat, 29 Apr 2017 16:54:44 +0200 Subject: [buildsteps][windows] make-mingwlibs --- tools/buildsteps/win32/buildffmpeg.sh | 168 ------------------ tools/buildsteps/win32/buildhelpers.sh | 206 ---------------------- tools/buildsteps/win32/buildlibdvd.sh | 84 --------- tools/buildsteps/win32/fmpeg_options.txt | 21 --- tools/buildsteps/win32/make-mingwlibs.bat | 75 -------- tools/buildsteps/win32/make-mingwlibs.sh | 153 ---------------- tools/buildsteps/windows/buildffmpeg.sh | 168 ++++++++++++++++++ tools/buildsteps/windows/buildhelpers.sh | 206 ++++++++++++++++++++++ tools/buildsteps/windows/buildlibdvd.sh | 84 +++++++++ tools/buildsteps/windows/fmpeg_options.txt | 21 +++ tools/buildsteps/windows/make-mingwlibs.bat | 73 ++++++++ tools/buildsteps/windows/make-mingwlibs.sh | 153 ++++++++++++++++ tools/buildsteps/windows/win32/make-mingwlibs.bat | 5 + 13 files changed, 710 insertions(+), 707 deletions(-) delete mode 100644 tools/buildsteps/win32/buildffmpeg.sh delete mode 100644 tools/buildsteps/win32/buildhelpers.sh delete mode 100644 tools/buildsteps/win32/buildlibdvd.sh delete mode 100644 tools/buildsteps/win32/fmpeg_options.txt delete mode 100644 tools/buildsteps/win32/make-mingwlibs.bat delete mode 100644 tools/buildsteps/win32/make-mingwlibs.sh create mode 100644 tools/buildsteps/windows/buildffmpeg.sh create mode 100644 tools/buildsteps/windows/buildhelpers.sh create mode 100644 tools/buildsteps/windows/buildlibdvd.sh create mode 100644 tools/buildsteps/windows/fmpeg_options.txt create mode 100644 tools/buildsteps/windows/make-mingwlibs.bat create mode 100644 tools/buildsteps/windows/make-mingwlibs.sh create mode 100644 tools/buildsteps/windows/win32/make-mingwlibs.bat diff --git a/tools/buildsteps/win32/buildffmpeg.sh b/tools/buildsteps/win32/buildffmpeg.sh deleted file mode 100644 index 9a16a01802..0000000000 --- a/tools/buildsteps/win32/buildffmpeg.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/bin/bash - -[[ -f buildhelpers.sh ]] && - source buildhelpers.sh - -FFMPEG_CONFIG_FILE=/xbmc/tools/buildsteps/win32/fmpeg_options.txt -FFMPEG_VERSION_FILE=/xbmc/tools/depends/target/ffmpeg/FFMPEG-VERSION -FFMPEG_BASE_OPTS="--disable-debug --disable-doc --enable-gpl --enable-gnutls --enable-w32threads" -FFMPEG_DEFAULT_OPTS="" -FFMPEG_TARGET_OS=mingw32 - -do_loaddeps $FFMPEG_VERSION_FILE -FFMPEGDESTDIR=/xbmc/lib/win32/$LIBNAME - -if [ "$(pathChanged $FFMPEGDESTDIR $FFMPEG_VERSION_FILE /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/win32)" == "0" ] -then - cp $FFMPEGDESTDIR/bin/*.dll /xbmc/system/ - if [ -f $BGPROCESSFILE ]; then - rm $BGPROCESSFILE - fi - exit -else - git clean -dffx $FFMPEGDESTDIR -fi - -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 [[ $BITS = "64bit" ]]; then - arch=x86_64 - FFMPEG_TARGET_OS=mingw64 - # perhaps it's not optimal - do_addOption "--cpu=core2" - else - arch=x86 - FFMPEG_TARGET_OS=mingw32 - do_addOption "--cpu=i686" - fi - export arch - - # 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 - -if [[ "$tools" = "msvc" ]]; then - # this experimental feature for debugging purpose - do_removeOption "--enable-gnutls" - do_removeOption "--disable-debug" - do_addOption "--disable-gnutls" - do_addOption "--enable-debug" - do_addOption "--toolchain=msvc" - - # set path to MS cl.exe and link.exe first - if [[ $BITS = "64bit" ]]; then - FFMPEG_TARGET_OS=win64 - VCTOOLSPATH="$VS140COMNTOOLS../../VC/BIN/amd64" - else - FFMPEG_TARGET_OS=win32 - VCTOOLSPATH="$VS140COMNTOOLS../../VC/BIN/" - fi - - export PATH="$VCTOOLSPATH":$PATH - export CFLAGS="" - export CXXFLAGS="" - export LDFLAGS="" - - extra_cflags="-MDd -I$LOCALDESTDIR/include" - extra_ldflags="-LIBPATH:\"$LOCALDESTDIR/lib\" -LIBPATH:\"$MINGW_PREFIX/lib\" /NODEFAULTLIB:libcmt" -fi - -cd $LOCALBUILDDIR - -if do_checkForOptions "--enable-gnutls"; then -if do_pkgConfig "gnutls = $GNUTLS_VER"; then - if [[ ! -f "gnutls-${GNUTLS_VER}.tar.xz" ]]; then - do_wget "http://mirrors.xbmc.org/build-deps/sources/gnutls-${GNUTLS_VER}.tar.xz" - fi - if [ -d "gnutls-${GNUTLS_VER}" ]; then - rm -r "gnutls-${GNUTLS_VER}" - fi - tar -xaf "gnutls-${GNUTLS_VER}.tar.xz" - cd "gnutls-${GNUTLS_VER}" - - do_print_status "gnutls-${GNUTLS_VER}" "$blue_color" "Configuring" - - rm -rf $LOCALDESTDIR/include/gnutls - rm -f $LOCALDESTDIR/lib/{libgnutls*,pkgconfig/gnutls.pc} - rm -f $LOCALDESTDIR/bin-global/{gnutls-*,{psk,cert,srp,ocsp}tool}.exe - - ./configure --prefix=$LOCALDESTDIR --disable-shared --build="$MINGW_CHOST" --disable-cxx \ - --disable-doc --disable-tools --disable-tests --without-p11-kit --disable-rpath \ - --disable-libdane --without-idn --without-tpm --enable-local-libopts --disable-guile - sed -i 's/-lgnutls *$/-lgnutls -lnettle -lhogweed -lcrypt32 -lws2_32 -lz -lgmp -lintl -liconv/' \ - lib/gnutls.pc - do_print_status "gnutls-${GNUTLS_VER}" "$blue_color" "Compiling" - do_makeinstall - do_pkgConfig "gnutls = $GNUTLS_VER"; -fi -fi - -do_clean_get $1 -[ -f config.mak ] && make distclean -do_print_status "$LIBNAME-$VERSION (${BITS})" "$blue_color" "Configuring" - -[[ -z "$extra_cflags" ]] && extra_cflags=-DPTW32_STATIC_LIB -[[ -z "$extra_ldflags" ]] && extra_ldflags=-static-libgcc - -./configure --target-os=$FFMPEG_TARGET_OS --prefix=$FFMPEGDESTDIR --arch=$arch \ - --disable-static --enable-shared $FFMPEG_OPTS_SHARED \ - --extra-cflags="$extra_cflags" --extra-ldflags="$extra_ldflags" - -do_makelib && -cp $FFMPEGDESTDIR/bin/*.dll /xbmc/system/ && -tagSuccessFulBuild $FFMPEGDESTDIR $FFMPEG_VERSION_FILE /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/win32 - -#remove the bgprocessfile for signaling the process end -if [ -f $BGPROCESSFILE ]; then - rm $BGPROCESSFILE -fi diff --git a/tools/buildsteps/win32/buildhelpers.sh b/tools/buildsteps/win32/buildhelpers.sh deleted file mode 100644 index b39c86a92f..0000000000 --- a/tools/buildsteps/win32/buildhelpers.sh +++ /dev/null @@ -1,206 +0,0 @@ -#!/bin/bash - -MAKEFLAGS="$1" -BGPROCESSFILE="$2" -tools="$3" - -cpuCount=1 -if [[ $NUMBER_OF_PROCESSORS > 1 ]]; then - if [[ $NUMBER_OF_PROCESSORS > 4 ]]; then - cpuCount=$NUMBER_OF_PROCESSORS - else - cpuCount=`expr $NUMBER_OF_PROCESSORS + $NUMBER_OF_PROCESSORS / 2` - fi -fi -if [[ ! $cpuCount =~ ^[0-9]+$ ]]; then - cpuCount="$(($(nproc)/2))" -fi - -if which tput >/dev/null 2>&1; then - ncolors=$(tput colors) - if test -n "$ncolors" && test "$ncolors" -ge 8; then - bold_color=$(tput bold) - blue_color=$(tput setaf 4) - orange_color=$(tput setaf 3) - green_color=$(tput setaf 2) - red_color=$(tput setaf 1) - reset_color=$(tput sgr0) - fi - ncols=72 -fi - -do_wget() { - local URL="$1" - local archive="$2" - - if [[ -z $archive ]]; then - wget --tries=5 --retry-connrefused --waitretry=2 --no-check-certificate -c $URL - else - wget --tries=5 --retry-connrefused --waitretry=2 --no-check-certificate -c $URL -O $archive - fi -} - -do_makeinstall() { - make -j"$cpuCount" "$@" - make install -} - -do_makelib() { - do_print_status "$LIBNAME-$VERSION (${BITS})" "$blue_color" "Compiling" - do_makeinstall $1 - do_print_status "$LIBNAME-$VERSION (${BITS})" "$green_color" "Done" -} - -do_print_status() { - local pad=$(printf '%0.1s' "."{1..72}) - local padlen=$((${#pad}-${#1}-${#3})) - printf '%s %*.*s%s%s%s\n' "${bold_color}$1${reset_color}" 0 "$padlen" "$pad" " [$2" "$3" "$reset_color]" -} - -do_print_progress() { - echo -e "\e]0;$* in $(get_first_subdir)\007" - echo -e "${bold_color}$* in $(get_first_subdir)${reset_color}" -} - -get_first_subdir() { - local subdir="${PWD#*build/}" - if [[ "$subdir" != "$PWD" ]]; then - subdir="${subdir%%/*}" - echo "$subdir" - else - echo "." - fi -} - -do_pkgConfig() { - local pkg=${1%% *} - local version=$2 - [[ -z "$version" ]] && version="${1##*= }" - [[ "$version" = "$1" ]] && version="" || version=" $version" - local prefix=$(pkg-config --variable=prefix --silence-errors "$1") - [[ ! -z "$prefix" ]] && prefix="$(cygpath -u "$prefix")" - if [[ "$prefix" = "$LOCALDESTDIR" || "$prefix" = "/trunk${LOCALDESTDIR}" ]]; then - do_print_status "${pkg} ${version}" "$green_color" "Up-to-date" - return 1 - else - do_print_status "${pkg} ${version}" "$red_color" "Not installed" - fi -} - -get_last_version() { - local filelist="$1" - local filter="$2" - local version="$3" - local ret=$(echo "$filelist" | /usr/bin/grep -E "$filter" | sort -V | tail -1) - if [[ -z "$version" ]]; then - echo $ret - else - echo $ret | /usr/bin/grep -oP "$version" - fi -} - -do_autoreconf() { - if [[ ! -f configure ]]; then - autoreconf -fiv - fi -} - -do_clean() { - if [[ "$1" == "clean" ]] || [[ ! -f $ARCHIVE ]]; then - if [ -d $LIBNAME ]; then - do_print_status "$LIBNAME" "$red_color" "Removing" - rm -r $LIBNAME - fi - fi -} - -do_download() { - if [ ! -d $LIBNAME ]; then - if [ ! -f $ARCHIVE ]; then - do_print_status "$ARCHIVE" "$orange_color" "Downloading" - do_wget $BASE_URL/$VERSION.tar.gz $ARCHIVE - fi - - do_print_status "$ARCHIVE" "$blue_color" "Extracting" - mkdir $LIBNAME && cd $LIBNAME - tar -xaf ../$ARCHIVE --strip 1 - else - cd $LIBNAME - fi -} - -do_loaddeps() { - local file="$1" - LIBNAME=$(grep "LIBNAME=" $file | sed 's/LIBNAME=//g;s/#.*$//g;/^$/d') - BASE_URL=$(grep "BASE_URL=" $file | sed 's/BASE_URL=//g;s/#.*$//g;/^$/d') - VERSION=$(grep "VERSION=" $file | sed 's/VERSION=//g;s/#.*$//g;/^$/d') - GNUTLS_VER=$(grep "GNUTLS_VER=" $file | sed 's/GNUTLS_VER=//g;s/#.*$//g;/^$/d') - GITREV=$(git ls-remote $BASE_URL $VERSION | awk '{print $1}') - if [[ -z "$GITREV" ]]; then - ARCHIVE=$LIBNAME-$(echo "${VERSION}" | sed 's/\//-/g').tar.gz - else - ARCHIVE=$LIBNAME-$GITREV.tar.gz - BASE_URL=$BASE_URL/archive - fi -} - -do_clean_get() { - cd "$LOCALBUILDDIR" - do_clean $1 - do_download -} - - -PATH_CHANGE_REV_FILENAME=".last_success_revision" - -#hash a dir based on the git revision, $BITS and $tools -#param1 path to be hashed -function getBuildHash () -{ - local checkPath - checkPath="$1" - shift 1 - local hashStr - hashStr="$(git rev-list HEAD --max-count=1 -- $checkPath $@)" - hashStr="$hashStr $@ $BITS $tools" - echo $hashStr -} - -#param1 path to be checked for changes -function pathChanged () -{ - local ret - local checkPath - ret="0" - #no optims in release builds! - if [ "$Configuration" == "Release" ] - then - echo "1" - return - fi - - checkPath="$1" - shift 1 - if [ -e $checkPath/$PATH_CHANGE_REV_FILENAME ] - then - if [ "$(cat $checkPath/$PATH_CHANGE_REV_FILENAME)" != "$(getBuildHash $checkPath $@)" ] - then - ret="1" - fi - else - ret="1" - fi - - echo $ret -} - -#param1 path to be tagged with hash -function tagSuccessFulBuild () -{ - local pathToTag - pathToTag="$1" - shift 1 - # tag last successful build with revisions of the given dir - # needs to match the checks in function getBuildHash - echo "$(getBuildHash $pathToTag $@)" > $pathToTag/$PATH_CHANGE_REV_FILENAME -} diff --git a/tools/buildsteps/win32/buildlibdvd.sh b/tools/buildsteps/win32/buildlibdvd.sh deleted file mode 100644 index db99da3d82..0000000000 --- a/tools/buildsteps/win32/buildlibdvd.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -[[ -f buildhelpers.sh ]] && - source buildhelpers.sh - -LIBDVDPREFIX=/xbmc/lib/libdvd -PKG_CONFIG_PATH=$LIBDVDPREFIX/lib/pkgconfig -export PKG_CONFIG_PATH - -if [ "$(pathChanged $LIBDVDPREFIX /xbmc/tools/depends/target/libdvdcss/DVDCSS-VERSION /xbmc/tools/depends/target/libdvdread/DVDREAD-VERSION /xbmc/tools/depends/target/libdvdnav/DVDNAV-VERSION /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/win32)" == "0" ] -then - cp "$LIBDVDPREFIX/bin/libdvdcss-2.dll" /xbmc/system/ - cp $LIBDVDPREFIX/bin/libdvdnav.dll /xbmc/system/ - if [ -f $BGPROCESSFILE ]; then - rm $BGPROCESSFILE - fi - exit -else - git clean -dffx $LIBDVDPREFIX -fi - -do_load_autoconf() { - do_loaddeps $1 - do_clean_get $MAKEFLAGS - do_print_status "$LIBNAME-$VERSION (${BITS})" "$blue_color" "Configuring" - do_autoreconf -} - -#libdvdcss -do_load_autoconf /xbmc/tools/depends/target/libdvdcss/DVDCSS-VERSION -CC="gcc -static-libgcc" \ -./configure \ - --prefix=$LIBDVDPREFIX \ - CFLAGS="-DNDEBUG" \ - --disable-doc \ - --with-pic \ - --build="$MINGW_CHOST" -do_makelib $MAKEFLAGS - -strip -S $LIBDVDPREFIX/bin/libdvdcss-2.dll && -cp "$LIBDVDPREFIX/bin/libdvdcss-2.dll" /xbmc/system/ - -#libdvdread -do_load_autoconf /xbmc/tools/depends/target/libdvdread/DVDREAD-VERSION -CC="gcc -static-libgcc" \ -./configure \ - --prefix=$LIBDVDPREFIX \ - --disable-shared \ - --enable-static \ - --with-libdvdcss \ - CFLAGS="-DHAVE_DVDCSS_DVDCSS_H -D_XBMC -DNDEBUG -I$LIBDVDPREFIX/include" \ - --build="$MINGW_CHOST" -do_makelib $MAKEFLAGS - -#libdvdnav -do_load_autoconf /xbmc/tools/depends/target/libdvdnav/DVDNAV-VERSION -CC="gcc -static-libgcc" \ -./configure \ - --prefix=$LIBDVDPREFIX \ - --disable-shared \ - --enable-static \ - CFLAGS="-D_XBMC -DNDEBUG -I$LIBDVDPREFIX/include" \ - --build="$MINGW_CHOST" -do_makelib $MAKEFLAGS - -cd $LOCALBUILDDIR -gcc \ - -shared \ - -o $LIBDVDPREFIX/bin/libdvdnav.dll \ - -ldl \ - libdvdread/src/*.o libdvdnav/src/*.o libdvdnav/src/vm/*.o $LIBDVDPREFIX/lib/libdvdcss.dll.a \ - -Wl,--enable-auto-image-base \ - -Xlinker --enable-auto-import \ - -static-libgcc - -strip -S $LIBDVDPREFIX/bin/libdvdnav.dll && -cp $LIBDVDPREFIX/bin/libdvdnav.dll /xbmc/system/ && -tagSuccessFulBuild $LIBDVDPREFIX /xbmc/tools/depends/target/libdvdcss/DVDCSS-VERSION /xbmc/tools/depends/target/libdvdread/DVDREAD-VERSION /xbmc/tools/depends/target/libdvdnav/DVDNAV-VERSION /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/win32 -do_print_status "libdvd (${BITS})" "$green_color" "Done" - -#remove the bgprocessfile for signaling the process end -if [ -f $BGPROCESSFILE ]; then - rm $BGPROCESSFILE -fi \ No newline at end of file diff --git a/tools/buildsteps/win32/fmpeg_options.txt b/tools/buildsteps/win32/fmpeg_options.txt deleted file mode 100644 index 891a79ed4d..0000000000 --- a/tools/buildsteps/win32/fmpeg_options.txt +++ /dev/null @@ -1,21 +0,0 @@ ---enable-shared ---enable-memalign-hack ---enable-postproc ---enable-zlib ---disable-static ---disable-programs ---disable-devices ---disable-avdevice ---disable-crystalhd ---enable-muxer=spdif ---enable-muxer=adts ---enable-muxer=asf ---enable-muxer=ipod ---enable-encoder=ac3 ---enable-encoder=aac ---enable-encoder=wmav2 ---enable-encoder=png ---enable-encoder=mjpeg ---enable-protocol=http ---enable-runtime-cpudetect ---disable-dxva2 \ No newline at end of file diff --git a/tools/buildsteps/win32/make-mingwlibs.bat b/tools/buildsteps/win32/make-mingwlibs.bat deleted file mode 100644 index 0d94facd05..0000000000 --- a/tools/buildsteps/win32/make-mingwlibs.bat +++ /dev/null @@ -1,75 +0,0 @@ -@ECHO OFF -SETLOCAL - -rem batch file to compile mingw libs via BuildSetup -SET WORKDIR=%base_dir% - -SET PROMPTLEVEL=prompt -SET BUILDMODE=clean -SET opt=mintty -SET build32=yes -SET build64=no -SET vcarch=x86 -SET msys2=msys64 -SET tools=mingw -FOR %%b in (%1, %2, %3) DO ( - IF %%b==noprompt SET PROMPTLEVEL=noprompt - IF %%b==clean SET BUILDMODE=clean - IF %%b==noclean SET BUILDMODE=noclean - IF %%b==sh SET opt=sh - IF %%b==build64 ( - SET build64=yes - SET build32=no - SET vcarch=x64 - ) - IF %%b==msvc SET tools=msvc -) -rem set MSVC env -call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %vcarch% || exit /b 1 - -IF "%WORKDIR%"=="" ( - SET WORKDIR=%~dp0\..\..\.. -) - -REM Prepend the msys and mingw paths onto %PATH% -SET MSYS_INSTALL_PATH=%WORKDIR%\project\BuildDependencies\msys -SET PATH=%MSYS_INSTALL_PATH%\mingw\bin;%MSYS_INSTALL_PATH%\bin;%PATH% - -SET ERRORFILE=%WORKDIR%\project\Win32BuildSetup\errormingw - -SET BS_DIR=%WORKDIR%\project\Win32BuildSetup -rem cd %BS_DIR% - -IF EXIST %ERRORFILE% del %ERRORFILE% > NUL - -rem compiles a bunch of mingw libs and not more -IF %opt%==sh ( - IF EXIST %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\sh.exe ( - ECHO starting sh shell - %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\sh.exe --login -i /xbmc/tools/buildsteps/win32/make-mingwlibs.sh --prompt=%PROMPTLEVEL% --mode=%BUILDMODE% --build32=%build32% --build64=%build64% --tools=%tools% - GOTO END - ) ELSE ( - GOTO ENDWITHERROR - ) -) -IF EXIST %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\mintty.exe ( - ECHO starting mintty shell - %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\mintty.exe -d -i /msys2.ico /usr/bin/bash --login /xbmc/tools/buildsteps/win32/make-mingwlibs.sh --prompt=%PROMPTLEVEL% --mode=%BUILDMODE% --build32=%build32% --build64=%build64% --tools=%tools% - GOTO END -) -GOTO ENDWITHERROR - -:ENDWITHERROR - ECHO msys environment not found - ECHO bla>%ERRORFILE% - EXIT /B 1 - -:END - ECHO exiting msys environment - IF EXIST %ERRORFILE% ( - ECHO failed to build mingw libs - EXIT /B 1 - ) - EXIT /B 0 - -ENDLOCAL diff --git a/tools/buildsteps/win32/make-mingwlibs.sh b/tools/buildsteps/win32/make-mingwlibs.sh deleted file mode 100644 index ee241c71d7..0000000000 --- a/tools/buildsteps/win32/make-mingwlibs.sh +++ /dev/null @@ -1,153 +0,0 @@ - -Win32BuildSetup=/xbmc/project/Win32BuildSetup -ERRORFILE=$Win32BuildSetup/errormingw -NOPFILE=$Win32BuildSetup/noprompt -MAKECLEANFILE=$Win32BuildSetup/makeclean -BGPROCESSFILE=$Win32BuildSetup/bgprocess -TOUCH=/bin/touch -RM=/bin/rm -NOPROMPT=0 -MAKECLEAN="" -MAKEFLAGS="" -TOOLS="mingw" - -export _WIN32_WINNT=0x0600 -export NTDDI_VERSION=0x06000000 - -while true; do - case $1 in - --tools=* ) TOOLS="${1#*=}"; shift ;; - --build32=* ) build32="${1#*=}"; shift ;; - --build64=* ) build64="${1#*=}"; shift ;; - --prompt=* ) PROMPTLEVEL="${1#*=}"; shift ;; - --mode=* ) BUILDMODE="${1#*=}"; shift ;; - -- ) shift; break ;; - -* ) shift ;; - * ) break ;; - esac -done - -throwerror() { - $TOUCH $ERRORFILE - echo failed to compile $1 - if [ $NOPROMPT == 0 ]; then - read - fi -} - -setfilepath() { - FILEPATH=$1 -} - -checkfiles() { - for i in $@; do - if [ ! -f "$FILEPATH/$i" ]; then - throwerror "$FILEPATH/$i" - exit 1 - fi - done -} - -#start the process backgrounded -runBackgroundProcess() { - $TOUCH $BGPROCESSFILE - echo "backgrounding: sh $1 $BGPROCESSFILE $TOOLS & (workdir: $(PWD))" - sh $1 $BGPROCESSFILE $targetBuild $TOOLS & - echo "waiting on bgprocess..." - while [ -f $BGPROCESSFILE ]; do - echo -n "." - sleep 5 - done -} - - -buildProcess() { -cd /xbmc/tools/buildsteps/win32 - -# compile our mingw dlls -echo "-------------------------------------------------------------------------------" -echo "compiling mingw libs $BITS" -echo -echo " NOPROMPT = $NOPROMPT" -echo " MAKECLEAN = $MAKECLEAN" -echo " WORKSPACE = $WORKSPACE" -echo " TOOLCHAIN = $TOOLS" -echo -echo "-------------------------------------------------------------------------------" - -echo -ne "\033]0;building FFmpeg $BITS\007" -echo "-------------------------------------------------" -echo " building FFmpeg $BITS" -echo "-------------------------------------------------" -runBackgroundProcess "./buildffmpeg.sh $MAKECLEAN" -setfilepath /xbmc/system -checkfiles avcodec-57.dll avformat-57.dll avutil-55.dll postproc-54.dll swscale-4.dll avfilter-6.dll swresample-2.dll -echo "-------------------------------------------------" -echo " building of FFmpeg $BITS done..." -echo "-------------------------------------------------" - -echo -ne "\033]0;building libdvd $BITS\007" -echo "-------------------------------------------------" -echo " building libdvd $BITS" -echo "-------------------------------------------------" -runBackgroundProcess "./buildlibdvd.sh $MAKECLEAN" -setfilepath /xbmc/system -checkfiles libdvdcss-2.dll libdvdnav.dll -echo "-------------------------------------------------" -echo " building of libdvd $BITS done..." -echo "-------------------------------------------------" - -echo "-------------------------------------------------------------------------------" -echo -echo "compile mingw libs $BITS done..." -echo -echo "-------------------------------------------------------------------------------" - -} - -run_builds() { - new_updates="no" - new_updates_packages="" - if [[ $build32 = "yes" ]]; then - source /local32/etc/profile.local - buildProcess - echo "-------------------------------------------------------------------------------" - echo "compile all libs 32bit done..." - echo "-------------------------------------------------------------------------------" - fi - - if [[ $build64 = "yes" ]]; then - source /local64/etc/profile.local - buildProcess - echo "-------------------------------------------------------------------------------" - echo "compile all libs 64bit done..." - echo "-------------------------------------------------------------------------------" - fi -} - -# cleanup -if [ -f $ERRORFILE ]; then - $RM $ERRORFILE -fi - -# check for noprompt -if [ "$PROMPTLEVEL" == "noprompt" ]; then - NOPROMPT=1 -fi - -if [ "$BUILDMODE" == "clean" ]; then - MAKECLEAN="clean" -else - MAKECLEAN="noclean" -fi - -run_builds - -echo -e "\033]0;compiling done...\007" -echo - -# wait for key press -if [ $NOPROMPT == 0 ]; then - echo press a key to close the window - read -fi diff --git a/tools/buildsteps/windows/buildffmpeg.sh b/tools/buildsteps/windows/buildffmpeg.sh new file mode 100644 index 0000000000..25d578e384 --- /dev/null +++ b/tools/buildsteps/windows/buildffmpeg.sh @@ -0,0 +1,168 @@ +#!/bin/bash + +[[ -f buildhelpers.sh ]] && + source buildhelpers.sh + +FFMPEG_CONFIG_FILE=/xbmc/tools/buildsteps/windows/fmpeg_options.txt +FFMPEG_VERSION_FILE=/xbmc/tools/depends/target/ffmpeg/FFMPEG-VERSION +FFMPEG_BASE_OPTS="--disable-debug --disable-doc --enable-gpl --enable-gnutls --enable-w32threads" +FFMPEG_DEFAULT_OPTS="" +FFMPEG_TARGET_OS=mingw32 + +do_loaddeps $FFMPEG_VERSION_FILE +FFMPEGDESTDIR=/xbmc/lib/win32/$LIBNAME + +if [ "$(pathChanged $FFMPEGDESTDIR $FFMPEG_VERSION_FILE /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/windows)" == "0" ] +then + cp $FFMPEGDESTDIR/bin/*.dll /xbmc/system/ + if [ -f $BGPROCESSFILE ]; then + rm $BGPROCESSFILE + fi + exit +else + git clean -dffx $FFMPEGDESTDIR +fi + +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 [[ $BITS = "64bit" ]]; then + arch=x86_64 + FFMPEG_TARGET_OS=mingw64 + # perhaps it's not optimal + do_addOption "--cpu=core2" + else + arch=x86 + FFMPEG_TARGET_OS=mingw32 + do_addOption "--cpu=i686" + fi + export arch + + # 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 + +if [[ "$tools" = "msvc" ]]; then + # this experimental feature for debugging purpose + do_removeOption "--enable-gnutls" + do_removeOption "--disable-debug" + do_addOption "--disable-gnutls" + do_addOption "--enable-debug" + do_addOption "--toolchain=msvc" + + # set path to MS cl.exe and link.exe first + if [[ $BITS = "64bit" ]]; then + FFMPEG_TARGET_OS=win64 + VCTOOLSPATH="$VS140COMNTOOLS../../VC/BIN/amd64" + else + FFMPEG_TARGET_OS=win32 + VCTOOLSPATH="$VS140COMNTOOLS../../VC/BIN/" + fi + + export PATH="$VCTOOLSPATH":$PATH + export CFLAGS="" + export CXXFLAGS="" + export LDFLAGS="" + + extra_cflags="-MDd -I$LOCALDESTDIR/include" + extra_ldflags="-LIBPATH:\"$LOCALDESTDIR/lib\" -LIBPATH:\"$MINGW_PREFIX/lib\" /NODEFAULTLIB:libcmt" +fi + +cd $LOCALBUILDDIR + +if do_checkForOptions "--enable-gnutls"; then +if do_pkgConfig "gnutls = $GNUTLS_VER"; then + if [[ ! -f "gnutls-${GNUTLS_VER}.tar.xz" ]]; then + do_wget "http://mirrors.xbmc.org/build-deps/sources/gnutls-${GNUTLS_VER}.tar.xz" + fi + if [ -d "gnutls-${GNUTLS_VER}" ]; then + rm -r "gnutls-${GNUTLS_VER}" + fi + tar -xaf "gnutls-${GNUTLS_VER}.tar.xz" + cd "gnutls-${GNUTLS_VER}" + + do_print_status "gnutls-${GNUTLS_VER}" "$blue_color" "Configuring" + + rm -rf $LOCALDESTDIR/include/gnutls + rm -f $LOCALDESTDIR/lib/{libgnutls*,pkgconfig/gnutls.pc} + rm -f $LOCALDESTDIR/bin-global/{gnutls-*,{psk,cert,srp,ocsp}tool}.exe + + ./configure --prefix=$LOCALDESTDIR --disable-shared --build="$MINGW_CHOST" --disable-cxx \ + --disable-doc --disable-tools --disable-tests --without-p11-kit --disable-rpath \ + --disable-libdane --without-idn --without-tpm --enable-local-libopts --disable-guile + sed -i 's/-lgnutls *$/-lgnutls -lnettle -lhogweed -lcrypt32 -lws2_32 -lz -lgmp -lintl -liconv/' \ + lib/gnutls.pc + do_print_status "gnutls-${GNUTLS_VER}" "$blue_color" "Compiling" + do_makeinstall + do_pkgConfig "gnutls = $GNUTLS_VER"; +fi +fi + +do_clean_get $1 +[ -f config.mak ] && make distclean +do_print_status "$LIBNAME-$VERSION (${BITS})" "$blue_color" "Configuring" + +[[ -z "$extra_cflags" ]] && extra_cflags=-DPTW32_STATIC_LIB +[[ -z "$extra_ldflags" ]] && extra_ldflags=-static-libgcc + +./configure --target-os=$FFMPEG_TARGET_OS --prefix=$FFMPEGDESTDIR --arch=$arch \ + --disable-static --enable-shared $FFMPEG_OPTS_SHARED \ + --extra-cflags="$extra_cflags" --extra-ldflags="$extra_ldflags" + +do_makelib && +cp $FFMPEGDESTDIR/bin/*.dll /xbmc/system/ && +tagSuccessFulBuild $FFMPEGDESTDIR $FFMPEG_VERSION_FILE /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/windows + +#remove the bgprocessfile for signaling the process end +if [ -f $BGPROCESSFILE ]; then + rm $BGPROCESSFILE +fi diff --git a/tools/buildsteps/windows/buildhelpers.sh b/tools/buildsteps/windows/buildhelpers.sh new file mode 100644 index 0000000000..b39c86a92f --- /dev/null +++ b/tools/buildsteps/windows/buildhelpers.sh @@ -0,0 +1,206 @@ +#!/bin/bash + +MAKEFLAGS="$1" +BGPROCESSFILE="$2" +tools="$3" + +cpuCount=1 +if [[ $NUMBER_OF_PROCESSORS > 1 ]]; then + if [[ $NUMBER_OF_PROCESSORS > 4 ]]; then + cpuCount=$NUMBER_OF_PROCESSORS + else + cpuCount=`expr $NUMBER_OF_PROCESSORS + $NUMBER_OF_PROCESSORS / 2` + fi +fi +if [[ ! $cpuCount =~ ^[0-9]+$ ]]; then + cpuCount="$(($(nproc)/2))" +fi + +if which tput >/dev/null 2>&1; then + ncolors=$(tput colors) + if test -n "$ncolors" && test "$ncolors" -ge 8; then + bold_color=$(tput bold) + blue_color=$(tput setaf 4) + orange_color=$(tput setaf 3) + green_color=$(tput setaf 2) + red_color=$(tput setaf 1) + reset_color=$(tput sgr0) + fi + ncols=72 +fi + +do_wget() { + local URL="$1" + local archive="$2" + + if [[ -z $archive ]]; then + wget --tries=5 --retry-connrefused --waitretry=2 --no-check-certificate -c $URL + else + wget --tries=5 --retry-connrefused --waitretry=2 --no-check-certificate -c $URL -O $archive + fi +} + +do_makeinstall() { + make -j"$cpuCount" "$@" + make install +} + +do_makelib() { + do_print_status "$LIBNAME-$VERSION (${BITS})" "$blue_color" "Compiling" + do_makeinstall $1 + do_print_status "$LIBNAME-$VERSION (${BITS})" "$green_color" "Done" +} + +do_print_status() { + local pad=$(printf '%0.1s' "."{1..72}) + local padlen=$((${#pad}-${#1}-${#3})) + printf '%s %*.*s%s%s%s\n' "${bold_color}$1${reset_color}" 0 "$padlen" "$pad" " [$2" "$3" "$reset_color]" +} + +do_print_progress() { + echo -e "\e]0;$* in $(get_first_subdir)\007" + echo -e "${bold_color}$* in $(get_first_subdir)${reset_color}" +} + +get_first_subdir() { + local subdir="${PWD#*build/}" + if [[ "$subdir" != "$PWD" ]]; then + subdir="${subdir%%/*}" + echo "$subdir" + else + echo "." + fi +} + +do_pkgConfig() { + local pkg=${1%% *} + local version=$2 + [[ -z "$version" ]] && version="${1##*= }" + [[ "$version" = "$1" ]] && version="" || version=" $version" + local prefix=$(pkg-config --variable=prefix --silence-errors "$1") + [[ ! -z "$prefix" ]] && prefix="$(cygpath -u "$prefix")" + if [[ "$prefix" = "$LOCALDESTDIR" || "$prefix" = "/trunk${LOCALDESTDIR}" ]]; then + do_print_status "${pkg} ${version}" "$green_color" "Up-to-date" + return 1 + else + do_print_status "${pkg} ${version}" "$red_color" "Not installed" + fi +} + +get_last_version() { + local filelist="$1" + local filter="$2" + local version="$3" + local ret=$(echo "$filelist" | /usr/bin/grep -E "$filter" | sort -V | tail -1) + if [[ -z "$version" ]]; then + echo $ret + else + echo $ret | /usr/bin/grep -oP "$version" + fi +} + +do_autoreconf() { + if [[ ! -f configure ]]; then + autoreconf -fiv + fi +} + +do_clean() { + if [[ "$1" == "clean" ]] || [[ ! -f $ARCHIVE ]]; then + if [ -d $LIBNAME ]; then + do_print_status "$LIBNAME" "$red_color" "Removing" + rm -r $LIBNAME + fi + fi +} + +do_download() { + if [ ! -d $LIBNAME ]; then + if [ ! -f $ARCHIVE ]; then + do_print_status "$ARCHIVE" "$orange_color" "Downloading" + do_wget $BASE_URL/$VERSION.tar.gz $ARCHIVE + fi + + do_print_status "$ARCHIVE" "$blue_color" "Extracting" + mkdir $LIBNAME && cd $LIBNAME + tar -xaf ../$ARCHIVE --strip 1 + else + cd $LIBNAME + fi +} + +do_loaddeps() { + local file="$1" + LIBNAME=$(grep "LIBNAME=" $file | sed 's/LIBNAME=//g;s/#.*$//g;/^$/d') + BASE_URL=$(grep "BASE_URL=" $file | sed 's/BASE_URL=//g;s/#.*$//g;/^$/d') + VERSION=$(grep "VERSION=" $file | sed 's/VERSION=//g;s/#.*$//g;/^$/d') + GNUTLS_VER=$(grep "GNUTLS_VER=" $file | sed 's/GNUTLS_VER=//g;s/#.*$//g;/^$/d') + GITREV=$(git ls-remote $BASE_URL $VERSION | awk '{print $1}') + if [[ -z "$GITREV" ]]; then + ARCHIVE=$LIBNAME-$(echo "${VERSION}" | sed 's/\//-/g').tar.gz + else + ARCHIVE=$LIBNAME-$GITREV.tar.gz + BASE_URL=$BASE_URL/archive + fi +} + +do_clean_get() { + cd "$LOCALBUILDDIR" + do_clean $1 + do_download +} + + +PATH_CHANGE_REV_FILENAME=".last_success_revision" + +#hash a dir based on the git revision, $BITS and $tools +#param1 path to be hashed +function getBuildHash () +{ + local checkPath + checkPath="$1" + shift 1 + local hashStr + hashStr="$(git rev-list HEAD --max-count=1 -- $checkPath $@)" + hashStr="$hashStr $@ $BITS $tools" + echo $hashStr +} + +#param1 path to be checked for changes +function pathChanged () +{ + local ret + local checkPath + ret="0" + #no optims in release builds! + if [ "$Configuration" == "Release" ] + then + echo "1" + return + fi + + checkPath="$1" + shift 1 + if [ -e $checkPath/$PATH_CHANGE_REV_FILENAME ] + then + if [ "$(cat $checkPath/$PATH_CHANGE_REV_FILENAME)" != "$(getBuildHash $checkPath $@)" ] + then + ret="1" + fi + else + ret="1" + fi + + echo $ret +} + +#param1 path to be tagged with hash +function tagSuccessFulBuild () +{ + local pathToTag + pathToTag="$1" + shift 1 + # tag last successful build with revisions of the given dir + # needs to match the checks in function getBuildHash + echo "$(getBuildHash $pathToTag $@)" > $pathToTag/$PATH_CHANGE_REV_FILENAME +} diff --git a/tools/buildsteps/windows/buildlibdvd.sh b/tools/buildsteps/windows/buildlibdvd.sh new file mode 100644 index 0000000000..0e983db94f --- /dev/null +++ b/tools/buildsteps/windows/buildlibdvd.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +[[ -f buildhelpers.sh ]] && + source buildhelpers.sh + +LIBDVDPREFIX=/xbmc/lib/libdvd +PKG_CONFIG_PATH=$LIBDVDPREFIX/lib/pkgconfig +export PKG_CONFIG_PATH + +if [ "$(pathChanged $LIBDVDPREFIX /xbmc/tools/depends/target/libdvdcss/DVDCSS-VERSION /xbmc/tools/depends/target/libdvdread/DVDREAD-VERSION /xbmc/tools/depends/target/libdvdnav/DVDNAV-VERSION /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/windows)" == "0" ] +then + cp "$LIBDVDPREFIX/bin/libdvdcss-2.dll" /xbmc/system/ + cp $LIBDVDPREFIX/bin/libdvdnav.dll /xbmc/system/ + if [ -f $BGPROCESSFILE ]; then + rm $BGPROCESSFILE + fi + exit +else + git clean -dffx $LIBDVDPREFIX +fi + +do_load_autoconf() { + do_loaddeps $1 + do_clean_get $MAKEFLAGS + do_print_status "$LIBNAME-$VERSION (${BITS})" "$blue_color" "Configuring" + do_autoreconf +} + +#libdvdcss +do_load_autoconf /xbmc/tools/depends/target/libdvdcss/DVDCSS-VERSION +CC="gcc -static-libgcc" \ +./configure \ + --prefix=$LIBDVDPREFIX \ + CFLAGS="-DNDEBUG" \ + --disable-doc \ + --with-pic \ + --build="$MINGW_CHOST" +do_makelib $MAKEFLAGS + +strip -S $LIBDVDPREFIX/bin/libdvdcss-2.dll && +cp "$LIBDVDPREFIX/bin/libdvdcss-2.dll" /xbmc/system/ + +#libdvdread +do_load_autoconf /xbmc/tools/depends/target/libdvdread/DVDREAD-VERSION +CC="gcc -static-libgcc" \ +./configure \ + --prefix=$LIBDVDPREFIX \ + --disable-shared \ + --enable-static \ + --with-libdvdcss \ + CFLAGS="-DHAVE_DVDCSS_DVDCSS_H -D_XBMC -DNDEBUG -I$LIBDVDPREFIX/include" \ + --build="$MINGW_CHOST" +do_makelib $MAKEFLAGS + +#libdvdnav +do_load_autoconf /xbmc/tools/depends/target/libdvdnav/DVDNAV-VERSION +CC="gcc -static-libgcc" \ +./configure \ + --prefix=$LIBDVDPREFIX \ + --disable-shared \ + --enable-static \ + CFLAGS="-D_XBMC -DNDEBUG -I$LIBDVDPREFIX/include" \ + --build="$MINGW_CHOST" +do_makelib $MAKEFLAGS + +cd $LOCALBUILDDIR +gcc \ + -shared \ + -o $LIBDVDPREFIX/bin/libdvdnav.dll \ + -ldl \ + libdvdread/src/*.o libdvdnav/src/*.o libdvdnav/src/vm/*.o $LIBDVDPREFIX/lib/libdvdcss.dll.a \ + -Wl,--enable-auto-image-base \ + -Xlinker --enable-auto-import \ + -static-libgcc + +strip -S $LIBDVDPREFIX/bin/libdvdnav.dll && +cp $LIBDVDPREFIX/bin/libdvdnav.dll /xbmc/system/ && +tagSuccessFulBuild $LIBDVDPREFIX /xbmc/tools/depends/target/libdvdcss/DVDCSS-VERSION /xbmc/tools/depends/target/libdvdread/DVDREAD-VERSION /xbmc/tools/depends/target/libdvdnav/DVDNAV-VERSION /xbmc/project/BuildDependencies/DownloadMingwBuildEnv.bat /xbmc/tools/buildsteps/windows +do_print_status "libdvd (${BITS})" "$green_color" "Done" + +#remove the bgprocessfile for signaling the process end +if [ -f $BGPROCESSFILE ]; then + rm $BGPROCESSFILE +fi \ No newline at end of file diff --git a/tools/buildsteps/windows/fmpeg_options.txt b/tools/buildsteps/windows/fmpeg_options.txt new file mode 100644 index 0000000000..891a79ed4d --- /dev/null +++ b/tools/buildsteps/windows/fmpeg_options.txt @@ -0,0 +1,21 @@ +--enable-shared +--enable-memalign-hack +--enable-postproc +--enable-zlib +--disable-static +--disable-programs +--disable-devices +--disable-avdevice +--disable-crystalhd +--enable-muxer=spdif +--enable-muxer=adts +--enable-muxer=asf +--enable-muxer=ipod +--enable-encoder=ac3 +--enable-encoder=aac +--enable-encoder=wmav2 +--enable-encoder=png +--enable-encoder=mjpeg +--enable-protocol=http +--enable-runtime-cpudetect +--disable-dxva2 \ No newline at end of file diff --git a/tools/buildsteps/windows/make-mingwlibs.bat b/tools/buildsteps/windows/make-mingwlibs.bat new file mode 100644 index 0000000000..7ffddce294 --- /dev/null +++ b/tools/buildsteps/windows/make-mingwlibs.bat @@ -0,0 +1,73 @@ +@ECHO OFF +SETLOCAL + +rem batch file to compile mingw libs via BuildSetup +PUSHD %~dp0\..\..\.. +SET WORKDIR=%CD% +POPD + +SET PROMPTLEVEL=prompt +SET BUILDMODE=clean +SET opt=mintty +SET build32=yes +SET build64=no +SET vcarch=x86 +SET msys2=msys64 +SET tools=mingw +FOR %%b in (%1, %2, %3, %4) DO ( + IF %%b==noprompt SET PROMPTLEVEL=noprompt + IF %%b==clean SET BUILDMODE=clean + IF %%b==noclean SET BUILDMODE=noclean + IF %%b==sh SET opt=sh + IF %%b==build64 ( + SET build64=yes + SET build32=no + SET vcarch=x64 + ) + IF %%b==msvc SET tools=msvc +) +rem set MSVC env +call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %vcarch% || exit /b 1 + +REM Prepend the msys and mingw paths onto %PATH% +SET MSYS_INSTALL_PATH=%WORKDIR%\project\BuildDependencies\msys +SET PATH=%MSYS_INSTALL_PATH%\mingw\bin;%MSYS_INSTALL_PATH%\bin;%PATH% + +SET ERRORFILE=%WORKDIR%\project\Win32BuildSetup\errormingw + +SET BS_DIR=%WORKDIR%\project\Win32BuildSetup +rem cd %BS_DIR% + +IF EXIST %ERRORFILE% del %ERRORFILE% > NUL + +rem compiles a bunch of mingw libs and not more +IF %opt%==sh ( + IF EXIST %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\sh.exe ( + ECHO starting sh shell + %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\sh.exe --login -i /xbmc/tools/buildsteps/windows/make-mingwlibs.sh --prompt=%PROMPTLEVEL% --mode=%BUILDMODE% --build32=%build32% --build64=%build64% --tools=%tools% + GOTO END + ) ELSE ( + GOTO ENDWITHERROR + ) +) +IF EXIST %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\mintty.exe ( + ECHO starting mintty shell + %WORKDIR%\project\BuildDependencies\%msys2%\usr\bin\mintty.exe -d -i /msys2.ico /usr/bin/bash --login /xbmc/tools/buildsteps/windows/make-mingwlibs.sh --prompt=%PROMPTLEVEL% --mode=%BUILDMODE% --build32=%build32% --build64=%build64% --tools=%tools% + GOTO END +) +GOTO ENDWITHERROR + +:ENDWITHERROR + ECHO msys environment not found + ECHO bla>%ERRORFILE% + EXIT /B 1 + +:END + ECHO exiting msys environment + IF EXIST %ERRORFILE% ( + ECHO failed to build mingw libs + EXIT /B 1 + ) + EXIT /B 0 + +ENDLOCAL diff --git a/tools/buildsteps/windows/make-mingwlibs.sh b/tools/buildsteps/windows/make-mingwlibs.sh new file mode 100644 index 0000000000..50470cd8d3 --- /dev/null +++ b/tools/buildsteps/windows/make-mingwlibs.sh @@ -0,0 +1,153 @@ + +Win32BuildSetup=/xbmc/project/Win32BuildSetup +ERRORFILE=$Win32BuildSetup/errormingw +NOPFILE=$Win32BuildSetup/noprompt +MAKECLEANFILE=$Win32BuildSetup/makeclean +BGPROCESSFILE=$Win32BuildSetup/bgprocess +TOUCH=/bin/touch +RM=/bin/rm +NOPROMPT=0 +MAKECLEAN="" +MAKEFLAGS="" +TOOLS="mingw" + +export _WIN32_WINNT=0x0600 +export NTDDI_VERSION=0x06000000 + +while true; do + case $1 in + --tools=* ) TOOLS="${1#*=}"; shift ;; + --build32=* ) build32="${1#*=}"; shift ;; + --build64=* ) build64="${1#*=}"; shift ;; + --prompt=* ) PROMPTLEVEL="${1#*=}"; shift ;; + --mode=* ) BUILDMODE="${1#*=}"; shift ;; + -- ) shift; break ;; + -* ) shift ;; + * ) break ;; + esac +done + +throwerror() { + $TOUCH $ERRORFILE + echo failed to compile $1 + if [ $NOPROMPT == 0 ]; then + read + fi +} + +setfilepath() { + FILEPATH=$1 +} + +checkfiles() { + for i in $@; do + if [ ! -f "$FILEPATH/$i" ]; then + throwerror "$FILEPATH/$i" + exit 1 + fi + done +} + +#start the process backgrounded +runBackgroundProcess() { + $TOUCH $BGPROCESSFILE + echo "backgrounding: sh $1 $BGPROCESSFILE $TOOLS & (workdir: $(PWD))" + sh $1 $BGPROCESSFILE $targetBuild $TOOLS & + echo "waiting on bgprocess..." + while [ -f $BGPROCESSFILE ]; do + echo -n "." + sleep 5 + done +} + + +buildProcess() { +cd /xbmc/tools/buildsteps/windows + +# compile our mingw dlls +echo "-------------------------------------------------------------------------------" +echo "compiling mingw libs $BITS" +echo +echo " NOPROMPT = $NOPROMPT" +echo " MAKECLEAN = $MAKECLEAN" +echo " WORKSPACE = $WORKSPACE" +echo " TOOLCHAIN = $TOOLS" +echo +echo "-------------------------------------------------------------------------------" + +echo -ne "\033]0;building FFmpeg $BITS\007" +echo "-------------------------------------------------" +echo " building FFmpeg $BITS" +echo "-------------------------------------------------" +runBackgroundProcess "./buildffmpeg.sh $MAKECLEAN" +setfilepath /xbmc/system +checkfiles avcodec-57.dll avformat-57.dll avutil-55.dll postproc-54.dll swscale-4.dll avfilter-6.dll swresample-2.dll +echo "-------------------------------------------------" +echo " building of FFmpeg $BITS done..." +echo "-------------------------------------------------" + +echo -ne "\033]0;building libdvd $BITS\007" +echo "-------------------------------------------------" +echo " building libdvd $BITS" +echo "-------------------------------------------------" +runBackgroundProcess "./buildlibdvd.sh $MAKECLEAN" +setfilepath /xbmc/system +checkfiles libdvdcss-2.dll libdvdnav.dll +echo "-------------------------------------------------" +echo " building of libdvd $BITS done..." +echo "-------------------------------------------------" + +echo "-------------------------------------------------------------------------------" +echo +echo "compile mingw libs $BITS done..." +echo +echo "-------------------------------------------------------------------------------" + +} + +run_builds() { + new_updates="no" + new_updates_packages="" + if [[ $build32 = "yes" ]]; then + source /local32/etc/profile.local + buildProcess + echo "-------------------------------------------------------------------------------" + echo "compile all libs 32bit done..." + echo "-------------------------------------------------------------------------------" + fi + + if [[ $build64 = "yes" ]]; then + source /local64/etc/profile.local + buildProcess + echo "-------------------------------------------------------------------------------" + echo "compile all libs 64bit done..." + echo "-------------------------------------------------------------------------------" + fi +} + +# cleanup +if [ -f $ERRORFILE ]; then + $RM $ERRORFILE +fi + +# check for noprompt +if [ "$PROMPTLEVEL" == "noprompt" ]; then + NOPROMPT=1 +fi + +if [ "$BUILDMODE" == "clean" ]; then + MAKECLEAN="clean" +else + MAKECLEAN="noclean" +fi + +run_builds + +echo -e "\033]0;compiling done...\007" +echo + +# wait for key press +if [ $NOPROMPT == 0 ]; then + echo press a key to close the window + read +fi diff --git a/tools/buildsteps/windows/win32/make-mingwlibs.bat b/tools/buildsteps/windows/win32/make-mingwlibs.bat new file mode 100644 index 0000000000..2c3bedcc88 --- /dev/null +++ b/tools/buildsteps/windows/win32/make-mingwlibs.bat @@ -0,0 +1,5 @@ +@ECHO OFF + +PUSHD %~dp0\.. +CALL make-mingwlibs.bat %* +POPD -- cgit v1.2.3