This reverts commit 55db22d242.
The base tarball for setup-msys2 should now be new enough to
include the patched compiler in the clang64 environment, so this
no longer requires updating the environment on each build.
365 lines
13 KiB
YAML
365 lines
13 KiB
YAML
name: Builds
|
|
on:
|
|
push:
|
|
schedule:
|
|
- cron: '0 0 * * *'
|
|
|
|
jobs:
|
|
# For scheduled builds, get the commit ids of the latest versions to build.
|
|
#
|
|
# Doing this as one single job, which then propagates the information further
|
|
# to the other jobs, so that all build jobs in one workflow builds the exact
|
|
# same version. This allows trusting builds without assertions enabled
|
|
# slightly more, when we know a separate build of the same version but with
|
|
# assertions enabled, has passed some amount of tests.
|
|
get-versions:
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Touch file
|
|
run: |
|
|
touch versions
|
|
- name: Check latest version
|
|
if: github.event_name == 'schedule'
|
|
run: |
|
|
echo LLVM_VERSION=$(git ls-remote https://github.com/llvm/llvm-project.git | grep 'refs/heads/main$' | awk '{print $1}') >> versions
|
|
echo MINGW_W64_VERSION=$(git ls-remote https://github.com/mingw-w64/mingw-w64.git | grep 'refs/heads/master$' | awk '{print $1}') >> versions
|
|
echo PYTHON_VERSION_MINGW=$(git ls-remote https://github.com/msys2-contrib/cpython-mingw.git | grep 'refs/heads/mingw-v3.10.5$' | awk '{print $1}') >> versions
|
|
cat versions
|
|
- uses: actions/upload-artifact@v3
|
|
with:
|
|
name: versions
|
|
path: |
|
|
versions
|
|
retention-days: 7
|
|
|
|
# Build a cross compiler for Linux, targeting Windows.
|
|
linux:
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [get-versions]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/download-artifact@v3
|
|
if: github.event_name == 'schedule'
|
|
with:
|
|
name: versions
|
|
- name: Set build env vars
|
|
if: github.event_name == 'schedule'
|
|
run: |
|
|
. versions
|
|
echo Building llvm-project $LLVM_VERSION mingw-w64 $MINGW_W64_VERSION
|
|
cat versions >> $GITHUB_ENV
|
|
mkdir -p install/llvm-mingw
|
|
cp versions install/llvm-mingw
|
|
echo Enabling CFGuard when building with latest llvm and mingw-w64
|
|
echo CFGUARD_PARAMS=--enable-cfguard >> $GITHUB_ENV
|
|
- name: Build
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install ninja-build
|
|
./build-all.sh $(pwd)/install/llvm-mingw --disable-clang-tools-extra --disable-lldb $CFGUARD_PARAMS
|
|
cd install
|
|
tar -Jcf ../llvm-mingw-linux.tar.xz llvm-mingw
|
|
- uses: actions/upload-artifact@v3
|
|
with:
|
|
name: linux-toolchain
|
|
path: |
|
|
llvm-mingw-linux.tar.xz
|
|
retention-days: 7
|
|
|
|
# Build a cross compiler for Linux, targeting Windows, with assertions enabled.
|
|
#
|
|
# The scheduled builds are made with the latest git version of llvm-project
|
|
# and mingw-w64. When using random git snapshot builds of llvm, there's
|
|
# always a risk for bugs - thus build such versions with assertions enabled,
|
|
# to better catch such bugs early. This makes the first-stage toolchain built
|
|
# here in scheduled builds somewhat slower.
|
|
linux-asserts:
|
|
if: (github.event_name == 'schedule') && (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [get-versions]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/download-artifact@v3
|
|
if: github.event_name == 'schedule'
|
|
with:
|
|
name: versions
|
|
- name: Set build env vars
|
|
if: github.event_name == 'schedule'
|
|
run: |
|
|
. versions
|
|
echo Building llvm-project $LLVM_VERSION mingw-w64 $MINGW_W64_VERSION, with assertions enabled
|
|
cat versions >> $GITHUB_ENV
|
|
mkdir -p install/llvm-mingw
|
|
cp versions install/llvm-mingw
|
|
echo Enabling CFGuard when building with latest llvm and mingw-w64
|
|
echo CFGUARD_PARAMS=--enable-cfguard >> $GITHUB_ENV
|
|
- name: Build
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install ninja-build
|
|
./build-all.sh $(pwd)/install/llvm-mingw --disable-clang-tools-extra --disable-lldb --enable-asserts $CFGUARD_PARAMS
|
|
cd install
|
|
tar -Jcf ../llvm-mingw-linux.tar.xz llvm-mingw
|
|
- uses: actions/upload-artifact@v3
|
|
with:
|
|
name: linux-asserts-toolchain
|
|
path: |
|
|
llvm-mingw-linux.tar.xz
|
|
retention-days: 7
|
|
|
|
# Build a cross compiler for macOS, targeting Windows.
|
|
macos:
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [get-versions]
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/download-artifact@v3
|
|
if: github.event_name == 'schedule'
|
|
with:
|
|
name: versions
|
|
- name: Set build env vars
|
|
if: github.event_name == 'schedule'
|
|
run: |
|
|
. versions
|
|
echo Building llvm-project $LLVM_VERSION mingw-w64 $MINGW_W64_VERSION
|
|
cat versions >> $GITHUB_ENV
|
|
echo Enabling CFGuard when building with latest llvm and mingw-w64
|
|
echo CFGUARD_PARAMS=--enable-cfguard >> $GITHUB_ENV
|
|
- uses: actions/checkout@v3
|
|
- name: Build
|
|
run: |
|
|
brew install ninja
|
|
# Building with MACOS_REDIST=1 (building universal binaries) without
|
|
# --disable-lldb fails in Github Actions, because python is available
|
|
# (and gets picked up), but only exists in native form.
|
|
# Disable use of zstd too - it's also available, but only in native
|
|
# form.
|
|
MACOS_REDIST=1 LLVM_CMAKEFLAGS="-DLLVM_ENABLE_ZSTD=OFF" ./build-all.sh $(pwd)/install/llvm-mingw --disable-clang-tools-extra --disable-lldb $CFGUARD_PARAMS
|
|
cd install
|
|
tar -Jcf ../llvm-mingw-macos.tar.xz llvm-mingw
|
|
- uses: actions/upload-artifact@v3
|
|
with:
|
|
name: macos-toolchain
|
|
path: |
|
|
llvm-mingw-macos.tar.xz
|
|
retention-days: 7
|
|
|
|
# Test building the toolchain on msys2 (in the mingw64 and clang64
|
|
# environments). The binaries built here rely on the runtime libraries from
|
|
# the host environment (libstdc++ or libc++). No artifacts are stored from
|
|
# these builds, but llvm-mingw's tests are run.
|
|
msys2:
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [get-versions]
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
sys:
|
|
- mingw64
|
|
- clang64
|
|
steps:
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: ${{matrix.sys}}
|
|
install: >-
|
|
git
|
|
make
|
|
diffutils
|
|
pacboy: >-
|
|
toolchain:p
|
|
cmake:p
|
|
ninja:p
|
|
- uses: actions/download-artifact@v3
|
|
if: github.event_name == 'schedule'
|
|
with:
|
|
name: versions
|
|
- name: Set build env vars
|
|
if: github.event_name == 'schedule'
|
|
run: |
|
|
. versions
|
|
echo Building llvm-project $LLVM_VERSION mingw-w64 $MINGW_W64_VERSION
|
|
cat versions >> $GITHUB_ENV
|
|
echo Enabling CFGuard when building with latest llvm and mingw-w64
|
|
echo CFGUARD_PARAMS=--enable-cfguard >> $GITHUB_ENV
|
|
- uses: actions/checkout@v3
|
|
- name: Build
|
|
run: |
|
|
./build-all.sh $(pwd)/install/llvm-mingw --disable-clang-tools-extra --disable-lldb $CFGUARD_PARAMS
|
|
./run-tests.sh $(pwd)/install/llvm-mingw
|
|
|
|
# Use the Linux cross compilers built in the first step to cross compile
|
|
# llvm and make a proper standalone toolchain for Windows (for all 4
|
|
# architectures). The binaries built here match actual releases quite closely.
|
|
linux-cross:
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [linux]
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch:
|
|
- i686
|
|
- x86_64
|
|
- armv7
|
|
- aarch64
|
|
steps:
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: linux-toolchain
|
|
- name: Unpack cross toolchain
|
|
run: |
|
|
tar -Jxf llvm-mingw-linux.tar.xz
|
|
rm llvm-mingw-linux.tar.xz
|
|
sudo mv llvm-mingw /opt/llvm-mingw
|
|
echo /opt/llvm-mingw/bin >> $GITHUB_PATH
|
|
- name: Fetch version
|
|
if: github.event_name == 'schedule'
|
|
run: |
|
|
. /opt/llvm-mingw/versions
|
|
echo Building llvm-project $LLVM_VERSION mingw-w64 $MINGW_W64_VERSION cpython-mingw $PYTHON_VERSION_MINGW
|
|
cat /opt/llvm-mingw/versions >> $GITHUB_ENV
|
|
echo LLDB_MI_PARAMS=--disable-lldb-mi >> $GITHUB_ENV
|
|
- uses: actions/checkout@v3
|
|
- name: Build
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install autoconf-archive ninja-build
|
|
./build-cross-tools.sh /opt/llvm-mingw $(pwd)/install/llvm-mingw-${{matrix.arch}} ${{matrix.arch}} --with-python $LLDB_MI_PARAMS
|
|
cd install
|
|
zip -9rq ../llvm-mingw-${{matrix.arch}}.zip llvm-mingw-${{matrix.arch}}
|
|
- uses: actions/upload-artifact@v3
|
|
with:
|
|
name: windows-${{matrix.arch}}-toolchain
|
|
path: |
|
|
llvm-mingw-${{matrix.arch}}.zip
|
|
retention-days: 7
|
|
|
|
# Run llvm-mingw's tests on x86_64 (and i686) with the cross-built x86_64
|
|
# toolchain from above.
|
|
test-toolchain:
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [linux-cross]
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch:
|
|
- x86_64
|
|
- i686
|
|
steps:
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: mingw64
|
|
install: >-
|
|
unzip
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: windows-${{matrix.arch}}-toolchain
|
|
- name: Unpack toolchain
|
|
run: |
|
|
unzip -q llvm-mingw-*.zip
|
|
rm llvm-mingw-*.zip
|
|
mv llvm-mingw-* /llvm-mingw
|
|
echo /llvm-mingw/bin >> $GITHUB_PATH
|
|
- uses: actions/checkout@v3
|
|
- name: Run tests
|
|
run: |
|
|
./run-tests.sh /llvm-mingw
|
|
./run-lldb-tests.sh /llvm-mingw
|
|
|
|
# Test cross-building ffmpeg for all 4 targeted architectures from linux.
|
|
# This is done only on scheduled builds, with a toolchain with assertions
|
|
# enabled, to catch code generation bugs that might trigger asserts, to
|
|
# find such regressions early.
|
|
linux-test-cross-build-ffmpeg:
|
|
if: (github.event_name == 'schedule') && (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [linux-asserts]
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch:
|
|
- i686
|
|
- x86_64
|
|
- armv7
|
|
- aarch64
|
|
steps:
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: linux-asserts-toolchain
|
|
- name: Unpack cross toolchain
|
|
run: |
|
|
tar -Jxf llvm-mingw-linux.tar.xz
|
|
rm llvm-mingw-linux.tar.xz
|
|
sudo mv llvm-mingw /opt/llvm-mingw
|
|
echo /opt/llvm-mingw/bin >> $GITHUB_PATH
|
|
- name: Checkout ffmpeg
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: ffmpeg/ffmpeg
|
|
path: ffmpeg
|
|
- name: Build ffmpeg
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install nasm
|
|
mkdir ffmpeg-build
|
|
cd ffmpeg-build
|
|
../ffmpeg/configure --arch=${{matrix.arch}} --target-os=mingw32 --cross-prefix=${{matrix.arch}}-w64-mingw32- --enable-gpl
|
|
make -j$(nproc)
|
|
|
|
# Test building ffmpeg for natively on x86_64 Windows and run its tests,
|
|
# to find cases of compiler bugs don't show up as failed asserts in the
|
|
# compiler itself, but that only show up at runtime. This is only done
|
|
# for scheduled builds.
|
|
test-ffmpeg:
|
|
if: (github.event_name == 'schedule') && (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [linux-cross]
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
steps:
|
|
- name: Avoid git checking out files with CRLF
|
|
shell: cmd
|
|
run: |
|
|
git config --global core.autocrlf false
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: mingw64
|
|
update: false
|
|
install: >-
|
|
unzip
|
|
make
|
|
rsync
|
|
diffutils
|
|
pacboy: >-
|
|
nasm:p
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: windows-x86_64-toolchain
|
|
- name: Unpack toolchain
|
|
run: |
|
|
unzip -q llvm-mingw-x86_64.zip
|
|
rm llvm-mingw-x86_64.zip
|
|
mv llvm-mingw-* /llvm-mingw
|
|
echo /llvm-mingw/bin >> $GITHUB_PATH
|
|
- name: Checkout ffmpeg
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: ffmpeg/ffmpeg
|
|
path: ffmpeg
|
|
- name: Build & test ffmpeg
|
|
run: |
|
|
export PATH=/llvm-mingw/bin:$PATH
|
|
mkdir ffmpeg-build
|
|
cd ffmpeg-build
|
|
../ffmpeg/configure --samples=../fate-samples --enable-gpl --ignore-tests="vsynth1-mpeg2-422,vsynth2-mpeg2-422,vsynth3-mpeg2-422,vsynth_lena-mpeg2-422,seek-vsynth_lena-mpeg2-422"
|
|
make -j$(nproc)
|
|
make fate-rsync
|
|
make -j$(nproc) fate
|