Skip to content

Commit

Permalink
Add support for win32 builds
Browse files Browse the repository at this point in the history
Closes BtbN#3
  • Loading branch information
BtbN committed Sep 27, 2020
1 parent 0e104d9 commit 77b3030
Show file tree
Hide file tree
Showing 17 changed files with 123 additions and 19 deletions.
26 changes: 26 additions & 0 deletions images/base-win32/Dockerfile
Original file line number Diff line number Diff line change
@@ -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"
18 changes: 18 additions & 0 deletions images/base-win32/cross.meson
Original file line number Diff line number Diff line change
@@ -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'
13 changes: 13 additions & 0 deletions images/base-win32/toolchain.cmake
Original file line number Diff line number Diff line change
@@ -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)
7 changes: 6 additions & 1 deletion scripts.d/25-openssl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions scripts.d/50-dav1d.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
7 changes: 6 additions & 1 deletion scripts.d/50-libvpx.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions scripts.d/50-svtav1.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
37 changes: 22 additions & 15 deletions scripts.d/50-x265.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,38 @@ 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 <<EOF
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
make -j$(nproc)
mv libx265.a libx265_main.a

${FFBUILD_CROSS_PREFIX}ar -M <<EOF
CREATE libx265.a
ADDLIB libx265_main.a
ADDLIB libx265_main10.a
ADDLIB libx265_main12.a
SAVE
END
EOF
else
mkdir 8bit
cd 8bit
cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$FFBUILD_PREFIX" -DENABLE_SHARED=OFF -DENABLE_CLI=OFF ../source
make -j$(nproc)
fi

make install || return -1

Expand Down
5 changes: 5 additions & 0 deletions util/vars.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ BASE_IMAGE="${REGISTRY}/${REPO}/base:latest"
TARGET_IMAGE="${REGISTRY}/${REPO}/base-${TARGET}:latest"
IMAGE="${REGISTRY}/${REPO}/${TARGET}-${VARIANT}:latest"

if ! [[ -f "variants/${TARGET}-${VARIANT}.sh" ]]; then
echo "Invalid target/variant"
exit -1
fi

ffbuild_configure() {
return 0
}
Expand Down
3 changes: 3 additions & 0 deletions variants/win32-gpl-4.3-shared.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/win32-gpl-shared.sh
GIT_BRANCH="release/4.3"
3 changes: 3 additions & 0 deletions variants/win32-gpl-4.3.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/win32-gpl.sh
GIT_BRANCH="release/4.3"
3 changes: 3 additions & 0 deletions variants/win32-gpl-shared.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh
source "$(dirname "$BASH_SOURCE")"/defaults-gpl-shared.sh
3 changes: 3 additions & 0 deletions variants/win32-gpl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/default-install.sh
source "$(dirname "$BASH_SOURCE")"/defaults-gpl.sh
3 changes: 3 additions & 0 deletions variants/win32-lgpl-4.3-shared.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/win32-lgpl-shared.sh
GIT_BRANCH="release/4.3"
3 changes: 3 additions & 0 deletions variants/win32-lgpl-4.3.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/win32-lgpl.sh
GIT_BRANCH="release/4.3"
3 changes: 3 additions & 0 deletions variants/win32-lgpl-shared.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh
source "$(dirname "$BASH_SOURCE")"/defaults-lgpl-shared.sh
3 changes: 3 additions & 0 deletions variants/win32-lgpl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
source "$(dirname "$BASH_SOURCE")"/default-install.sh
source "$(dirname "$BASH_SOURCE")"/defaults-lgpl.sh

0 comments on commit 77b3030

Please sign in to comment.