
This should fix a number of concurrency/threading issues. I had to force-disable concurrency in the linker using a hack. I'm not entirely sure what the cause is, possibly the MinGW version (version 12 appears to work for me, while version 11 as used on the GitHub runner image seems to be broken). There are a few ways to fix this in a better way: * Fix the underlying cause (possibly by upgrading to MinGW-w64 12). * Add the `--threads` flag to the LLD MinGW linker, so we can use a regular parameter instead of this hack.
222 строки
6,6 КиБ
YAML
222 строки
6,6 КиБ
YAML
name: Windows
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- dev
|
|
- release
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-windows:
|
|
runs-on: windows-2022
|
|
steps:
|
|
- name: Configure pagefile
|
|
uses: al-cheb/configure-pagefile-action@v1.3
|
|
with:
|
|
minimum-size: 8GB
|
|
maximum-size: 24GB
|
|
disk-root: "C:"
|
|
- uses: brechtm/setup-scoop@v2
|
|
with:
|
|
scoop_update: 'false'
|
|
- name: Install Dependencies
|
|
shell: bash
|
|
run: |
|
|
scoop install ninja binaryen
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
submodules: true
|
|
- name: Install Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: '1.20'
|
|
cache: true
|
|
- name: Restore cached LLVM source
|
|
uses: actions/cache/restore@v3
|
|
id: cache-llvm-source
|
|
with:
|
|
key: llvm-source-15-windows-v4
|
|
path: |
|
|
llvm-project/clang/lib/Headers
|
|
llvm-project/clang/include
|
|
llvm-project/compiler-rt
|
|
llvm-project/lld/include
|
|
llvm-project/llvm/include
|
|
- name: Download LLVM source
|
|
if: steps.cache-llvm-source.outputs.cache-hit != 'true'
|
|
run: make llvm-source
|
|
- name: Save cached LLVM source
|
|
uses: actions/cache/save@v3
|
|
if: steps.cache-llvm-source.outputs.cache-hit != 'true'
|
|
with:
|
|
key: ${{ steps.cache-llvm-source.outputs.cache-primary-key }}
|
|
path: |
|
|
llvm-project/clang/lib/Headers
|
|
llvm-project/clang/include
|
|
llvm-project/compiler-rt
|
|
llvm-project/lld/include
|
|
llvm-project/llvm/include
|
|
- name: Restore cached LLVM build
|
|
uses: actions/cache/restore@v3
|
|
id: cache-llvm-build
|
|
with:
|
|
key: llvm-build-15-windows-v6
|
|
path: llvm-build
|
|
- name: Build LLVM
|
|
if: steps.cache-llvm-build.outputs.cache-hit != 'true'
|
|
shell: bash
|
|
run: |
|
|
# fetch LLVM source
|
|
rm -rf llvm-project
|
|
make llvm-source
|
|
# build!
|
|
make llvm-build CCACHE=OFF
|
|
# Remove unnecessary object files (to reduce cache size).
|
|
find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \;
|
|
- name: Save cached LLVM build
|
|
uses: actions/cache/save@v3
|
|
if: steps.cache-llvm-build.outputs.cache-hit != 'true'
|
|
with:
|
|
key: ${{ steps.cache-llvm-build.outputs.cache-primary-key }}
|
|
path: llvm-build
|
|
- name: Cache wasi-libc sysroot
|
|
uses: actions/cache@v3
|
|
id: cache-wasi-libc
|
|
with:
|
|
key: wasi-libc-sysroot-v4
|
|
path: lib/wasi-libc/sysroot
|
|
- name: Build wasi-libc
|
|
if: steps.cache-wasi-libc.outputs.cache-hit != 'true'
|
|
run: make wasi-libc
|
|
- name: Install wasmtime
|
|
run: |
|
|
scoop install wasmtime
|
|
- name: Test TinyGo
|
|
shell: bash
|
|
run: make test GOTESTFLAGS="-short"
|
|
- name: Build TinyGo release tarball
|
|
shell: bash
|
|
run: make build/release -j4
|
|
- name: Make release artifact
|
|
shell: bash
|
|
working-directory: build/release
|
|
run: 7z -tzip a release.zip tinygo
|
|
- name: Publish release artifact
|
|
# Note: this release artifact is double-zipped, see:
|
|
# https://github.com/actions/upload-artifact/issues/39
|
|
# We can essentially pick one of these:
|
|
# - have a dobule-zipped artifact when downloaded from the UI
|
|
# - have a very slow artifact upload
|
|
# We're doing the former here, to keep artifact uploads fast.
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: release-double-zipped
|
|
path: build/release/release.zip
|
|
|
|
smoke-test-windows:
|
|
runs-on: windows-2022
|
|
needs: build-windows
|
|
steps:
|
|
- name: Configure pagefile
|
|
uses: al-cheb/configure-pagefile-action@v1.3
|
|
with:
|
|
minimum-size: 8GB
|
|
maximum-size: 24GB
|
|
disk-root: "C:"
|
|
- uses: brechtm/setup-scoop@v2
|
|
with:
|
|
scoop_update: 'false'
|
|
- name: Install Dependencies
|
|
shell: bash
|
|
run: |
|
|
scoop install binaryen
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Install Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: '1.20'
|
|
cache: true
|
|
- name: Download TinyGo build
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: release-double-zipped
|
|
path: build/
|
|
- name: Unzip TinyGo build
|
|
shell: bash
|
|
working-directory: build
|
|
run: 7z x release.zip -r
|
|
- name: Smoke tests
|
|
shell: bash
|
|
run: make smoketest TINYGO=$(PWD)/build/tinygo/bin/tinygo
|
|
|
|
stdlib-test-windows:
|
|
runs-on: windows-2022
|
|
needs: build-windows
|
|
steps:
|
|
- name: Configure pagefile
|
|
uses: al-cheb/configure-pagefile-action@v1.3
|
|
with:
|
|
minimum-size: 8GB
|
|
maximum-size: 24GB
|
|
disk-root: "C:"
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Install Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: '1.20'
|
|
cache: true
|
|
- name: Download TinyGo build
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: release-double-zipped
|
|
path: build/
|
|
- name: Unzip TinyGo build
|
|
shell: bash
|
|
working-directory: build
|
|
run: 7z x release.zip -r
|
|
- name: Test stdlib packages
|
|
run: make tinygo-test TINYGO=$(PWD)/build/tinygo/bin/tinygo
|
|
|
|
stdlib-wasi-test-windows:
|
|
runs-on: windows-2022
|
|
needs: build-windows
|
|
steps:
|
|
- name: Configure pagefile
|
|
uses: al-cheb/configure-pagefile-action@v1.3
|
|
with:
|
|
minimum-size: 8GB
|
|
maximum-size: 24GB
|
|
disk-root: "C:"
|
|
- uses: brechtm/setup-scoop@v2
|
|
with:
|
|
scoop_update: 'false'
|
|
- name: Install Dependencies
|
|
shell: bash
|
|
run: |
|
|
scoop install binaryen wasmtime
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Install Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: '1.20'
|
|
cache: true
|
|
- name: Download TinyGo build
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
name: release-double-zipped
|
|
path: build/
|
|
- name: Unzip TinyGo build
|
|
shell: bash
|
|
working-directory: build
|
|
run: 7z x release.zip -r
|
|
- name: Test stdlib packages on wasi
|
|
run: make tinygo-test-wasi-fast TINYGO=$(PWD)/build/tinygo/bin/tinygo
|