mirror of
https://github.com/aphrody-labs/llvm-mingw.git
synced 2026-10-14 12:29:03 +00:00
688 lines
27 KiB
YAML
688 lines
27 KiB
YAML
name: Builds
|
|
on:
|
|
push:
|
|
branches:
|
|
- '**'
|
|
pull_request:
|
|
schedule:
|
|
- cron: '0 0 * * *'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
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.
|
|
prepare:
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
LLVM_VERSION: ${{steps.get-versions.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{steps.get-versions.outputs.MINGW_W64_VERSION}}
|
|
PYTHON_VERSION_MINGW: ${{steps.get-versions.outputs.PYTHON_VERSION_MINGW}}
|
|
TAG: ${{steps.get-tag.outputs.TAG}}
|
|
COMMIT_DATE_UNIX: ${{steps.get-tag.outputs.COMMIT_DATE_UNIX}}
|
|
BUILD_DATE: ${{steps.get-tag.outputs.BUILD_DATE}}
|
|
BUILD_DATE_UNIX: ${{steps.get-tag.outputs.BUILD_DATE_UNIX}}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
sparse-checkout: .
|
|
- name: Select build tag
|
|
id: get-tag
|
|
run: |
|
|
if ${{github.event_name == 'schedule'}}; then
|
|
TAG=nightly
|
|
else
|
|
TAG=$(TZ=UTC date +%Y%m%d)
|
|
fi
|
|
echo TAG=$TAG >> $GITHUB_OUTPUT
|
|
echo COMMIT_DATE_UNIX=$(git log -1 --pretty=%ct $GITHUB_SHA) >> $GITHUB_OUTPUT
|
|
BUILD_DATE=$(date -u '+%FT%TZ')
|
|
echo BUILD_DATE=${BUILD_DATE} >> $GITHUB_OUTPUT
|
|
echo BUILD_DATE_UNIX=$(date -d "${BUILD_DATE}" +%s) >> $GITHUB_OUTPUT
|
|
cat $GITHUB_OUTPUT
|
|
cat $GITHUB_OUTPUT >> parameters.txt
|
|
- name: Check latest version
|
|
if: github.event_name == 'schedule'
|
|
id: get-versions
|
|
run: |
|
|
echo LLVM_VERSION=$(git ls-remote https://github.com/llvm/llvm-project.git | grep 'refs/heads/main$' | awk '{print $1}') >> $GITHUB_OUTPUT
|
|
echo MINGW_W64_VERSION=$(git ls-remote https://github.com/mingw-w64/mingw-w64.git | grep 'refs/heads/master$' | awk '{print $1}') >> $GITHUB_OUTPUT
|
|
echo PYTHON_VERSION_MINGW=$(git ls-remote https://github.com/msys2-contrib/cpython-mingw.git | grep 'refs/heads/mingw-v3.14.5$' | awk '{print $1}') >> $GITHUB_OUTPUT
|
|
cat $GITHUB_OUTPUT
|
|
cat $GITHUB_OUTPUT >> parameters.txt
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: parameters
|
|
path: |
|
|
parameters.txt
|
|
retention-days: 7
|
|
|
|
# Build a cross compiler for Linux, targeting Windows.
|
|
linux:
|
|
needs: [prepare]
|
|
runs-on: ubuntu-22.04-arm
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Build
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{needs.prepare.outputs.MINGW_W64_VERSION}}
|
|
TAG: ${{needs.prepare.outputs.TAG}}
|
|
SOURCE_DATE_EPOCH: ${{needs.prepare.outputs.COMMIT_DATE_UNIX}}
|
|
BUILD_DATE: ${{needs.prepare.outputs.BUILD_DATE}}
|
|
run: |
|
|
# Skip dynamic library dependencies that might make it harder to
|
|
# run the binaries on other distros (and that have little use within
|
|
# llvm-mingw).
|
|
LLVM_CMAKEFLAGS="-DLLVM_ENABLE_LIBXML2=OFF -DLLDB_ENABLE_PYTHON=OFF" ./build-all.sh $(pwd)/install/llvm-mingw
|
|
.github/workflows/store-version.sh install/llvm-mingw/versions.txt
|
|
./test-libcxx-module.sh $(pwd)/install/llvm-mingw
|
|
./run-tests.sh $(pwd)/install/llvm-mingw
|
|
cd install
|
|
DISTRO=ubuntu-$(grep DISTRIB_RELEASE /etc/lsb-release | cut -f 2 -d =)-$(uname -m)
|
|
NAME=llvm-mingw-$TAG-ucrt-$DISTRO
|
|
mv llvm-mingw $NAME
|
|
tar -Jcf ../$NAME.tar.xz --format=ustar --numeric-owner --owner=0 --group=0 --sort=name --mtime="$BUILD_DATE" $NAME
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: linux-ucrt-aarch64-toolchain
|
|
path: |
|
|
llvm-mingw-*.tar.xz
|
|
retention-days: 7
|
|
|
|
# Crosscompile the toolchain for running on Linux on a different architecture, bundle the runtime
|
|
# libraries that were built in the 'linux' step above.
|
|
linux-cross-x86_64:
|
|
if: false
|
|
needs: [linux, prepare]
|
|
runs-on: ubuntu-22.04-arm
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Build
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{needs.prepare.outputs.MINGW_W64_VERSION}}
|
|
SOURCE_DATE_EPOCH: ${{needs.prepare.outputs.COMMIT_DATE_UNIX}}
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install g++-x86-64-linux-gnu
|
|
./build-all.sh $(pwd)/install/llvm-mingw --no-runtimes --host=x86_64-linux-gnu
|
|
.github/workflows/store-version.sh install/llvm-mingw/versions.txt
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: linux-ucrt-aarch64-toolchain
|
|
- name: Unpack native toolchain
|
|
run: |
|
|
tar -Jxf llvm-mingw-*.tar.xz
|
|
rm llvm-mingw-*.tar.xz
|
|
mv llvm-mingw* llvm-mingw-native
|
|
- name: Assemble the cross-built toolchain
|
|
run: |
|
|
./prepare-cross-toolchain-unix.sh $(pwd)/llvm-mingw-native $(pwd)/install/llvm-mingw
|
|
- name: Test using the cross-built assembled toolchain
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install qemu-user-static libc6-amd64-cross libstdc++6-amd64-cross
|
|
QEMU_LD_PREFIX=/usr/x86_64-linux-gnu ./test-libcxx-module.sh $(pwd)/install/llvm-mingw
|
|
QEMU_LD_PREFIX=/usr/x86_64-linux-gnu ./run-tests.sh $(pwd)/install/llvm-mingw
|
|
- name: Package the toolchain
|
|
env:
|
|
TAG: ${{needs.prepare.outputs.TAG}}
|
|
BUILD_DATE: ${{needs.prepare.outputs.BUILD_DATE}}
|
|
run: |
|
|
cd install
|
|
DISTRO=ubuntu-$(grep DISTRIB_RELEASE /etc/lsb-release | cut -f 2 -d =)-x86_64
|
|
NAME=llvm-mingw-$TAG-ucrt-$DISTRO
|
|
mv llvm-mingw $NAME
|
|
tar -Jcf ../$NAME.tar.xz --format=ustar --numeric-owner --owner=0 --group=0 --sort=name --mtime="$BUILD_DATE" $NAME
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: linux-ucrt-x86_64-toolchain
|
|
path: |
|
|
llvm-mingw-*.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: false
|
|
needs: [prepare]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Build
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{needs.prepare.outputs.MINGW_W64_VERSION}}
|
|
SOURCE_DATE_EPOCH: ${{needs.prepare.outputs.COMMIT_DATE_UNIX}}
|
|
BUILD_DATE: ${{needs.prepare.outputs.BUILD_DATE}}
|
|
run: |
|
|
# Skip dynamic library dependencies that might make it harder to
|
|
# run the binaries on other distros (and that have little use within
|
|
# llvm-mingw).
|
|
LLVM_CMAKEFLAGS="-DLLVM_ENABLE_LIBXML2=OFF" ./build-all.sh $(pwd)/install/llvm-mingw --disable-clang-tools-extra --disable-lldb --enable-asserts
|
|
.github/workflows/store-version.sh install/llvm-mingw/versions.txt
|
|
./run-tests.sh $(pwd)/install/llvm-mingw
|
|
cd install
|
|
tar -Jcf ../llvm-mingw-linux.tar.xz --format=ustar --numeric-owner --owner=0 --group=0 --sort=name --mtime="$BUILD_DATE" llvm-mingw
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: linux-asserts-x86_64-toolchain
|
|
path: |
|
|
llvm-mingw-linux.tar.xz
|
|
retention-days: 7
|
|
|
|
# Build a cross compiler for macOS, targeting Windows.
|
|
macos:
|
|
if: false
|
|
needs: [prepare]
|
|
runs-on: macos-14
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Build
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{needs.prepare.outputs.MINGW_W64_VERSION}}
|
|
TAG: ${{needs.prepare.outputs.TAG}}
|
|
SOURCE_DATE_EPOCH: ${{needs.prepare.outputs.COMMIT_DATE_UNIX}}
|
|
BUILD_DATE: ${{needs.prepare.outputs.BUILD_DATE}}
|
|
run: |
|
|
# Disable zstd and python. Both are available on the runners, but
|
|
# installed with homebrew, and only available in the native (arm64)
|
|
# form. Therefore, autodetection will pick them up, but linking
|
|
# universal binaries fails as those libraries are unavailable in the
|
|
# other (x86_64) architecture form.
|
|
MACOS_REDIST=1 LLVM_CMAKEFLAGS="-DLLVM_ENABLE_ZSTD=OFF -DLLDB_ENABLE_PYTHON=OFF" ./build-all.sh $(pwd)/install/llvm-mingw
|
|
.github/workflows/store-version.sh install/llvm-mingw/versions.txt
|
|
./test-libcxx-module.sh $(pwd)/install/llvm-mingw
|
|
./run-tests.sh $(pwd)/install/llvm-mingw
|
|
cd install
|
|
NAME=llvm-mingw-$TAG-ucrt-macos-universal
|
|
mv llvm-mingw $NAME
|
|
gtar -Jcf ../$NAME.tar.xz --format=ustar --numeric-owner --owner=0 --group=0 --sort=name --mtime="$BUILD_DATE" $NAME
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: macos-ucrt-toolchain
|
|
path: |
|
|
llvm-mingw-*.tar.xz
|
|
retention-days: 7
|
|
|
|
# Test building the toolchain on msys2. The binaries built here rely on the
|
|
# runtime libraries from the host environment (libstdc++ or libc++).
|
|
msys2:
|
|
if: false
|
|
needs: [prepare]
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
sys:
|
|
- clang64
|
|
steps:
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: ${{matrix.sys}}
|
|
install: >-
|
|
git
|
|
make
|
|
diffutils
|
|
tar
|
|
pacboy: >-
|
|
toolchain:p
|
|
cmake:p
|
|
ninja:p
|
|
- uses: actions/checkout@v6
|
|
- name: Build
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{needs.prepare.outputs.MINGW_W64_VERSION}}
|
|
TAG: ${{needs.prepare.outputs.TAG}}
|
|
SOURCE_DATE_EPOCH: ${{needs.prepare.outputs.COMMIT_DATE_UNIX}}
|
|
BUILD_DATE: ${{needs.prepare.outputs.BUILD_DATE}}
|
|
run: |
|
|
if [ "${{matrix.sys}}" = "mingw64" ]; then
|
|
ARGS="--disable-dylib"
|
|
fi
|
|
./build-all.sh $(pwd)/install/llvm-mingw --disable-clang-tools-extra --disable-lldb $ARGS
|
|
.github/workflows/store-version.sh install/llvm-mingw/versions.txt
|
|
./copy-msys-dependencies.sh $(pwd)/install/llvm-mingw ${{matrix.sys}}
|
|
./test-libcxx-module.sh $(pwd)/install/llvm-mingw
|
|
./run-tests.sh $(pwd)/install/llvm-mingw
|
|
cd install
|
|
NAME=llvm-mingw-$TAG-ucrt-msys2-${{matrix.sys}}
|
|
mv llvm-mingw $NAME
|
|
tar -Jcf ../$NAME.tar.xz --format=ustar --numeric-owner --owner=0 --group=0 --sort=name --mtime="$BUILD_DATE" $NAME
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: msys2-${{matrix.sys}}-toolchain
|
|
path: |
|
|
llvm-mingw-*.tar.xz
|
|
retention-days: 7
|
|
|
|
# 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-windows:
|
|
needs: [linux, prepare]
|
|
runs-on: ubuntu-24.04-arm
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- { arch: i686, crt: ucrt }
|
|
- { arch: x86_64, crt: ucrt }
|
|
- { arch: armv7, crt: ucrt }
|
|
- { arch: aarch64, crt: ucrt }
|
|
steps:
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: linux-${{matrix.crt}}-aarch64-toolchain
|
|
- name: Unpack cross toolchain
|
|
run: |
|
|
tar -Jxf llvm-mingw-*.tar.xz
|
|
rm llvm-mingw-*.tar.xz
|
|
sudo mv llvm-mingw* /opt/llvm-mingw
|
|
echo /opt/llvm-mingw/bin >> $GITHUB_PATH
|
|
- uses: actions/checkout@v6
|
|
- name: Cache downloads
|
|
id: cache-tarballs
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: /opt/cache
|
|
key: tarballs-${{ hashFiles('build-make.sh') }}
|
|
- name: Restore cache
|
|
if: steps.cache-tarballs.outputs.cache-hit != ''
|
|
run: |
|
|
ln -s /opt/cache/*.tar.* .
|
|
- name: Build
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{needs.prepare.outputs.MINGW_W64_VERSION}}
|
|
PYTHON_VERSION_MINGW: ${{needs.prepare.outputs.PYTHON_VERSION_MINGW}}
|
|
TAG: ${{needs.prepare.outputs.TAG}}
|
|
SOURCE_DATE_EPOCH: ${{needs.prepare.outputs.COMMIT_DATE_UNIX}}
|
|
BUILD_DATE: ${{needs.prepare.outputs.BUILD_DATE}}
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install libltdl-dev swig autoconf-archive
|
|
./build-cross-tools.sh /opt/llvm-mingw $(pwd)/install/llvm-mingw ${{matrix.arch}} --with-python --with-busybox
|
|
.github/workflows/store-version.sh install/llvm-mingw/versions.txt
|
|
cd install
|
|
NAME=llvm-mingw-$TAG-${{matrix.crt}}-${{matrix.arch}}
|
|
mv llvm-mingw $NAME
|
|
zip -9rq ../$NAME.zip $NAME
|
|
- name: Save cache
|
|
if: steps.cache-tarballs.outputs.cache-hit != 'true'
|
|
run: |
|
|
mkdir -p /opt/cache
|
|
for i in make-*.tar.*; do
|
|
if [ ! -L $i ]; then cp -a $i /opt/cache; fi
|
|
done
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: windows-${{matrix.crt}}-${{matrix.arch}}-toolchain
|
|
path: |
|
|
llvm-mingw-*.zip
|
|
retention-days: 7
|
|
|
|
# Run llvm-mingw's tests with the cross-built toolchains from above.
|
|
test-toolchain:
|
|
needs: [linux-cross-windows]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch:
|
|
- x86_64
|
|
- i686
|
|
- aarch64
|
|
runs-on: ${{startsWith(matrix.arch, 'a') && 'windows-11-arm' || 'windows-latest'}}
|
|
steps:
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: windows-ucrt-${{matrix.arch}}-toolchain
|
|
- name: Unpack toolchain
|
|
run: |
|
|
Expand-Archive llvm-mingw-*.zip -DestinationPath .
|
|
del llvm-mingw-*.zip
|
|
mv llvm-mingw-* c:\llvm-mingw
|
|
echo "c:\llvm-mingw\busybox\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "c:\llvm-mingw\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
- uses: actions/checkout@v6
|
|
- name: Run tests
|
|
shell: sh
|
|
run: |
|
|
./test-libcxx-module.sh c:/llvm-mingw
|
|
./run-tests.sh c:/llvm-mingw
|
|
./run-lldb-tests.sh c:/llvm-mingw
|
|
|
|
# Run libcxx's tests with the cross-built toolchains from above.
|
|
# (This builds its own copy of libcxx, but it should be pretty much
|
|
# identical to the one shipped - and tests that the toolchain works
|
|
# for running the libcxx tests.)
|
|
# This also forces testing the bundled python executables.
|
|
test-libcxx:
|
|
# This test is kinda slow, and kinda redundant (libcxx does contain
|
|
# llvm-mingw configurations in its own CI, so the only difference with
|
|
# testing here is different runners with different OS setups, and
|
|
# testing with the latest compiler instead of an older release).
|
|
# Therefore, keep the test disabled by default; it's easy to enable
|
|
# temporarily on a branch for testing.
|
|
if: (github.event_name != 'schedule') || (github.repository == 'mstorsjo/llvm-mingw')
|
|
needs: [linux-cross-windows, prepare]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- { arch: x86_64, target_arch: i686 }
|
|
- { arch: x86_64, target_arch: x86_64 }
|
|
- { arch: aarch64, target_arch: aarch64 }
|
|
runs-on: ${{startsWith(matrix.arch, 'a') && 'windows-11-arm' || 'windows-latest'}}
|
|
steps:
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: windows-ucrt-${{matrix.arch}}-toolchain
|
|
- name: Unpack toolchain
|
|
run: |
|
|
Expand-Archive llvm-mingw-*.zip -DestinationPath .
|
|
del llvm-mingw-*.zip
|
|
mv llvm-mingw-* c:\llvm-mingw
|
|
echo "c:\llvm-mingw\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "c:\llvm-mingw\python\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "PYTHON_EXE=c:/llvm-mingw/python/bin/python3.exe" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
|
- uses: actions/checkout@v6
|
|
- name: Checkout llvm-project
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
run: |
|
|
bash -c "CHECKOUT_ONLY=1 ./build-llvm.sh"
|
|
- name: Build and test libcxx
|
|
run: |
|
|
cd llvm-project
|
|
mkdir build
|
|
cd build
|
|
cmake ../runtimes `
|
|
-G Ninja `
|
|
-DCMAKE_BUILD_TYPE=Release `
|
|
-DPython3_EXECUTABLE="$Env:PYTHON_EXE" `
|
|
-DLIBCXX_ENABLE_WERROR=YES `
|
|
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" `
|
|
-DLIBCXX_CXX_ABI=libcxxabi `
|
|
-DCMAKE_C_COMPILER=${{matrix.target_arch}}-w64-mingw32-clang `
|
|
-DCMAKE_CXX_COMPILER=${{matrix.target_arch}}-w64-mingw32-clang++ `
|
|
-DCMAKE_CXX_COMPILER_TARGET=${{matrix.target_arch}}-w64-windows-gnu `
|
|
-DLIBCXXABI_ENABLE_SHARED=NO `
|
|
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES `
|
|
-DLIBCXX_USE_COMPILER_RT=YES `
|
|
-DLIBCXXABI_USE_COMPILER_RT=YES `
|
|
-DLIBUNWIND_USE_COMPILER_RT=YES `
|
|
-DLIBCXXABI_USE_LLVM_UNWINDER=YES `
|
|
-DLIBCXX_EXTRA_SITE_DEFINES="__USE_MINGW_ANSI_STDIO=${{startsWith(matrix.arch, 'a') && '0' || '1'}}" `
|
|
-DCMAKE_INSTALL_MESSAGE=NEVER `
|
|
-DLLVM_LIT_ARGS="-v --time-tests"
|
|
ninja
|
|
ninja check-runtimes
|
|
|
|
# Run the OpenMP tests with the cross-built toolchains from above.
|
|
# This also forces testing the bundled python executables.
|
|
test-openmp:
|
|
needs: [linux-cross-windows, prepare]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- { arch: i686, asmflag: }
|
|
- { arch: x86_64, asmflag: -m64 }
|
|
- { arch: aarch64 }
|
|
runs-on: ${{startsWith(matrix.arch, 'a') && 'windows-11-arm' || 'windows-latest'}}
|
|
steps:
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: windows-ucrt-${{matrix.arch}}-toolchain
|
|
- name: Unpack toolchain
|
|
run: |
|
|
Expand-Archive llvm-mingw-*.zip -DestinationPath .
|
|
del llvm-mingw-*.zip
|
|
mv llvm-mingw-* c:\llvm-mingw
|
|
echo "c:\llvm-mingw\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "c:\llvm-mingw\python\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "PYTHON_EXE=c:/llvm-mingw/python/bin/python3.exe" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
|
- uses: actions/checkout@v6
|
|
- name: Checkout llvm-project
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
run: |
|
|
bash -c "CHECKOUT_ONLY=1 ./build-llvm.sh"
|
|
- name: Build test executables
|
|
run: |
|
|
cd llvm-project
|
|
mkdir build-tools
|
|
cd build-tools
|
|
cmake ../llvm `
|
|
-G Ninja `
|
|
-DCMAKE_BUILD_TYPE=Release `
|
|
-DLLVM_TARGETS_TO_BUILD=X86 `
|
|
-DCMAKE_C_COMPILER=clang `
|
|
-DCMAKE_CXX_COMPILER=clang++
|
|
ninja not FileCheck
|
|
echo "TOOLS=$PWD" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
|
- name: Build and test OpenMP
|
|
run: |
|
|
cd llvm-project
|
|
mkdir build-openmp
|
|
cd build-openmp
|
|
cmake ../runtimes `
|
|
-G Ninja `
|
|
-DCMAKE_BUILD_TYPE=Release `
|
|
-DPython3_EXECUTABLE="$Env:PYTHON_EXE" `
|
|
-DLLVM_BINARY_DIR="$Env:TOOLS" `
|
|
-DCMAKE_C_COMPILER=clang `
|
|
-DCMAKE_CXX_COMPILER=clang++ `
|
|
-DCMAKE_ASM_MASM_COMPILER=llvm-ml `
|
|
-DLLVM_ENABLE_RUNTIMES="openmp" `
|
|
-DLIBOMP_ASMFLAGS=${{matrix.asmflag}} `
|
|
-DLLVM_LIT_ARGS="-v --time-tests"
|
|
ninja
|
|
ninja check-openmp
|
|
|
|
# Run the compiler-rt tests with the cross-built toolchains from above. This
|
|
# also forces testing the bundled python executables.
|
|
test-compiler-rt:
|
|
needs: [linux-cross-windows, prepare]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch:
|
|
- x86_64
|
|
- i686
|
|
- aarch64
|
|
runs-on: ${{startsWith(matrix.arch, 'a') && 'windows-11-arm' || 'windows-latest'}}
|
|
steps:
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: windows-ucrt-${{matrix.arch}}-toolchain
|
|
- name: Unpack toolchain
|
|
run: |
|
|
Expand-Archive llvm-mingw-*.zip -DestinationPath .
|
|
del llvm-mingw-*.zip
|
|
mv llvm-mingw-* c:\llvm-mingw
|
|
echo "c:\llvm-mingw\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "c:\llvm-mingw\python\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "PYTHON_EXE=c:/llvm-mingw/python/bin/python3.exe" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
|
- uses: actions/checkout@v6
|
|
- name: Checkout llvm-project
|
|
env:
|
|
LLVM_VERSION: ${{needs.prepare.outputs.LLVM_VERSION}}
|
|
run: |
|
|
git config --global core.autocrlf false
|
|
bash -c "CHECKOUT_ONLY=1 ./build-llvm.sh"
|
|
- name: Build test executables
|
|
run: |
|
|
cd llvm-project
|
|
mkdir build-tools
|
|
cd build-tools
|
|
cmake ../llvm `
|
|
-G Ninja `
|
|
-DCMAKE_BUILD_TYPE=Release `
|
|
-DLLVM_TARGETS_TO_BUILD=X86 `
|
|
-DCMAKE_C_COMPILER=clang `
|
|
-DCMAKE_CXX_COMPILER=clang++
|
|
ninja not FileCheck llvm-config KillTheDoctor count split-file
|
|
echo "LLVM_CONFIG=$PWD\bin\llvm-config.exe" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
|
echo "CMAKE_DIR=$PWD\lib\cmake\llvm" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
|
- name: Build and test compiler-rt
|
|
# Skipping libfuzzer; all tests fail since the clang mingw driver
|
|
# doesn't support -fsanitize=fuzzer.
|
|
# Skipping ORC; the tests rely on llvm-jitlink being available,
|
|
# which requires building a large part of LLVM among the test
|
|
# tools above, and jitlink requires an MSVC toolchain to be available.
|
|
run: |
|
|
cd llvm-project
|
|
mkdir build-compiler-rt
|
|
cd build-compiler-rt
|
|
cmake ../compiler-rt `
|
|
-G Ninja `
|
|
-DCMAKE_BUILD_TYPE=Release `
|
|
-DPython3_EXECUTABLE="$Env:PYTHON_EXE" `
|
|
-DCMAKE_C_COMPILER=clang `
|
|
-DCMAKE_CXX_COMPILER=clang++ `
|
|
-DCMAKE_C_COMPILER_TARGET=${{matrix.arch}}-w64-windows-gnu `
|
|
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=TRUE `
|
|
-DCOMPILER_RT_USE_BUILTINS_LIBRARY=TRUE `
|
|
-DLLVM_CONFIG_PATH="$Env:LLVM_CONFIG" `
|
|
-DLLVM_CMAKE_DIR="$Env:CMAKE_DIR" `
|
|
-DSANITIZER_CXX_ABI=libc++ `
|
|
-DCOMPILER_RT_INCLUDE_TESTS=ON `
|
|
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF `
|
|
-DCOMPILER_RT_BUILD_ORC=OFF `
|
|
-DLLVM_LIT_ARGS="-v --time-tests"
|
|
ninja
|
|
ninja check-compiler-rt
|
|
|
|
# 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: false
|
|
needs: [linux-asserts]
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch:
|
|
- i686
|
|
- x86_64
|
|
- armv7
|
|
- aarch64
|
|
steps:
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: linux-asserts-x86_64-toolchain
|
|
- name: Unpack cross toolchain
|
|
run: |
|
|
tar -Jxf llvm-mingw-*.tar.xz
|
|
rm llvm-mingw-*.tar.xz
|
|
sudo mv llvm-mingw* /opt/llvm-mingw
|
|
echo /opt/llvm-mingw/bin >> $GITHUB_PATH
|
|
- name: Checkout ffmpeg
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: ffmpeg/ffmpeg
|
|
ref: n6.1.2
|
|
path: ffmpeg
|
|
- name: Build ffmpeg
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install nasm
|
|
mkdir ffmpeg-build
|
|
cd ffmpeg-build
|
|
# Set a limit of 3 minutes per process/object file; with unproven
|
|
# versions from latest git, the compiler may occasionally hang.
|
|
# Make sure we exit in a reasonable time instead of waiting for
|
|
# the whole github actions timeout of 6h before exiting.
|
|
ulimit -t 180
|
|
../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: false
|
|
needs: [linux-cross-windows]
|
|
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
|
|
install: >-
|
|
unzip
|
|
make
|
|
rsync
|
|
diffutils
|
|
pacboy: >-
|
|
nasm:p
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
name: windows-ucrt-x86_64-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
|
|
- name: Checkout ffmpeg
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: ffmpeg/ffmpeg
|
|
ref: n6.1.2
|
|
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
|
|
make -j$(nproc)
|
|
make fate-rsync
|
|
make -j$(nproc) fate
|
|
|
|
upload-nightly:
|
|
if: false
|
|
permissions:
|
|
contents: write
|
|
needs: [linux, linux-cross-x86_64, macos, linux-cross-windows, test-toolchain, linux-test-cross-build-ffmpeg, test-ffmpeg]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v8
|
|
- name: Rearrange files
|
|
run: |
|
|
rm -rf linux-asserts*
|
|
rm -rf msys2*
|
|
mv *-toolchain/*.zip *-toolchain/*.tar.xz .
|
|
- name: Upload binaries
|
|
env:
|
|
GITHUB_TOKEN: ${{github.token}}
|
|
run: |
|
|
gh release upload nightly *.tar.xz *.zip --clobber -R ${{github.repository}}
|