
The Espressif fork of LLVM now has Xtensa support in the linker LLD. (This support was written mosly by me). This means we don't have to use the Espressif GNU toolchain anymore and makes installing TinyGo simpler. In the future, this also paves the way for ThinLTO support. Right now it is mostly just a way to simplify TinyGo installation and speed up CI slightly.
115 строки
3,4 КиБ
YAML
115 строки
3,4 КиБ
YAML
name: macOS
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- dev
|
|
- release
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-macos:
|
|
name: build-macos
|
|
runs-on: macos-11
|
|
steps:
|
|
- name: Install Dependencies
|
|
shell: bash
|
|
run: |
|
|
HOMEBREW_NO_AUTO_UPDATE=1 brew install qemu binaryen
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
submodules: true
|
|
- name: Install Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: '1.19'
|
|
cache: true
|
|
- name: Cache LLVM source
|
|
uses: actions/cache@v3
|
|
id: cache-llvm-source
|
|
with:
|
|
key: llvm-source-15-macos-v2
|
|
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: Cache LLVM build
|
|
uses: actions/cache@v3
|
|
id: cache-llvm-build
|
|
with:
|
|
key: llvm-build-15-macos-v2
|
|
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
|
|
# install dependencies
|
|
HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake ninja
|
|
# build!
|
|
make llvm-build
|
|
find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \;
|
|
- 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: Test TinyGo
|
|
shell: bash
|
|
run: make test GOTESTFLAGS="-v -short"
|
|
- name: Build TinyGo release tarball
|
|
run: make release -j3
|
|
- name: Test stdlib packages
|
|
run: make tinygo-test
|
|
- name: Make release artifact
|
|
shell: bash
|
|
run: cp -p build/release.tar.gz build/tinygo.darwin-amd64.tar.gz
|
|
- 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 double-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@v2
|
|
with:
|
|
name: release-double-zipped
|
|
path: build/tinygo.darwin-amd64.tar.gz
|
|
- name: Smoke tests
|
|
shell: bash
|
|
run: make smoketest TINYGO=$(PWD)/build/tinygo AVR=0
|
|
test-macos-homebrew:
|
|
name: homebrew-install
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Install LLVM
|
|
shell: bash
|
|
run: |
|
|
HOMEBREW_NO_AUTO_UPDATE=1 brew install llvm@15
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
- name: Install Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: '1.19'
|
|
cache: true
|
|
- name: Build TinyGo
|
|
run: go install
|
|
- name: Check binary
|
|
run: tinygo version
|