This matches what is done for the regular builds; we run (build-only) tests already with the first cross compiler toolchains, not needing to wait for the cross compiled toolchains to run on Windows.
197 lines
6.5 KiB
YAML
197 lines
6.5 KiB
YAML
name: Build msvcrt toolchains
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: 'Ref to extract from'
|
|
type: string
|
|
default: 'master'
|
|
upload:
|
|
description: 'Upload the artifacts'
|
|
type: boolean
|
|
default: false
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
prepare:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
LLVM_VERSION: ${{steps.get-parameters.outputs.LLVM_VERSION}}
|
|
MINGW_W64_VERSION: ${{steps.get-parameters.outputs.MINGW_W64_VERSION}}
|
|
PYTHON_VERSION_MINGW: ${{steps.get-parameters.outputs.PYTHON_VERSION_MINGW}}
|
|
TAG: ${{steps.get-parameters.outputs.TAG}}
|
|
COMMIT_DATE_UNIX: ${{steps.get-parameters.outputs.COMMIT_DATE_UNIX}}
|
|
BUILD_DATE: ${{steps.get-parameters.outputs.BUILD_DATE}}
|
|
BUILD_DATE_UNIX: ${{steps.get-parameters.outputs.BUILD_DATE_UNIX}}
|
|
steps:
|
|
- name: Download build parameters
|
|
uses: dawidd6/action-download-artifact@v10
|
|
with:
|
|
workflow: build.yml
|
|
workflow_conclusion: success
|
|
ref: ${{inputs.ref}}
|
|
event: push
|
|
name: parameters
|
|
- name: Get build parameters
|
|
id: get-parameters
|
|
run: |
|
|
cat parameters.txt >> $GITHUB_OUTPUT
|
|
cat $GITHUB_OUTPUT
|
|
|
|
# Build a new toolchain with a different CRT choice.
|
|
linux-msvcrt:
|
|
needs: [prepare]
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{inputs.ref}}
|
|
- name: Download toolchain
|
|
uses: dawidd6/action-download-artifact@v10
|
|
with:
|
|
workflow: build.yml
|
|
workflow_conclusion: success
|
|
ref: ${{inputs.ref}}
|
|
event: push
|
|
name: linux-ucrt-x86_64-toolchain
|
|
- name: Unpack original toolchain
|
|
run: |
|
|
tar -Jxf llvm-mingw-*.tar.xz
|
|
rm llvm-mingw-*.tar.xz
|
|
mkdir install
|
|
mv llvm-mingw* install/llvm-mingw
|
|
- 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: |
|
|
./build-all.sh $(pwd)/install/llvm-mingw --no-tools --wipe-runtimes --with-default-msvcrt=msvcrt
|
|
.github/workflows/store-version.sh install/llvm-mingw/versions.txt
|
|
cd install
|
|
DISTRO=ubuntu-$(grep DISTRIB_RELEASE /etc/lsb-release | cut -f 2 -d =)-$(uname -m)
|
|
NAME=llvm-mingw-$TAG-msvcrt-$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@v4
|
|
with:
|
|
name: linux-msvcrt-x86_64-toolchain
|
|
path: |
|
|
llvm-mingw-*.tar.xz
|
|
retention-days: 7
|
|
|
|
linux-cross-windows:
|
|
needs: [linux-msvcrt, prepare]
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- { arch: i686, crt: msvcrt }
|
|
- { arch: x86_64, crt: msvcrt }
|
|
steps:
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: linux-${{matrix.crt}}-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
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{inputs.ref}}
|
|
- name: Download profile
|
|
uses: dawidd6/action-download-artifact@v10
|
|
with:
|
|
workflow: build.yml
|
|
workflow_conclusion: success
|
|
ref: ${{inputs.ref}}
|
|
event: push
|
|
name: profile
|
|
- 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}}
|
|
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 --thinlto --pgo
|
|
.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-${{matrix.crt}}-${{matrix.arch}}
|
|
mv llvm-mingw $NAME
|
|
zip -9rq ../$NAME.zip $NAME
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-${{matrix.crt}}-${{matrix.arch}}-toolchain
|
|
path: |
|
|
llvm-mingw-*.zip
|
|
retention-days: 7
|
|
|
|
# Run llvm-mingw's tests on x86_64 and i686 with the cross-built corresponding
|
|
# toolchains from above.
|
|
test-toolchain:
|
|
needs: [linux-cross-windows]
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- { arch: i686, crt: msvcrt }
|
|
- { arch: x86_64, crt: msvcrt }
|
|
steps:
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: mingw64
|
|
install: >-
|
|
unzip
|
|
make
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: windows-${{matrix.crt}}-${{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@v4
|
|
with:
|
|
ref: ${{inputs.ref}}
|
|
- name: Run tests
|
|
run: |
|
|
./run-tests.sh /llvm-mingw
|
|
./run-lldb-tests.sh /llvm-mingw
|
|
|
|
upload:
|
|
if: ${{inputs.upload}}
|
|
permissions:
|
|
contents: write
|
|
needs: [linux-msvcrt, linux-cross-windows, test-toolchain, prepare]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
- name: Rearrange files
|
|
run: |
|
|
rm -rf linux-asserts*
|
|
mv *-toolchain/*.zip *-toolchain/*.tar.xz .
|
|
- name: Upload binaries
|
|
env:
|
|
GITHUB_TOKEN: ${{github.token}}
|
|
TAG: ${{needs.prepare.outputs.TAG}}
|
|
run: |
|
|
gh release upload $TAG *.tar.xz *.zip --clobber -R ${{github.repository}}
|