Exp/GitHub ci (#3)

Create builder and publish them in GitHub packages.

* Removed gcc7 docker file
* Updated documentation
This commit is contained in:
Jixun Wu
2021-06-12 20:56:31 +01:00
committed by GitHub
parent de3937c6ab
commit 0a5ce1551c
10 changed files with 94 additions and 357 deletions

48
.github/workflows/build-images.yml vendored Normal file
View File

@@ -0,0 +1,48 @@
# This is a basic workflow to help you get started with Actions
name: "Build base image"
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
strategy:
matrix:
gcc: [10]
build_arch:
- "x86-64"
- "broadwell"
- "silvermont"
- "znver2"
steps:
- uses: actions/checkout@v2
# Setup caching
- uses: satackey/action-docker-layer-caching@v0.0.11
continue-on-error: true
with:
key: "docker-${{ github.workflow }}-${{ matrix.gcc }}-${{ matrix.build_arch }}"
restore-keys: |
docker-${{ github.workflow }}-${{ matrix.gcc }}-${{ matrix.build_arch }}
docker-${{ github.workflow }}-${{ matrix.gcc }}-
docker-${{ github.workflow }}-
docker-
- name: Build and Publish latest Docker image
uses: VaultVulp/gp-docker-action@1.1.8
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
image-name: "builder"
image-tag: "gcc-${{ matrix.gcc }}-${{ matrix.build_arch }}"
build-context: builder
dockerfile: "builder/Dockerfile.gcc-${{ matrix.gcc }}"
custom-args: "--build-arg BUILD_ARCH=${{ matrix.build_arch }}"

View File

@@ -7,14 +7,7 @@ Instructions taken from: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
## Build docker image locally
```sh
cd builder
docker build . --tag jixun/ffmpeg-builder:latest
```
※ Should be available in [Docker Hub][hub], but is untagged.
[hub]: https://hub.docker.com/r/jixun/ffmpeg-builder
See readme at `builder` folder.
## Build ffmpeg
@@ -24,3 +17,31 @@ To build latest snapshot of ffmpeg:
mkdir -p bin
docker run --rm -v "$(pwd)/bin:/build/bin" jixun/ffmpeg-builder
```
To build a release (e.g. 4.4):
```sh
mkdir -p bin
docker run --rm -v "$(pwd)/bin:/build/bin" jixun/ffmpeg-builder 4.4
```
To build v4.4 using a pre-built docker image:
```sh
mkdir -p bin
docker run --rm -v "$(pwd)/bin:/build/bin" docker.pkg.github.com/jixunmoe/ffmpeg-builder/builder:gcc-10-x86-64 4.4
```
`-march` is available for the following:
* `x86-64` (generic)
* `silvermont`
* `broadwell`
* `znver2` (Ryzen)
e.g. for a Ryzen optimised build:
```sh
mkdir -p bin
docker run --rm -v "$(pwd)/bin:/build/bin" docker.pkg.github.com/jixunmoe/ffmpeg-builder/builder:gcc-10-znver2 4.4
```

View File

@@ -1,6 +1,8 @@
# Ubuntu 20.04
FROM ubuntu:focal-20200729
ARG BUILD_ARCH="x86_64"
# Update packages
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive \
apt-get -y install \
@@ -42,8 +44,9 @@ WORKDIR /build/lib
ENV CC=gcc-10 \
CXX=g++-10 \
CFLAGS="-O3 " \
CXXFLAGS="-O3 " \
CFLAGS="-O3 -march=${BUILD_ARCH}" \
CXXFLAGS="-O3 -march=${BUILD_ARCH}" \
GCC_BUILD_ARCH="${BUILD_ARCH}" \
PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/lib/pkgconfig
################################################################################

View File

@@ -1,83 +0,0 @@
# Ubuntu 20.04
FROM ubuntu:focal-20200729
# Update packages
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive \
apt-get -y install \
autoconf \
automake \
cmake \
gcc-10 \
g++-10 \
git-core \
libc6-dev \
libfontconfig1-dev \
libfreetype6-dev \
libmp3lame-dev \
libnuma-dev \
libopus-dev \
libtool \
libvpx-dev \
make \
nasm \
pkg-config \
python3-minimal \
texinfo \
wget \
yasm \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /build && \
cd /build && \
mkdir -p src deps tmp bin lib
COPY local-bin /usr/local/bin
WORKDIR /build/lib
################################################################################
# Last chance to setup build flags!
ENV CC=gcc-10 \
CXX=g++-10 \
CFLAGS="-march=broadwell -O3" \
CXXFLAGS="-march=broadwell -O3" \
PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/lib/pkgconfig
################################################################################
COPY deps/libass /build/deps/
RUN make-deps
COPY deps/fdk-aac /build/deps/
RUN make-deps
COPY deps/x264_x265 /build/deps/
RUN make-deps
COPY deps/libvorbis /build/deps/
RUN make-deps
COPY deps/gnutls /build/deps/
RUN make-deps
COPY deps/libbluray /build/deps/
RUN make-deps
COPY deps/libsdl2 /build/deps/
RUN make-deps
################################################################################
COPY gcc-filter /tmp/gcc-filter
RUN cd /tmp/gcc-filter && sh build
################################################################################
VOLUME /build/bin
COPY build-ffmpeg /
ENTRYPOINT [ "/build-ffmpeg" ]

View File

@@ -1,83 +0,0 @@
# Ubuntu 20.04
FROM ubuntu:focal-20200729
# Update packages
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive \
apt-get -y install \
autoconf \
automake \
cmake \
gcc-10 \
g++-10 \
git-core \
libc6-dev \
libfontconfig1-dev \
libfreetype6-dev \
libmp3lame-dev \
libnuma-dev \
libopus-dev \
libtool \
libvpx-dev \
make \
nasm \
pkg-config \
python3-minimal \
texinfo \
wget \
yasm \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /build && \
cd /build && \
mkdir -p src deps tmp bin lib
COPY local-bin /usr/local/bin
WORKDIR /build/lib
################################################################################
# Last chance to setup build flags!
ENV CC=gcc-10 \
CXX=g++-10 \
CFLAGS="-march=silvermont -O3" \
CXXFLAGS="-march=silvermont -O3" \
PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/lib/pkgconfig
################################################################################
COPY deps/libass /build/deps/
RUN make-deps
COPY deps/fdk-aac /build/deps/
RUN make-deps
COPY deps/x264_x265 /build/deps/
RUN make-deps
COPY deps/libvorbis /build/deps/
RUN make-deps
COPY deps/gnutls /build/deps/
RUN make-deps
COPY deps/libbluray /build/deps/
RUN make-deps
COPY deps/libsdl2 /build/deps/
RUN make-deps
################################################################################
COPY gcc-filter /tmp/gcc-filter
RUN cd /tmp/gcc-filter && sh build
################################################################################
VOLUME /build/bin
COPY build-ffmpeg /
ENTRYPOINT [ "/build-ffmpeg" ]

View File

@@ -1,83 +0,0 @@
# Ubuntu 20.04
FROM ubuntu:focal-20200729
# Update packages
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive \
apt-get -y install \
autoconf \
automake \
cmake \
gcc-10 \
g++-10 \
git-core \
libc6-dev \
libfontconfig1-dev \
libfreetype6-dev \
libmp3lame-dev \
libnuma-dev \
libopus-dev \
libtool \
libvpx-dev \
make \
nasm \
pkg-config \
python3-minimal \
texinfo \
wget \
yasm \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /build && \
cd /build && \
mkdir -p src deps tmp bin lib
COPY local-bin /usr/local/bin
WORKDIR /build/lib
################################################################################
# Last chance to setup build flags!
ENV CC=gcc-10 \
CXX=g++-10 \
CFLAGS="-march=znver2 -O3" \
CXXFLAGS="-march=znver2 -O3" \
PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/lib/pkgconfig
################################################################################
COPY deps/libass /build/deps/
RUN make-deps
COPY deps/fdk-aac /build/deps/
RUN make-deps
COPY deps/x264_x265 /build/deps/
RUN make-deps
COPY deps/libvorbis /build/deps/
RUN make-deps
COPY deps/gnutls /build/deps/
RUN make-deps
COPY deps/libbluray /build/deps/
RUN make-deps
COPY deps/libsdl2 /build/deps/
RUN make-deps
################################################################################
COPY gcc-filter /tmp/gcc-filter
RUN cd /tmp/gcc-filter && sh build
################################################################################
VOLUME /build/bin
COPY build-ffmpeg /
ENTRYPOINT [ "/build-ffmpeg" ]

View File

@@ -1,83 +0,0 @@
# Ubuntu 18.04
FROM ubuntu:bionic-20200807
# Update packages
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive \
apt-get -y install \
autoconf \
automake \
cmake \
gcc \
g++ \
git-core \
libc6-dev \
libfontconfig1-dev \
libfreetype6-dev \
libmp3lame-dev \
libnuma-dev \
libopus-dev \
libtool \
libvpx-dev \
make \
nasm \
pkg-config \
python3-minimal \
texinfo \
wget \
yasm \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /build && \
cd /build && \
mkdir -p src deps tmp bin lib
COPY local-bin /usr/local/bin
WORKDIR /build/lib
################################################################################
# Last chance to setup build flags!
ENV CC=gcc \
CXX=g++ \
CFLAGS="-O3 " \
CXXFLAGS="-O3 " \
PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/lib/pkgconfig
################################################################################
COPY deps/libass /build/deps/
RUN make-deps
COPY deps/fdk-aac /build/deps/
RUN make-deps
COPY deps/x264_x265 /build/deps/
RUN make-deps
COPY deps/libvorbis /build/deps/
RUN make-deps
COPY deps/gnutls /build/deps/
RUN make-deps
COPY deps/libbluray /build/deps/
RUN make-deps
COPY deps/libsdl2 /build/deps/
RUN make-deps
################################################################################
COPY gcc-filter /tmp/gcc-filter
RUN cd /tmp/gcc-filter && sh build
################################################################################
VOLUME /build/bin
COPY build-ffmpeg /
ENTRYPOINT [ "/build-ffmpeg" ]

View File

@@ -8,19 +8,12 @@ Instructions taken from: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
## Build docker image locally
```sh
cd builder
docker build . --tag jixun/ffmpeg-builder:latest
docker build . --build-arg BUILD_ARCH=native --tag jixun/ffmpeg-builder:latest
```
※ Should be available in [Docker Hub][hub], but is untagged.
[hub]: https://hub.docker.com/r/jixun/ffmpeg-builder
## Build ffmpeg
To build latest snapshot of ffmpeg:
Running above code should produce a natively optimised copy of ffmpeg dependencies.
For a generic build, use the following instead:
```sh
mkdir -p bin
docker run --rm -v "$(pwd)/bin:/build/bin" jixun/ffmpeg-builder
docker build . --tag jixun/ffmpeg-builder:latest
```

View File

@@ -2,19 +2,23 @@
cd /build/src
COMPILE_VER=4.4
COMPILE_VER=snapshot
if [ ! -z "$1" ]; then
COMPILE_VER="$1"
shift
fi
# Use it like: "-O2 -ftree-vectorize -march=native"
# Use it like: "-O2 -ftree-vectorize"
EXTRA_CFLAGS="-O3"
if [ ! -z "$1" ]; then
EXTRA_CFLAGS="$1"
shift
fi
if [ "$GCC_BUILD_ARCH" == "" ]; then
GCC_BUILD_ARCH="x86-64"
fi
renice -n 19 -p $$
wget -qO - "https://ffmpeg.org/releases/ffmpeg-${COMPILE_VER}.tar.bz2" | tar jx
@@ -27,7 +31,7 @@ cd "ffmpeg-${COMPILE_VER}"
--dep-cc="${CC}" \
--prefix="/usr" \
--pkg-config-flags="--static" \
--extra-cflags="${EXTRA_CFLAGS} -static -Wl,-Bdynamic,-lgcc_s,-Bstatic" \
--extra-cflags="${EXTRA_CFLAGS} -march=${GCC_BUILD_ARCH} -static -Wl,-Bdynamic,-lgcc_s,-Bstatic" \
--extra-ldflags="-static" \
--extra-libs="-lpthread -lm" \
--bindir="/build/bin" \

View File

@@ -6,7 +6,7 @@ set -ex
# cat /sys/devices/cpu/caps/pmu_name
# gcc -march=native -Q --help=target | awk '/march/ {print $2}'
for BUILD_ARCH in broadwell silvermont znver2; do
for BUILD_ARCH in x86-64 broadwell silvermont znver2; do
INPUT_FILE=Dockerfile.gcc-10
OUTPUT_FILE="${INPUT_FILE}.${BUILD_ARCH}"
sed "s/\(C\(XX\)\?FLAGS\)=\"/\1=\"-march=${BUILD_ARCH} /" < "$INPUT_FILE" > "$OUTPUT_FILE"