From bb41deacd3be4b128c090a185fc3dcea91aba7e1 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 23 Sep 2023 15:03:24 +0200 Subject: [PATCH] all: add initial LLVM 17 support This allows us to test LLVM 17 already, before it's available in Homebrew etc. Full support for LLVM 17 will have to wait until Espressif rebases their Xtensa fork of LLVM. --- .circleci/config.yml | 13 +++++++++++-- .github/workflows/build-macos.yml | 16 +++++++++++++--- cgo/libclang_config_llvm16.go | 2 +- cgo/libclang_config_llvm17.go | 15 +++++++++++++++ go.mod | 2 +- go.sum | 4 ++-- 6 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 cgo/libclang_config_llvm17.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 1dff3ba719..86da321dd3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -55,7 +55,7 @@ commands: - run: name: "Install apt dependencies" command: | - echo 'deb https://apt.llvm.org/buster/ llvm-toolchain-buster-<> main' > /etc/apt/sources.list.d/llvm.list + echo 'deb https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-<> main' > /etc/apt/sources.list.d/llvm.list wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - apt-get update apt-get install --no-install-recommends -y \ @@ -100,11 +100,18 @@ commands: jobs: test-llvm14-go118: docker: - - image: golang:1.18-buster + - image: golang:1.18-bullseye steps: - test-linux: llvm: "14" resource_class: large + test-llvm17-go121: + docker: + - image: golang:1.21-bullseye + steps: + - test-linux: + llvm: "17" + resource_class: large workflows: test-all: @@ -112,3 +119,5 @@ workflows: # This tests our lowest supported versions of Go and LLVM, to make sure at # least the smoke tests still pass. - test-llvm14-go118 + # This tests the upcoming LLVM 17 support. + - test-llvm17-go121 diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 1284a4edd3..944bd07f24 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -116,11 +116,15 @@ jobs: test-macos-homebrew: name: homebrew-install runs-on: macos-latest + strategy: + matrix: + version: [16, 17] steps: + - name: Update Homebrew + run: brew update - name: Install LLVM - shell: bash run: | - HOMEBREW_NO_AUTO_UPDATE=1 brew install llvm@16 + HOMEBREW_NO_AUTO_UPDATE=1 brew install llvm@${{ matrix.version }} - name: Checkout uses: actions/checkout@v3 - name: Install Go @@ -128,7 +132,13 @@ jobs: with: go-version: '1.21' cache: true - - name: Build TinyGo + - name: Build TinyGo (LLVM ${{ matrix.version }}) + run: go install -tags=llvm${{ matrix.version }} + - name: Check binary + run: tinygo version + - name: Build TinyGo (default LLVM) + if: ${{ matrix.version }} == 16 run: go install - name: Check binary + if: ${{ matrix.version }} == 16 run: tinygo version diff --git a/cgo/libclang_config_llvm16.go b/cgo/libclang_config_llvm16.go index 79aacd2f26..28091701dc 100644 --- a/cgo/libclang_config_llvm16.go +++ b/cgo/libclang_config_llvm16.go @@ -1,4 +1,4 @@ -//go:build !byollvm && !llvm14 && !llvm15 +//go:build !byollvm && !llvm14 && !llvm15 && !llvm17 package cgo diff --git a/cgo/libclang_config_llvm17.go b/cgo/libclang_config_llvm17.go new file mode 100644 index 0000000000..fd6d1480e3 --- /dev/null +++ b/cgo/libclang_config_llvm17.go @@ -0,0 +1,15 @@ +//go:build !byollvm && llvm17 + +package cgo + +/* +#cgo linux CFLAGS: -I/usr/include/llvm-17 -I/usr/include/llvm-c-17 -I/usr/lib/llvm-17/include +#cgo darwin,amd64 CFLAGS: -I/usr/local/opt/llvm@17/include +#cgo darwin,arm64 CFLAGS: -I/opt/homebrew/opt/llvm@17/include +#cgo freebsd CFLAGS: -I/usr/local/llvm17/include +#cgo linux LDFLAGS: -L/usr/lib/llvm-17/lib -lclang +#cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@17/lib -lclang -lffi +#cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@17/lib -lclang -lffi +#cgo freebsd LDFLAGS: -L/usr/local/llvm17/lib -lclang +*/ +import "C" diff --git a/go.mod b/go.mod index 48049c88ef..36d601f882 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( golang.org/x/sys v0.11.0 golang.org/x/tools v0.12.0 gopkg.in/yaml.v2 v2.4.0 - tinygo.org/x/go-llvm v0.0.0-20230920233244-32ed56c6be9c + tinygo.org/x/go-llvm v0.0.0-20230923132128-bba3c7009bfd ) require ( diff --git a/go.sum b/go.sum index b895ee1d8c..1b5ad074be 100644 --- a/go.sum +++ b/go.sum @@ -65,5 +65,5 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -tinygo.org/x/go-llvm v0.0.0-20230920233244-32ed56c6be9c h1:rS8mAFqf0CfxPCbtfsI3bWL4jkb0TBYA1wx7tY1nu28= -tinygo.org/x/go-llvm v0.0.0-20230920233244-32ed56c6be9c/go.mod h1:GFbusT2VTA4I+l4j80b17KFK+6whv69Wtny5U+T8RR0= +tinygo.org/x/go-llvm v0.0.0-20230923132128-bba3c7009bfd h1:iSVvs8r3ooxYTsmcf7FKCHq83eOSUkWKtmQhnDadDQU= +tinygo.org/x/go-llvm v0.0.0-20230923132128-bba3c7009bfd/go.mod h1:GFbusT2VTA4I+l4j80b17KFK+6whv69Wtny5U+T8RR0=