diff --git a/images/base-win32/Dockerfile b/images/base-win32/Dockerfile new file mode 100644 index 0000000..2470ef8 --- /dev/null +++ b/images/base-win32/Dockerfile @@ -0,0 +1,26 @@ +ARG GH_REPO=btbn/ffmpeg-builds +FROM docker.pkg.github.com/$GH_REPO/base:latest + +ENV DEBIAN_FRONTEND noninteractive + +RUN \ + apt-get -y install mingw-w64 && \ + apt-get -y clean && \ + rm /usr/lib/gcc/*-w64-mingw32/*/libstdc++*.dll* && \ + rm /usr/lib/gcc/*-w64-mingw32/*/libgcc_s* && \ + rm /usr/lib/gcc/*-w64-mingw32/*/*.dll.a && \ + rm /usr/*-w64-mingw32/lib/*.dll.a && \ + mkdir /opt/ffbuild + +ADD toolchain.cmake /toolchain.cmake +ADD cross.meson /cross.meson + +ENV FFBUILD_TARGET_FLAGS="--pkg-config=pkg-config --cross-prefix=i686-w64-mingw32- --arch=i686 --target-os=mingw32" \ + FFBUILD_TOOLCHAIN=i686-w64-mingw32 \ + FFBUILD_CROSS_PREFIX=i686-w64-mingw32- \ + FFBUILD_PREFIX=/opt/ffbuild \ + FFBUILD_CMAKE_TOOLCHAIN=/toolchain.cmake \ + PKG_CONFIG_LIBDIR=/opt/ffbuild/lib/pkgconfig \ + CFLAGS="-static-libgcc -static-libstdc++ -I/opt/ffbuild/include -O2 -pipe -D_FORTIFY_SOURCE=2 -fstack-protector-strong" \ + CXXFLAGS="-static-libgcc -static-libstdc++ -I/opt/ffbuild/include -O2 -pipe -D_FORTIFY_SOURCE=2 -fstack-protector-strong" \ + LDFLAGS="-static-libgcc -static-libstdc++ -L/opt/ffbuild/lib -O2 -pipe -fstack-protector-strong" diff --git a/images/base-win32/cross.meson b/images/base-win32/cross.meson new file mode 100644 index 0000000..ed4dc21 --- /dev/null +++ b/images/base-win32/cross.meson @@ -0,0 +1,18 @@ +[binaries] +c = 'i686-w64-mingw32-gcc' +cpp = 'i686-w64-mingw32-g++' +ar = 'i686-w64-mingw32-ar' +strip = 'i686-w64-mingw32-strip' +windres = 'i686-w64-mingw32-windres' +exe_wrapper = ['wine'] + +[properties] +c_link_args = ['-static-libgcc'] +cpp_link_args = ['-static-libgcc', '-static-libstdc++'] +needs_exe_wrapper = true + +[host_machine] +system = 'windows' +cpu_family = 'i686' +cpu = 'i686' +endian = 'little' diff --git a/images/base-win32/toolchain.cmake b/images/base-win32/toolchain.cmake new file mode 100644 index 0000000..526610e --- /dev/null +++ b/images/base-win32/toolchain.cmake @@ -0,0 +1,13 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR i686) + +set(CMAKE_C_COMPILER i686-w64-mingw32-gcc) +set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) +set(CMAKE_RC_COMPILER i686-w64-mingw32-windres) +set(CMAKE_RANLIB i686-w64-mingw32-ranlib) + +set(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32 /opt/ffbuild) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/scripts.d/25-openssl.sh b/scripts.d/25-openssl.sh index e1ebad7..93ed95b 100755 --- a/scripts.d/25-openssl.sh +++ b/scripts.d/25-openssl.sh @@ -26,11 +26,16 @@ ffbuild_dockerbuild() { --prefix="$FFBUILD_PREFIX" ) - if [[ $TARGET == win* ]]; then + if [[ $TARGET == win64 ]]; then myconf+=( --cross-compile-prefix="$FFBUILD_CROSS_PREFIX" mingw64 ) + elif [[ $TARGET == win32 ]]; then + myconf+=( + --cross-compile-prefix="$FFBUILD_CROSS_PREFIX" + mingw + ) else echo "Unknown target" return -1 diff --git a/scripts.d/50-dav1d.sh b/scripts.d/50-dav1d.sh index 6f84bef..69c311d 100755 --- a/scripts.d/50-dav1d.sh +++ b/scripts.d/50-dav1d.sh @@ -24,9 +24,9 @@ ffbuild_dockerbuild() { --default-library=static ) - if [[ $TARGET == win64 ]]; then + if [[ $TARGET == win* ]]; then myconf+=( - --cross-file=../package/crossfiles/x86_64-w64-mingw32.meson + --cross-file=/cross.meson ) else echo "Unknown target" diff --git a/scripts.d/50-libvpx.sh b/scripts.d/50-libvpx.sh index 5b59c66..d3288b3 100755 --- a/scripts.d/50-libvpx.sh +++ b/scripts.d/50-libvpx.sh @@ -26,11 +26,16 @@ ffbuild_dockerbuild() { --prefix="$FFBUILD_PREFIX" ) - if [[ $TARGET == win* ]]; then + if [[ $TARGET == win64 ]]; then myconf+=( --target=x86_64-win64-gcc ) export CROSS="$FFBUILD_CROSS_PREFIX" + elif [[ $TARGET == win32 ]]; then + myconf+=( + --target=x86-win32-gcc + ) + export CROSS="$FFBUILD_CROSS_PREFIX" else echo "Unknown target" return -1 diff --git a/scripts.d/50-svtav1.sh b/scripts.d/50-svtav1.sh index cada4ef..26ae08f 100755 --- a/scripts.d/50-svtav1.sh +++ b/scripts.d/50-svtav1.sh @@ -4,6 +4,7 @@ SVTAV1_REPO="https://github.com/OpenVisualCloud/SVT-AV1.git" SVTAV1_COMMIT="0dc2297715861b78577b3790e361af74b6c4bfef" ffbuild_enabled() { + [[ $TARGET == win32 ]] && return -1 [[ $VARIANT == *4.3* ]] && return -1 return 0 } diff --git a/scripts.d/50-x265.sh b/scripts.d/50-x265.sh index fb2c013..9606138 100755 --- a/scripts.d/50-x265.sh +++ b/scripts.d/50-x265.sh @@ -18,24 +18,25 @@ ffbuild_dockerbuild() { cd x265 git checkout "$X265_COMMIT" - mkdir 8bit 10bit 12bit + if [[ $TARGET != *32 ]]; then + mkdir 8bit 10bit 12bit - cd 12bit - cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DMAIN12=ON ../source || return -1 - make -j$(nproc) || return -1 - cp libx265.a ../8bit/libx265_main12.a - - cd ../10bit - cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF ../source || return -1 - make -j$(nproc) || return -1 - cp libx265.a ../8bit/libx265_main10.a + cd 12bit + cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DMAIN12=ON ../source + make -j$(nproc) + cp libx265.a ../8bit/libx265_main12.a - cd ../8bit - cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" -DEXTRA_LIB="x265_main10.a;x265_main12.a" -DEXTRA_LINK_FLAGS=-L. -DLINKED_10BIT=ON -DLINKED_12BIT=ON -DENABLE_SHARED=OFF -DENABLE_CLI=OFF ../source || return -1 - make -j$(nproc) || return -1 - mv libx265.a libx265_main.a + cd ../10bit + cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF ../source + make -j$(nproc) + cp libx265.a ../8bit/libx265_main10.a - ${FFBUILD_CROSS_PREFIX}ar -M <