diff --git a/build.sh b/build.sh index 6de14e8..fbfe048 100755 --- a/build.sh +++ b/build.sh @@ -40,7 +40,7 @@ FF_LIBS="$(xargs <<< "$FF_LIBS")" TESTFILE="uidtestfile" rm -f "$TESTFILE" -docker run --rm -v "$PWD:/uidtestdir" "$IMAGE" /usr/bin/touch "/uidtestdir/$TESTFILE" +docker run --rm -v "$PWD:/uidtestdir" "$IMAGE" touch "/uidtestdir/$TESTFILE" DOCKERUID="$(stat -c "%u" "$TESTFILE")" rm -f "$TESTFILE" [[ "$DOCKERUID" != "$(id -u)" ]] && UIDARGS=( -u "$(id -u):$(id -g)" ) || UIDARGS=() @@ -59,7 +59,7 @@ docker run --rm -i "${UIDARGS[@]}" -v $PWD/ffbuild:/ffbuild "$IMAGE" bash -s < "${ARTIFACTS_PATH}/${TARGET}-${VARIANT}${ADDINS_STR:+-}${ADDINS_STR}.txt" + echo "${OUTPUT_FNAME}" > "${ARTIFACTS_PATH}/${TARGET}-${VARIANT}${ADDINS_STR:+-}${ADDINS_STR}.txt" fi diff --git a/images/base-linux64/Dockerfile b/images/base-linux64/Dockerfile new file mode 100644 index 0000000..cc0d9fd --- /dev/null +++ b/images/base-linux64/Dockerfile @@ -0,0 +1,31 @@ +FROM alpine:edge + +ENV CARGO_HOME="/opt/cargo" PATH="/opt/cargo/bin:${PATH}" +RUN \ + apk add --no-cache \ + yasm nasm diffutils xxd pkgconf git ca-certificates curl wget unzip subversion autoconf automake libtool perl make cmake clang texinfo gperf gettext gettext-dev gettext-static itstool ragel musl-dev openssl-dev zlib-dev bzip2-static gtk-doc gobject-introspection gawk meson samurai p7zip python3 \ + binutils gcc g++ gfortran \ + rust cargo && \ + ln -s python3 /usr/bin/python && \ + cargo install cargo-c && rm -rf "${CARGO_HOME}"/{registry,git} && \ + git config --global user.email "builder@localhost" && \ + git config --global user.name "Builder" && \ + mkdir /opt/ffbuild + +ADD run_stage.sh /usr/bin/run_stage +ADD git-mini-clone.sh /usr/bin/git-mini-clone +ADD check-wget.sh /usr/bin/check-wget + +ADD toolchain.cmake /toolchain.cmake +ADD cross.meson /cross.meson + +ENV FFBUILD_TARGET_FLAGS="" \ + FFBUILD_TOOLCHAIN=x86_64-alpine-linux-musl \ + FFBUILD_CROSS_PREFIX="" \ + FFBUILD_RUST_TARGET="" \ + 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-linux64/check-wget.sh b/images/base-linux64/check-wget.sh new file mode 100755 index 0000000..9e64bba --- /dev/null +++ b/images/base-linux64/check-wget.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -xe +FNAME="$1" +URL="$2" +SHA512="$3" +SHAFILE="${FNAME}.sha512" +wget -O "${FNAME}" "${URL}" +trap "rm -f ${SHAFILE}" EXIT +echo "${SHA512} ${FNAME}" > "${SHAFILE}" +sha512sum -c "${SHAFILE}" diff --git a/images/base-linux64/cross.meson b/images/base-linux64/cross.meson new file mode 100644 index 0000000..a695169 --- /dev/null +++ b/images/base-linux64/cross.meson @@ -0,0 +1,15 @@ +[binaries] +c = 'x86_64-alpine-linux-musl-gcc' +cpp = x86_64-alpine-linux-musl-g++' +ar = 'ar' +strip = 'strip' + +[properties] +c_link_args = ['-static-libgcc', '-L/opt/ffbuild/lib', '-O2', '-pipe', '-fstack-protector-strong'] +cpp_link_args = ['-static-libgcc', '-static-libstdc++', '-L/opt/ffbuild/lib', '-O2', '-pipe', '-fstack-protector-strong'] + +[host_machine] +system = 'linux' +cpu_family = 'x86_64' +cpu = 'x86_64' +endian = 'little' diff --git a/images/base-linux64/git-mini-clone.sh b/images/base-linux64/git-mini-clone.sh new file mode 100755 index 0000000..29ff3a8 --- /dev/null +++ b/images/base-linux64/git-mini-clone.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -xe +REPO="$1" +REF="$2" +DEST="$3" +git init "$DEST" +git -C "$DEST" remote add origin "$REPO" +git -C "$DEST" fetch --depth=1 origin "$REF" +git -C "$DEST" config advice.detachedHead false +git -C "$DEST" checkout FETCH_HEAD diff --git a/images/base-linux64/run_stage.sh b/images/base-linux64/run_stage.sh new file mode 100755 index 0000000..9fe0a97 --- /dev/null +++ b/images/base-linux64/run_stage.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -xe +mkdir -p /stage +source "$1" +cd /stage +ffbuild_dockerbuild +rm -rf /stage "$FFBUILD_PREFIX"/bin diff --git a/images/base-linux64/toolchain.cmake b/images/base-linux64/toolchain.cmake new file mode 100644 index 0000000..b4989ce --- /dev/null +++ b/images/base-linux64/toolchain.cmake @@ -0,0 +1,12 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +set(CMAKE_C_COMPILER x86_64-alpine-linux-musl-gcc) +set(CMAKE_CXX_COMPILER x86_64-alpine-linux-musl-g++) +set(CMAKE_RANLIB ranlib) + +set(CMAKE_FIND_ROOT_PATH /usr/x86_64-alpine-linux-musl /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/makeimage.sh b/makeimage.sh index 061fea2..7a9c2b2 100755 --- a/makeimage.sh +++ b/makeimage.sh @@ -5,7 +5,10 @@ source util/vars.sh export DOCKER_BUILDKIT=1 -docker build --tag "$BASE_IMAGE" images/base +if grep "FROM.*base.*" "images/base-${TARGET}/Dockerfile" >/dev/null 2>&1; then + docker build --tag "$BASE_IMAGE" images/base +fi + docker build --build-arg GH_REPO="$REPO" --tag "$TARGET_IMAGE" "images/base-${TARGET}" ./generate.sh "$TARGET" "$VARIANT" "${ADDINS[@]}" diff --git a/variants/linux-install-shared.sh b/variants/linux-install-shared.sh new file mode 100644 index 0000000..b5e77bd --- /dev/null +++ b/variants/linux-install-shared.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +package_variant() { + IN="$1" + OUT="$2" + + # mkdir -p "$OUT"/bin + # cp "$IN"/bin/* "$OUT"/bin + + mkdir -p "$OUT"/lib + cp -a "$IN"/lib/*.so* "$OUT"/lib + + mkdir -p "$OUT"/include + cp -r "$IN"/include/* "$OUT"/include + + mkdir -p "$OUT"/doc + cp -r "$IN"/share/doc/ffmpeg/* "$OUT"/doc +} diff --git a/variants/linux64-gpl-shared.sh b/variants/linux64-gpl-shared.sh new file mode 100644 index 0000000..ca8fbb2 --- /dev/null +++ b/variants/linux64-gpl-shared.sh @@ -0,0 +1,3 @@ +#!/bin/bash +source "$(dirname "$BASH_SOURCE")"/linux-install-shared.sh +source "$(dirname "$BASH_SOURCE")"/defaults-gpl-shared.sh diff --git a/variants/linux64-gpl.sh b/variants/linux64-gpl.sh new file mode 100644 index 0000000..b3003a4 --- /dev/null +++ b/variants/linux64-gpl.sh @@ -0,0 +1,3 @@ +#!/bin/bash +source "$(dirname "$BASH_SOURCE")"/default-install.sh +source "$(dirname "$BASH_SOURCE")"/defaults-gpl.sh diff --git a/variants/linux64-lgpl-shared.sh b/variants/linux64-lgpl-shared.sh new file mode 100644 index 0000000..33244aa --- /dev/null +++ b/variants/linux64-lgpl-shared.sh @@ -0,0 +1,3 @@ +#!/bin/bash +source "$(dirname "$BASH_SOURCE")"/linux-install-shared.sh +source "$(dirname "$BASH_SOURCE")"/defaults-lgpl-shared.sh diff --git a/variants/linux64-lgpl.sh b/variants/linux64-lgpl.sh new file mode 100644 index 0000000..f000a33 --- /dev/null +++ b/variants/linux64-lgpl.sh @@ -0,0 +1,3 @@ +#!/bin/bash +source "$(dirname "$BASH_SOURCE")"/default-install.sh +source "$(dirname "$BASH_SOURCE")"/defaults-lgpl.sh diff --git a/variants/win32-gpl-shared.sh b/variants/win32-gpl-shared.sh index ea245b3..93ff7f1 100644 --- a/variants/win32-gpl-shared.sh +++ b/variants/win32-gpl-shared.sh @@ -1,3 +1,3 @@ #!/bin/bash -source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh +source "$(dirname "$BASH_SOURCE")"/windows-install-shared.sh source "$(dirname "$BASH_SOURCE")"/defaults-gpl-shared.sh diff --git a/variants/win32-lgpl-shared.sh b/variants/win32-lgpl-shared.sh index d2c3ae4..ff44219 100644 --- a/variants/win32-lgpl-shared.sh +++ b/variants/win32-lgpl-shared.sh @@ -1,3 +1,3 @@ #!/bin/bash -source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh +source "$(dirname "$BASH_SOURCE")"/windows-install-shared.sh source "$(dirname "$BASH_SOURCE")"/defaults-lgpl-shared.sh diff --git a/variants/win64-gpl-shared.sh b/variants/win64-gpl-shared.sh index ea245b3..93ff7f1 100644 --- a/variants/win64-gpl-shared.sh +++ b/variants/win64-gpl-shared.sh @@ -1,3 +1,3 @@ #!/bin/bash -source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh +source "$(dirname "$BASH_SOURCE")"/windows-install-shared.sh source "$(dirname "$BASH_SOURCE")"/defaults-gpl-shared.sh diff --git a/variants/win64-lgpl-shared.sh b/variants/win64-lgpl-shared.sh index d2c3ae4..ff44219 100644 --- a/variants/win64-lgpl-shared.sh +++ b/variants/win64-lgpl-shared.sh @@ -1,3 +1,3 @@ #!/bin/bash -source "$(dirname "$BASH_SOURCE")"/default-install-shared.sh +source "$(dirname "$BASH_SOURCE")"/windows-install-shared.sh source "$(dirname "$BASH_SOURCE")"/defaults-lgpl-shared.sh diff --git a/variants/default-install-shared.sh b/variants/windows-install-shared.sh similarity index 93% rename from variants/default-install-shared.sh rename to variants/windows-install-shared.sh index 5fd177d..d44677b 100644 --- a/variants/default-install-shared.sh +++ b/variants/windows-install-shared.sh @@ -14,6 +14,6 @@ package_variant() { mkdir -p "$OUT"/include cp -r "$IN"/include/* "$OUT"/include - mkdir -p "$OUT/doc" + mkdir -p "$OUT"/doc cp -r "$IN"/share/doc/ffmpeg/* "$OUT"/doc }