diff --git a/build.sh b/build.sh index 6d53c50..98a083b 100755 --- a/build.sh +++ b/build.sh @@ -19,14 +19,16 @@ source "variants/${VARIANT}.sh" source "variants/${TARGET}-${VARIANT}.sh" for script in scripts.d/*.sh; do - CONFIGURE+=" $(get_output $script configure)" - CFLAGS+=" $(get_output $script cflags)" - LDFLAGS+=" $(get_output $script ldflags)" + FF_CONFIGURE+=" $(get_output $script configure)" + FF_CFLAGS+=" $(get_output $script cflags)" + FF_CXXFLAGS+=" $(get_output $script cxxflags)" + FF_LDFLAGS+=" $(get_output $script ldflags)" done -CONFIGURE="$(xargs <<< "$CONFIGURE")" -CFLAGS="$(xargs <<< "$CFLAGS")" -LDFLAGS="$(xargs <<< "$LDFLAGS")" +FF_CONFIGURE="$(xargs <<< "$FF_CONFIGURE")" +FF_CFLAGS="$(xargs <<< "$FF_CFLAGS")" +FF_CXXFLAGS="$(xargs <<< "$FF_CXXFLAGS")" +FF_LDFLAGS="$(xargs <<< "$FF_LDFLAGS")" rm -rf ffbuild mkdir ffbuild @@ -40,7 +42,7 @@ docker run --rm -i -u "$(id -u):$(id -g)" -v $PWD/ffbuild:/ffbuild "$IMAGE" bash cd ffmpeg git checkout $GIT_BRANCH - ./configure --prefix=/ffbuild/prefix --pkg-config-flags="--static" \$FFBUILD_TARGET_FLAGS $CONFIGURE --extra-cflags="$CFLAGS" --extra-ldflags="$LDFLAGS" + ./configure --prefix=/ffbuild/prefix --pkg-config-flags="--static" \$FFBUILD_TARGET_FLAGS $FF_CONFIGURE --extra-cflags="$FF_CFLAGS" --extra-cxxflags="$FF_CXXFLAGS" --extra-ldflags="$FF_LDFLAGS" make -j\$(nproc) make install EOF diff --git a/generate.sh b/generate.sh index 6280c35..95f74d1 100755 --- a/generate.sh +++ b/generate.sh @@ -12,7 +12,6 @@ to_df() { to_df "FROM $REPO:base-$TARGET" to_df "ENV TARGET=$TARGET VARIANT=$VARIANT REPO=$REPO" -to_df "ENV FFBUILD_PREFIX=/opt/ffbuild PKG_CONFIG_LIBDIR=/opt/ffbuild/lib/pkgconfig" for script in scripts.d/*.sh; do ( diff --git a/images/base-win64/Dockerfile b/images/base-win64/Dockerfile index 2ddb363..0eb6950 100644 --- a/images/base-win64/Dockerfile +++ b/images/base-win64/Dockerfile @@ -4,8 +4,19 @@ ENV DEBIAN_FRONTEND noninteractive RUN \ apt-get -y install mingw-w64 && \ - apt-get -y clean + apt-get -y clean && \ + rm /usr/lib/gcc/*-w64-mingw32/*/libstdc++*.dll* && \ + rm /usr/lib/gcc/*-w64-mingw32/*/libgcc_s* && \ + mkdir /opt/ffbuild -ENV FFBUILD_TARGET_FLAGS "--pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=win32" -ENV FFBUILD_TOOLCHAIN x86_64-w64-mingw32 -ENV FFBUILD_CROSS_PREFIX x86_64-w64-mingw32- +ADD toolchain.cmake /toolchain.cmake + +ENV FFBUILD_TARGET_FLAGS="--pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=win32" \ + FFBUILD_TOOLCHAIN=x86_64-w64-mingw32 \ + FFBUILD_CROSS_PREFIX=x86_64-w64-mingw32- \ + FFBUILD_PREFIX=/opt/ffbuild \ + FFBUILD_CMAKE_TOOLCHAIN=/toolchain.cmake \ + PKG_CONFIG_LIBDIR=/opt/ffbuild/lib/pkgconfig \ + CFLAGS="-static-libgcc -static-libstdc++" \ + CXXFLAGS="-static-libgcc -static-libstdc++" \ + LDFLAGS="-static-libgcc -static-libstdc++" diff --git a/images/base-win64/toolchain.cmake b/images/base-win64/toolchain.cmake new file mode 100644 index 0000000..a9bfad3 --- /dev/null +++ b/images/base-win64/toolchain.cmake @@ -0,0 +1,12 @@ +set(CMAKE_SYSTEM_NAME Windows) + +set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) +set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) +set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) +set(CMAKE_RANLIB x86_64-w64-mingw32-ranlib) + +set(CMAKE_FIND_ROOT_PATH /usr/x86_64-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/images/base/Dockerfile b/images/base/Dockerfile index b3dfcc2..681bf31 100644 --- a/images/base/Dockerfile +++ b/images/base/Dockerfile @@ -5,5 +5,5 @@ ENV DEBIAN_FRONTEND noninteractive RUN \ apt-get -y update && \ apt-get -y dist-upgrade && \ - apt-get -y install build-essential yasm nasm pkg-config git curl wget cmake unzip subversion autoconf automake libtool clang texinfo texi2html && \ + apt-get -y install build-essential yasm nasm pkg-config git curl wget cmake unzip subversion autoconf automake libtool cmake clang texinfo texi2html && \ apt-get -y clean diff --git a/scripts.d/50-x265.sh b/scripts.d/50-x265.sh new file mode 100755 index 0000000..db8e034 --- /dev/null +++ b/scripts.d/50-x265.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +X265_REPO="https://github.com/videolan/x265.git" +X265_COMMIT="ac186359c3706f63579b2291cd2dc84f6e17a336" + +ffbuild_enabled() { + [[ $VARIANT == gpl* ]] || return -1 + return 0 +} + +ffbuild_dockerstage() { + to_df "ADD $SELF /root/x264.sh" + to_df "RUN bash -c 'source /root/x264.sh && ffbuild_dockerbuild && rm /root/x264.sh'" +} + +ffbuild_dockerbuild() { + git clone "$X265_REPO" x265 || return -1 + cd x265 + git checkout "$X265_COMMIT" || return -1 + + mkdir 8bit 10bit 12bit + + cd 12bit + cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -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" -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 ../8bit + cmake -DCMAKE_TOOLCHAIN_FILE="$FFBUILD_CMAKE_TOOLCHAIN" -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 + + ${FFBUILD_CROSS_PREFIX}ar -M <