Build LLVM for Windows (#248)

This PR changes the CI build scripts to also build LLVM for windows.
**It doesn't build `revive` itself for windows**. This will come in a
follow up. But once we have a LLVM binary release the turn around time
will be much quicker for experimenting with the revive windows build.

I manually uploaded the release those changes produce
[here](https://github.com/paritytech/revive-alex-workflowtest/releases/tag/llvm-18.1.8-revive.22f3ceb).
This enables this PR's CI to find the proper release. This is necessary
because I am also making changes to the folder structure and artifact
naming that the other CI jobs are depending on.

Releases generated from this branch can be inspected here:
https://github.com/paritytech/revive-alex-workflowtest/releases/tag/v0.1.0-dev.12

Summary of changes:
- Change `llvm-builder` to use MSVC toolchain on windows
- Fix `llvm-builder` to work with `.exe` files
- Unify the llvm release jobs into a single one. This removed a lot of
copy pasted code and also speeds up the build by giving each their own
runner.
- Use the LLVM target triple to name the binary releases instead of an
ad-hoc naming convention
- Remove the nested folder hierarchy inside the llvm release. Its just
now a single folder `llvm-<target>` that contains the toolchain.
- Give jobs and workflows consistent names
- Replace all runners bei their `*-latest` counterpart
- Only use `parity-large` to build llvm now. All other jobs use github
runners
This commit is contained in:
Alexander Theißen
2025-02-28 15:06:03 +01:00
committed by GitHub
parent 93788e72e9
commit 2fb8beee62
16 changed files with 340 additions and 446 deletions
+2 -3
View File
@@ -1,4 +1,4 @@
name: "get emsdk"
name: "Get Emscripten SDK"
inputs:
version:
description: ""
@@ -9,7 +9,6 @@ inputs:
runs:
using: "composite"
steps:
- name: install emsdk
shell: bash
run: |
@@ -17,4 +16,4 @@ runs:
cd emsdk
git checkout tags/${{ inputs.version }}
./emsdk install ${{ inputs.version }}
./emsdk activate ${{ inputs.version }}
./emsdk activate ${{ inputs.version }}
+10 -31
View File
@@ -1,29 +1,12 @@
# example:
#
# - name: get llvm
# uses: ./.github/actions/get-llvm
# - uses: ./.github/actions/get-llvm
# with:
# releasePrefix: llvm-
# artifactArch: macos-arm64
# dir: target-llvm/macos
# target: x86_64-unknown-linux-gnu
name: "get llvm"
name: "Download LLVM"
inputs:
artifactArch:
target:
required: true
releasePrefix:
description: "LLVM release tag prefix to search"
required: false
default: "llvm-"
dir:
description: "Archive extract path (`tar -C`)"
required: false
default: "./"
stripComponents:
description: "Strip UMBER leading components from file names on extraction (`tar --strip-components`)"
required: false
default: 0
runs:
using: "composite"
@@ -32,16 +15,15 @@ runs:
id: find
uses: actions/github-script@v7
env:
releasePrefix: ${{ inputs.releasePrefix }}
artifactArch: ${{ inputs.artifactArch }}
target: ${{ inputs.target }}
with:
result-encoding: string
script: |
let page = 1;
let releases = [];
let releasePrefix = process.env.releasePrefix
let artifactArch = process.env.artifactArch
let releasePrefix = "llvm-"
let target = process.env.target
do {
const res = await github.rest.repos.listReleases({
@@ -61,10 +43,10 @@ runs:
});
if (llvmLatestRelease){
let asset = llvmLatestRelease.assets.find(asset =>{
return asset.name.includes(artifactArch);
return asset.name.includes(target);
});
if (!asset){
core.setFailed(`Artifact for '${artifactArch}' not found in release ${llvmLatestRelease.tag_name} (${llvmLatestRelease.html_url})`);
core.setFailed(`Artifact for '${target}' not found in release ${llvmLatestRelease.tag_name} (${llvmLatestRelease.html_url})`);
process.exit();
}
return asset.browser_download_url;
@@ -79,13 +61,10 @@ runs:
- name: download
shell: bash
run: |
mkdir -p ${{ inputs.dir }}
curl -sSLo llvm.tar.gz ${{ steps.find.outputs.result }}
ls -al
- name: unpack
shell: bash
run: |
tar -xf llvm.tar.gz -C ${{ inputs.dir }} --strip-components=${{ inputs.stripComponents }}
tar -xf llvm.tar.gz
rm llvm.tar.gz
ls -al ${{ inputs.dir }}
+31
View File
@@ -0,0 +1,31 @@
name: "Install Solidity Compiler"
runs:
using: "composite"
steps:
- name: Put Solc Direcotry into PATH
shell: bash
run: |
mkdir -p solc
echo "$(pwd)/solc/" >> $GITHUB_PATH
- name: Figure out Solc Download URL
shell: bash
run: |
if [[ "${{ runner.os }}" == "Linux" ]]; then
echo "SOLC_NAME=solc-static-linux" >> $GITHUB_ENV
elif [[ "${{ runner.os }}" == "Windows" ]]; then
echo "SOLC_NAME=solc-windows.exe" >> $GITHUB_ENV
else
echo "SOLC_NAME=solc-macos" >> $GITHUB_ENV
fi
- name: Download Solc
shell: bash
run: |
curl -sSL --output solc/solc https://github.com/ethereum/solidity/releases/download/v0.8.28/${SOLC_NAME}
- name: Make Solc Executable
shell: bash
run: |
chmod +x solc/solc