support installing multiple versions
This commit is contained in:
parent
3d49180b0b
commit
77e3dc62d5
3 changed files with 146 additions and 9 deletions
10
.github/actions/check-cc/action.yml
vendored
10
.github/actions/check-cc/action.yml
vendored
|
@ -1,9 +1,15 @@
|
||||||
name: Check cc/c++
|
name: Check cc/c++
|
||||||
description: Check cc/c++
|
description: Check cc/c++
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: Specific version to check
|
||||||
|
required: false
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- run: |
|
||||||
|
$version = '${{ inputs.version }}'
|
||||||
|
|
||||||
function Check-Exe {
|
function Check-Exe {
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory=$true)]
|
[Parameter(Mandatory=$true)]
|
||||||
|
@ -15,6 +21,10 @@ runs:
|
||||||
echo $output
|
echo $output
|
||||||
|
|
||||||
$($output | Select-String -Pattern "clang version" -SimpleMatch -Quiet) -or $(throw "Unexpected `$Exe --version` output")
|
$($output | Select-String -Pattern "clang version" -SimpleMatch -Quiet) -or $(throw "Unexpected `$Exe --version` output")
|
||||||
|
|
||||||
|
if ($script:version) {
|
||||||
|
$($output | Select-String -Pattern "$script:version." -SimpleMatch -Quiet) -or $(throw "Unexpected `$Exe --version` output")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Check-Exe cc
|
Check-Exe cc
|
||||||
|
|
30
.github/workflows/test.yml
vendored
30
.github/workflows/test.yml
vendored
|
@ -34,6 +34,36 @@ jobs:
|
||||||
- name: Check cc/c++
|
- name: Check cc/c++
|
||||||
uses: ./.github/actions/check-cc
|
uses: ./.github/actions/check-cc
|
||||||
|
|
||||||
|
versions:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-18.04, ubuntu-20.04]
|
||||||
|
version: ['5.0', '6.0', 7, 8, 9, 10, 11, 12]
|
||||||
|
exclude:
|
||||||
|
- {os: ubuntu-20.04, version: '5.0'}
|
||||||
|
- {os: ubuntu-20.04, version: '6.0'}
|
||||||
|
- {os: ubuntu-20.04, version: 7}
|
||||||
|
- {os: ubuntu-20.04, version: 8}
|
||||||
|
runs-on: '${{ matrix.os }}'
|
||||||
|
name: 'Version: ${{ matrix.os }} / ${{ matrix.version }}'
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up Clang
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
version: '${{ matrix.version }}'
|
||||||
|
platform: '${{ matrix.platform }}'
|
||||||
|
cc: 1
|
||||||
|
- name: Build foo.exe
|
||||||
|
uses: ./.github/actions/build-foo
|
||||||
|
- name: Run foo.exe
|
||||||
|
uses: ./.github/actions/run-foo
|
||||||
|
- name: Check cc/c++
|
||||||
|
uses: ./.github/actions/check-cc
|
||||||
|
with:
|
||||||
|
version: '${{ matrix.version }}'
|
||||||
|
|
||||||
cygwin:
|
cygwin:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
|
115
action.yml
115
action.yml
|
@ -2,6 +2,10 @@ name: Install Clang
|
||||||
description: Install Clang & LLVM
|
description: Install Clang & LLVM
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
|
version:
|
||||||
|
description: Version to install
|
||||||
|
required: false
|
||||||
|
default: latest
|
||||||
platform:
|
platform:
|
||||||
description: Target platform
|
description: Target platform
|
||||||
required: false
|
required: false
|
||||||
|
@ -19,16 +23,27 @@ inputs:
|
||||||
required: false
|
required: false
|
||||||
default: 0
|
default: 0
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
clang:
|
||||||
|
description: clang binary name
|
||||||
|
value: '${{ steps.install.outputs.clang }}'
|
||||||
|
clangxx:
|
||||||
|
description: clang++ binary name
|
||||||
|
value: '${{ steps.install.outputs.clangxx }}'
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- id: install
|
||||||
|
run: |
|
||||||
New-Variable os -Value '${{ runner.os }}' -Option Constant
|
New-Variable os -Value '${{ runner.os }}' -Option Constant
|
||||||
|
|
||||||
New-Variable linux_host -Value ($os -eq 'Linux') -Option Constant
|
New-Variable linux_host -Value ($os -eq 'Linux') -Option Constant
|
||||||
New-Variable cygwin_host -Value ('${{ inputs.cygwin }}' -eq '1') -Option Constant
|
New-Variable cygwin_host -Value ('${{ inputs.cygwin }}' -eq '1') -Option Constant
|
||||||
New-Variable windows_host -Value ($os -eq 'Windows' -and !$cygwin_host) -Option Constant
|
New-Variable windows_host -Value ($os -eq 'Windows' -and !$cygwin_host) -Option Constant
|
||||||
|
|
||||||
|
New-Variable version -Value ('${{ inputs.version }}') -Option Constant
|
||||||
|
New-Variable latest -Value ($version -eq 'latest') -Option Constant
|
||||||
New-Variable x64 -Value ('${{ inputs.platform }}' -eq 'x64') -Option Constant
|
New-Variable x64 -Value ('${{ inputs.platform }}' -eq 'x64') -Option Constant
|
||||||
|
|
||||||
function Locate-Choco {
|
function Locate-Choco {
|
||||||
|
@ -60,13 +75,92 @@ runs:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($linux_host) {
|
function Get-DistroVersion {
|
||||||
if ($x64) {
|
if (!(Get-Command lsb_release -ErrorAction SilentlyContinue)) {
|
||||||
$pkgs = 'clang','g++','llvm'
|
throw "Couldn't find lsb_release; LLVM only provides repositories for Debian/Ubuntu"
|
||||||
} else {
|
|
||||||
$pkgs = 'clang','g++-multilib','llvm'
|
|
||||||
}
|
}
|
||||||
Install-Package $pkgs
|
$distro = lsb_release -is
|
||||||
|
$version = lsb_release -sr
|
||||||
|
"$distro-$version"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Format-UpstreamVersion {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string] $Version
|
||||||
|
)
|
||||||
|
|
||||||
|
switch -Exact ($Version) {
|
||||||
|
# Since version 7, they dropped the .0 suffix. The earliest
|
||||||
|
# version supported is 5.0 on Bionic; versions 5 and 6 are
|
||||||
|
# mapped to LLVM-friendly 5.0 and 6.0.
|
||||||
|
'5' { '5.0' }
|
||||||
|
'6' { '6.0' }
|
||||||
|
default { $Version }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Format-AptLine {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string] $Version
|
||||||
|
)
|
||||||
|
|
||||||
|
$distro = Get-DistroVersion
|
||||||
|
|
||||||
|
switch -Wildcard -CaseSensitive ($distro) {
|
||||||
|
'Debian-9*' { "deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch-$Version main" }
|
||||||
|
'Debian-10*' { "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-$Version main" }
|
||||||
|
'Debian-11*' { "deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-$Version main" }
|
||||||
|
'Debian-unstable' { "deb http://apt.llvm.org/unstable/ llvm-toolchain-$Version main" }
|
||||||
|
'Debian-testing' { "deb http://apt.llvm.org/unstable/ llvm-toolchain-$Version main" }
|
||||||
|
'Ubuntu-16.04' { "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-$Version main" }
|
||||||
|
'Ubuntu-18.04' { "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-$Version main" }
|
||||||
|
'Ubuntu-18.10' { "deb http://apt.llvm.org/cosmic/ llvm-toolchain-cosmic-$Version main" }
|
||||||
|
'Ubuntu-19.04' { "deb http://apt.llvm.org/disco/ llvm-toolchain-disco-$Version main" }
|
||||||
|
'Ubuntu-19.10' { "deb http://apt.llvm.org/eoan/ llvm-toolchain-eoan-$Version main" }
|
||||||
|
'Ubuntu-20.04' { "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-$Version main" }
|
||||||
|
'Ubuntu-20.10' { "deb http://apt.llvm.org/groovy/ llvm-toolchain-groovy-$Version main" }
|
||||||
|
'Ubuntu-21.04' { "deb http://apt.llvm.org/hirsute/ llvm-toolchain-hirsute-$Version main" }
|
||||||
|
|
||||||
|
default { throw "Unsupported distribution: $distro" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Add-UpstreamRepo {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string] $Version
|
||||||
|
)
|
||||||
|
|
||||||
|
wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
||||||
|
$apt_line = Format-AptLine $Version
|
||||||
|
sudo add-apt-repository --yes --update $apt_line
|
||||||
|
}
|
||||||
|
|
||||||
|
$clang = 'clang'
|
||||||
|
$clangxx = 'clang++'
|
||||||
|
|
||||||
|
if ($linux_host) {
|
||||||
|
$pkg_clang = 'clang'
|
||||||
|
$pkg_llvm = 'llvm'
|
||||||
|
$pkg_gxx = 'g++'
|
||||||
|
|
||||||
|
if (!$latest) {
|
||||||
|
$pkg_version = Format-UpstreamVersion $version
|
||||||
|
Add-UpstreamRepo $pkg_version
|
||||||
|
|
||||||
|
$pkg_clang = "$pkg_clang-$pkg_version"
|
||||||
|
$pkg_llvm = "$pkg_llvm-$pkg_version"
|
||||||
|
|
||||||
|
$clang = "$clang-$pkg_version"
|
||||||
|
$clangxx = "$clangxx-$pkg_version"
|
||||||
|
}
|
||||||
|
if (!$x64) {
|
||||||
|
$pkg_gxx = 'g++-multilib'
|
||||||
|
}
|
||||||
|
|
||||||
|
Install-Package $pkg_clang $pkg_llvm $pkg_gxx
|
||||||
} elseif ($cygwin_host) {
|
} elseif ($cygwin_host) {
|
||||||
if (!$x64) {
|
if (!$x64) {
|
||||||
echo @'
|
echo @'
|
||||||
|
@ -90,6 +184,9 @@ runs:
|
||||||
} else {
|
} else {
|
||||||
throw "Sorry, installing Clang is unsupported on $os"
|
throw "Sorry, installing Clang is unsupported on $os"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "::set-output name=clang::$clang"
|
||||||
|
echo "::set-output name=clangxx::$clangxx"
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
- run: |
|
- run: |
|
||||||
|
@ -124,8 +221,8 @@ runs:
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cc) {
|
if ($cc) {
|
||||||
Link-Exe clang cc
|
Link-Exe '${{ steps.install.outputs.clang }}' cc
|
||||||
Link-Exe clang++ c++
|
Link-Exe '${{ steps.install.outputs.clangxx }}' c++
|
||||||
}
|
}
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue