diff options
Diffstat (limited to 'ci/build-mingw64.sh')
-rwxr-xr-x | ci/build-mingw64.sh | 220 |
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 |