As the branch field has a default value "master", this default not only applies when the dialog box for starting the manual workflow is presented. But even if the prefilled branch field is cleared, the default value also gets substituted when submitting. In this case, when the commit and branch fields are mutually exclusive, we can't easily have a default. Instead change the uses of the fields, ignoring the branch field if the commit field is filled. If the dawidd6/action-download-artifact action would support specifying either a commit or a branch in the same field, like actions/checkout does, we wouldn't need this distinction at all; this request is tracked upstream at https://github.com/dawidd6/action-download-artifact/issues/242.
192 lines
6.5 KiB
YAML
192 lines
6.5 KiB
YAML
name: Build msvcrt toolchains
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
commit:
|
|
description: 'Commit to extract from'
|
|
type: string
|
|
branch:
|
|
description: 'Branch 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@v6
|
|
with:
|
|
workflow: build.yml
|
|
workflow_conclusion: success
|
|
commit: ${{inputs.commit}}
|
|
branch: ${{inputs.commit == '' && inputs.branch || ''}}
|
|
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.commit != '' && inputs.commit) || inputs.branch }}
|
|
- name: Download toolchain
|
|
uses: dawidd6/action-download-artifact@v6
|
|
with:
|
|
workflow: build.yml
|
|
workflow_conclusion: success
|
|
commit: ${{inputs.commit}}
|
|
branch: ${{inputs.commit == '' && inputs.branch || ''}}
|
|
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.commit != '' && inputs.commit) || inputs.branch }}
|
|
- 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
|
|
.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
|
|
- 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.commit != '' && inputs.commit) || inputs.branch }}
|
|
- 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}}
|