summaryrefslogtreecommitdiffstats
path: root/ci/build-mingw64.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ci/build-mingw64.sh')
-rwxr-xr-xci/build-mingw64.sh220
1 files changed, 189 insertions, 31 deletions
diff --git a/ci/build-mingw64.sh b/ci/build-mingw64.sh
index b957ae1cf1..5e4e93f119 100755
--- a/ci/build-mingw64.sh
+++ b/ci/build-mingw64.sh
@@ -1,34 +1,192 @@
-#!/bin/sh
-set -e
-
-_mingw_sysroot=/usr/$TARGET/sysroot
-_mingw_prefix=$_mingw_sysroot/mingw
-_mingw_exec_prefix=$_mingw_prefix
-_mingw_libdir=$_mingw_exec_prefix/lib
-_mingw_datadir=$_mingw_prefix/share
-
-export PKG_CONFIG_PATH="$_mingw_libdir/pkgconfig:$_mingw_datadir/pkgconfig";
-export CC=$TARGET-gcc
-export CXX=$TARGET-g++
+#!/bin/bash -e
+
+prefix_dir=$PWD/mingw_prefix
+mkdir -p "$prefix_dir"
+ln -snf . "$prefix_dir/usr"
+ln -snf . "$prefix_dir/local"
+
+wget="wget -nc --progress=bar:force"
+gitclone="git clone --depth=10"
+commonflags="--disable-static --enable-shared"
+
+export PKG_CONFIG_SYSROOT_DIR="$prefix_dir"
+export PKG_CONFIG_LIBDIR="$PKG_CONFIG_SYSROOT_DIR/lib/pkgconfig"
+
+# -posix is Ubuntu's variant with pthreads support
+export CC=$TARGET-gcc-posix
+export CXX=$TARGET-g++-posix
export AR=$TARGET-ar
export NM=$TARGET-nm
export RANLIB=$TARGET-ranlib
-export CFLAGS="-O2 -mtune=intel -g -ggdb -pipe -Wall --param=ssp-buffer-size=4 -mms-bitfields -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fexceptions -fasynchronous-unwind-tables -fstack-protector-strong -fno-ident"
-export LDFLAGS="-Wl,--no-keep-memory -fstack-protector-strong"
-
-python3 ./waf configure \
- --enable-static-build \
- --enable-libmpv-shared \
- --enable-lua \
- --enable-javascript \
- --enable-libarchive \
- --enable-libass \
- --enable-libbluray \
- --enable-dvdread \
- --enable-dvdnav \
- --enable-uchardet \
- --enable-vulkan \
- --enable-shaderc \
- --enable-rubberband \
- --enable-lcms2
-python3 ./waf build --verbose
+
+export CFLAGS="-O2 -pipe -Wall -D_FORTIFY_SOURCE=2"
+export LDFLAGS="-fstack-protector-strong"
+
+function builddir () {
+ [ -d "$1/builddir" ] && rm -rf "$1/builddir"
+ mkdir -p "$1/builddir"
+ pushd "$1/builddir"
+}
+
+function makeplusinstall () {
+ make -j$(nproc)
+ make DESTDIR="$prefix_dir" install
+}
+
+function gettar () {
+ name="${1##*/}"
+ [ -d "${name%%.*}" ] && return 0
+ $wget "$1"
+ tar -xaf "$name"
+}
+
+## iconv
+if [ ! -e "$prefix_dir/lib/libiconv.dll.a" ]; then
+ ver=1.16
+ gettar "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ver}.tar.gz"
+ builddir libiconv-${ver}
+ ../configure --host=$TARGET $commonflags
+ makeplusinstall
+ popd
+fi
+
+## zlib
+if [ ! -e "$prefix_dir/lib/libz.dll.a" ]; then
+ ver=1.2.11
+ gettar "https://zlib.net/zlib-${ver}.tar.gz"
+ pushd zlib-${ver}
+ make -fwin32/Makefile.gcc PREFIX=$TARGET- SHARED_MODE=1 \
+ DESTDIR="$prefix_dir" install \
+ BINARY_PATH=/bin INCLUDE_PATH=/include LIBRARY_PATH=/lib
+ popd
+fi
+
+## ffmpeg
+if [ ! -e "$prefix_dir/lib/libavcodec.dll.a" ]; then
+ [ -d ffmpeg ] || $gitclone https://github.com/FFmpeg/FFmpeg.git ffmpeg
+ builddir ffmpeg
+ ../configure --pkg-config=pkg-config --target-os=mingw32 \
+ --enable-cross-compile --cross-prefix=$TARGET- --arch=${TARGET%%-*} \
+ $commonflags \
+ --disable-{stripping,doc,programs,muxers,encoders,devices}
+ makeplusinstall
+ popd
+fi
+
+## shaderc
+if [ ! -e "$prefix_dir/lib/libshaderc_shared.dll.a" ]; then
+ if [ ! -d shaderc ]; then
+ $gitclone https://github.com/google/shaderc.git
+ (cd shaderc && ./utils/git-sync-deps)
+ fi
+ builddir shaderc
+ cmake .. -DCMAKE_SYSTEM_NAME=Windows \
+ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF \
+ -DSHADERC_SKIP_TESTS=ON -DCMAKE_INSTALL_PREFIX=/
+ makeplusinstall
+ popd
+fi
+
+## spirv-cross
+if [ ! -e "$prefix_dir/lib/libspirv-cross-c-shared.dll.a" ]; then
+ [ -d SPIRV-Cross ] || $gitclone https://github.com/KhronosGroup/SPIRV-Cross
+ builddir SPIRV-Cross
+ cmake .. -DCMAKE_SYSTEM_NAME=Windows \
+ -DSPIRV_CROSS_SHARED=ON -DSPIRV_CROSS_{CLI,STATIC}=OFF
+ makeplusinstall
+ popd
+fi
+
+## freetype2
+if [ ! -e "$prefix_dir/lib/libfreetype.dll.a" ]; then
+ ver=2.11.0
+ gettar "https://download.savannah.gnu.org/releases/freetype/freetype-${ver}.tar.gz"
+ builddir freetype-${ver}
+ ZLIB_LIBS="-L'$prefix_dir/lib' -lz" \
+ ../configure --host=$TARGET $commonflags --with-png=no
+ makeplusinstall
+ popd
+fi
+[ -f "$prefix_dir/lib/libfreetype.dll.a" ] || { echo "libtool fuckup"; exit 1; }
+
+## fribidi
+if [ ! -e "$prefix_dir/lib/libfribidi.dll.a" ]; then
+ ver=1.0.11
+ gettar "https://github.com/fribidi/fribidi/releases/download/v${ver}/fribidi-${ver}.tar.xz"
+ builddir fribidi-${ver}
+ ../configure --host=$TARGET $commonflags
+ makeplusinstall
+ popd
+fi
+
+## harfbuzz
+if [ ! -e "$prefix_dir/lib/libharfbuzz.dll.a" ]; then
+ ver=3.0.0
+ gettar "https://github.com/harfbuzz/harfbuzz/releases/download/${ver}/harfbuzz-${ver}.tar.xz"
+ builddir harfbuzz-${ver}
+ ../configure --host=$TARGET $commonflags --with-icu=no
+ makeplusinstall
+ popd
+ rm "$prefix_dir"/lib/*.la # fuck off
+fi
+
+## libass
+if [ ! -e "$prefix_dir/lib/libass.dll.a" ]; then
+ [ -d libass ] || $gitclone https://github.com/libass/libass.git
+ builddir libass
+ [ -f ../configure ] || (cd .. && ./autogen.sh)
+ ../configure --host=$TARGET $commonflags
+ makeplusinstall
+ popd
+fi
+
+## luajit
+if [ ! -e "$prefix_dir/lib/libluajit-5.1.a" ]; then
+ ver=2.0.5
+ gettar "http://luajit.org/download/LuaJIT-${ver}.tar.gz"
+ pushd LuaJIT-${ver}
+ hostcc=gcc
+ [[ "$TARGET" == "i686-"* ]] && hostcc="$hostcc -m32"
+ make HOST_CC="$hostcc" CROSS=$TARGET- TARGET_SYS=Windows \
+ BUILDMODE=static amalg
+ make DESTDIR="$prefix_dir" INSTALL_DEP= FILE_T=luajit.exe install
+ popd
+fi
+
+## mpv
+
+if [ $1 = "meson" ]; then
+ CPU="x86_64"
+ mkdir -p "${TARGET}_mingw_build" && pushd "${TARGET}_mingw_build"
+
+cat > mingw64_crossfile << EOF
+[binaries]
+c = '${CC}'
+cpp = '${CXX}'
+ar = '${AR}'
+strip = '${TARGET}-strip'
+pkgconfig = 'pkg-config'
+exe_wrapper = 'wine64' # A command used to run generated executables.
+windres = '${TARGET}-windres'
+[host_machine]
+system = 'windows'
+cpu_family = '${CPU}'
+cpu = '${CPU}'
+endian = 'little'
+EOF
+
+ CFLAGS="-I'$prefix_dir/include'" LDFLAGS="-L'$prefix_dir/lib'" \
+ meson .. --cross-file mingw64_crossfile --libdir lib \
+ -Dlibmpv=true -Dlua=luajit -D{shaderc,spirv-cross,d3d11}=enabled
+
+ meson compile
+fi
+
+if [ $1 = "waf" ]; then
+ PKG_CONFIG=pkg-config CFLAGS="-I'$prefix_dir/include'" LDFLAGS="-L'$prefix_dir/lib'" \
+ python3 ./waf configure \
+ --enable-libmpv-shared --lua=luajit \
+ --enable-{shaderc,spirv-cross,d3d11}
+
+ python3 ./waf build --verbose
+fi