summaryrefslogtreecommitdiffstats
path: root/ci
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2023-08-20 16:08:46 +0200
committersfan5 <sfan5@live.de>2023-08-21 16:43:38 +0200
commitb11b602312f554638179b57921cafdd12fcc15ca (patch)
treefe79231e76d27eaf9e3c073f2a358efae94736a6 /ci
parent654ccb3c2c1b426f6eebff7bc3bb7469a1aee99d (diff)
downloadmpv-b11b602312f554638179b57921cafdd12fcc15ca.tar.bz2
mpv-b11b602312f554638179b57921cafdd12fcc15ca.tar.xz
ci/mingw: refactor build script into functions
Diffstat (limited to 'ci')
-rwxr-xr-xci/build-mingw64.sh132
1 files changed, 78 insertions, 54 deletions
diff --git a/ci/build-mingw64.sh b/ci/build-mingw64.sh
index 8ae58bcb43..ad8564c045 100755
--- a/ci/build-mingw64.sh
+++ b/ci/build-mingw64.sh
@@ -59,13 +59,13 @@ cmake_args=(
export CC="ccache $CC"
export CXX="ccache $CXX"
-function builddir () {
+function builddir {
[ -d "$1/builddir" ] && rm -rf "$1/builddir"
mkdir -p "$1/builddir"
pushd "$1/builddir"
}
-function makeplusinstall () {
+function makeplusinstall {
if [ -f build.ninja ]; then
ninja
DESTDIR="$prefix_dir" ninja install
@@ -75,26 +75,42 @@ function makeplusinstall () {
fi
}
-function gettar () {
- name="${1##*/}"
+function gettar {
+ local name="${1##*/}"
[ -d "${name%%.*}" ] && return 0
$wget "$1"
tar -xaf "$name"
}
-## iconv
-if [ ! -e "$prefix_dir/lib/libiconv.dll.a" ]; then
- ver=1.17
+function build_if_missing {
+ local name=${1//-/_}
+ local mark_var=_${name}_mark
+ local mark_file=$prefix_dir/${!mark_var}
+ [ -e "$mark_file" ] && return 0
+ echo "::group::Building $1"
+ _$name
+ echo "::endgroup::"
+ if [ ! -e "$mark_file" ]; then
+ echo "Error: Build of $1 completed but $mark_file was not created."
+ return 2
+ fi
+}
+
+
+## mpv's dependencies
+
+_iconv () {
+ local ver=1.17
gettar "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ver}.tar.gz"
builddir libiconv-${ver}
../configure --host=$TARGET $commonflags
makeplusinstall
popd
-fi
+}
+_iconv_mark=lib/libiconv.dll.a
-## zlib
-if [ ! -e "$prefix_dir/lib/libz.dll.a" ]; then
- ver=1.3
+_zlib () {
+ local ver=1.3
gettar "https://zlib.net/fossils/zlib-${ver}.tar.gz"
pushd zlib-${ver}
make -fwin32/Makefile.gcc clean
@@ -102,10 +118,10 @@ if [ ! -e "$prefix_dir/lib/libz.dll.a" ]; then
DESTDIR="$prefix_dir" install \
BINARY_PATH=/bin INCLUDE_PATH=/include LIBRARY_PATH=/lib
popd
-fi
+}
+_zlib_mark=lib/libz.dll.a
-## ffmpeg
-if [ ! -e "$prefix_dir/lib/libavcodec.dll.a" ]; then
+_ffmpeg () {
[ -d ffmpeg ] || $gitclone https://github.com/FFmpeg/FFmpeg.git ffmpeg
builddir ffmpeg
../configure --pkg-config=pkg-config --target-os=mingw32 \
@@ -115,10 +131,10 @@ if [ ! -e "$prefix_dir/lib/libavcodec.dll.a" ]; then
--enable-encoder=mjpeg,png
makeplusinstall
popd
-fi
+}
+_ffmpeg_mark=lib/libavcodec.dll.a
-## shaderc
-if [ ! -e "$prefix_dir/lib/libshaderc_shared.dll.a" ]; then
+_shaderc () {
if [ ! -d shaderc ]; then
$gitclone https://github.com/google/shaderc.git
(cd shaderc && ./utils/git-sync-deps)
@@ -128,29 +144,29 @@ if [ ! -e "$prefix_dir/lib/libshaderc_shared.dll.a" ]; then
-DBUILD_SHARED_LIBS=OFF -DSHADERC_SKIP_TESTS=ON
makeplusinstall
popd
-fi
+}
+_shaderc_mark=lib/libshaderc_shared.dll.a
-## spirv-cross
-if [ ! -e "$prefix_dir/lib/libspirv-cross-c-shared.dll.a" ]; then
+_spirv_cross () {
[ -d SPIRV-Cross ] || $gitclone https://github.com/KhronosGroup/SPIRV-Cross
builddir SPIRV-Cross
cmake .. "${cmake_args[@]}" \
-DSPIRV_CROSS_SHARED=ON -DSPIRV_CROSS_{CLI,STATIC}=OFF
makeplusinstall
popd
-fi
+}
+_spirv_cross_mark=lib/libspirv-cross-c-shared.dll.a
-## vulkan-headers
-if [ ! -e "$prefix_dir/include/vulkan/vulkan.h" ]; then
+_vulkan_headers () {
[ -d Vulkan-Headers ] || $gitclone https://github.com/KhronosGroup/Vulkan-Headers
builddir Vulkan-Headers
cmake .. "${cmake_args[@]}"
makeplusinstall
popd
-fi
+}
+_vulkan_headers_mark=include/vulkan/vulkan.h
-## vulkan-loader
-if [ ! -e "$prefix_dir/lib/libvulkan-1.dll.a" ]; then
+_vulkan_loader () {
[ -d Vulkan-Loader ] || $gitclone https://github.com/KhronosGroup/Vulkan-Loader
builddir Vulkan-Loader
cmake .. "${cmake_args[@]}" \
@@ -158,73 +174,81 @@ if [ ! -e "$prefix_dir/lib/libvulkan-1.dll.a" ]; then
makeplusinstall
popd
sed -re '/libdir=/s|Lib(32)?|lib|' -i "$prefix_dir/lib/pkgconfig/vulkan.pc" # wat?
-fi
+}
+_vulkan_loader_mark=lib/libvulkan-1.dll.a
-## libplacebo
-if [ ! -e "$prefix_dir/lib/libplacebo.dll.a" ]; then
+_libplacebo () {
[ -d libplacebo ] || $gitclone https://code.videolan.org/videolan/libplacebo.git
builddir libplacebo
meson setup .. --cross-file "$prefix_dir/crossfile" \
-Ddemos=false -D{opengl,d3d11,vulkan}=enabled
makeplusinstall
popd
-fi
+}
+_libplacebo_mark=lib/libplacebo.dll.a
-## freetype2
-if [ ! -e "$prefix_dir/lib/libfreetype.dll.a" ]; then
- ver=2.13.1
+_freetype () {
+ local ver=2.13.1
gettar "https://mirror.netcologne.de/savannah/freetype/freetype-${ver}.tar.xz"
builddir freetype-${ver}
- meson .. --cross-file "$prefix_dir/crossfile"
+ meson setup .. --cross-file "$prefix_dir/crossfile"
makeplusinstall
popd
-fi
+}
+_freetype_mark=lib/libfreetype.dll.a
-## fribidi
-if [ ! -e "$prefix_dir/lib/libfribidi.dll.a" ]; then
- ver=1.0.13
+_fribidi () {
+ local ver=1.0.13
gettar "https://github.com/fribidi/fribidi/releases/download/v${ver}/fribidi-${ver}.tar.xz"
builddir fribidi-${ver}
- meson .. --cross-file "$prefix_dir/crossfile" \
+ meson setup .. --cross-file "$prefix_dir/crossfile" \
-D{tests,docs}=false
makeplusinstall
popd
-fi
+}
+_fribidi_mark=lib/libfribidi.dll.a
-## harfbuzz
-if [ ! -e "$prefix_dir/lib/libharfbuzz.dll.a" ]; then
- ver=8.1.1
+_harfbuzz () {
+ local ver=8.1.1
gettar "https://github.com/harfbuzz/harfbuzz/releases/download/${ver}/harfbuzz-${ver}.tar.xz"
builddir harfbuzz-${ver}
- meson .. --cross-file "$prefix_dir/crossfile" \
+ meson setup .. --cross-file "$prefix_dir/crossfile" \
-Dtests=disabled
makeplusinstall
popd
-fi
+}
+_harfbuzz_mark=lib/libharfbuzz.dll.a
-## libass
-if [ ! -e "$prefix_dir/lib/libass.dll.a" ]; then
+_libass () {
[ -d libass ] || $gitclone https://github.com/libass/libass.git
builddir libass
[ -f ../configure ] || (cd .. && ./autogen.sh)
../configure --host=$TARGET $commonflags
makeplusinstall
popd
-fi
+}
+_libass_mark=lib/libass.dll.a
-## luajit
-if [ ! -e "$prefix_dir/lib/libluajit-5.1.a" ]; then
- $gitclone https://github.com/LuaJIT/LuaJIT.git
+_luajit () {
+ [ -d LuaJIT ] || $gitclone https://github.com/LuaJIT/LuaJIT.git
pushd LuaJIT
- hostcc="ccache cc"
- flags=
+ local hostcc="ccache cc"
+ local flags=
[[ "$TARGET" == "i686-"* ]] && { hostcc="$hostcc -m32"; flags=XCFLAGS=-DLUAJIT_NO_UNWIND; }
make TARGET_SYS=Windows clean
make TARGET_SYS=Windows HOST_CC="$hostcc" CROSS="ccache $TARGET-" \
BUILDMODE=static $flags amalg
make DESTDIR="$prefix_dir" INSTALL_DEP= FILE_T=luajit.exe install
popd
-fi
+}
+_luajit_mark=lib/libluajit-5.1.a
+
+for x in \
+ iconv zlib ffmpeg shaderc spirv-cross vulkan-headers vulkan-loader \
+ libplacebo freetype fribidi harfbuzz libass luajit
+do
+ build_if_missing $x
+done
## mpv