From 18b50db0dc443caf90a1a8ace323c39babcd5fec 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 and use LLVM 17, now that it is available in Homebrew. Full support for LLVM 17 (including using it by default) will have to wait until Espressif rebases their Xtensa fork of LLVM. --- .circleci/config.yml | 19 ++++++++++++++----- .github/workflows/build-macos.yml | 18 ++++++++++++++---- GNUmakefile | 2 +- cgo/libclang_config_llvm16.go | 4 ++-- cgo/libclang_config_llvm17.go | 15 +++++++++++++++ go.mod | 2 +- go.sum | 4 ++-- 7 files changed, 49 insertions(+), 15 deletions(-) create mode 100644 cgo/libclang_config_llvm17.go diff --git a/.circleci/config.yml b/.circleci/config.yml index f7458742..d9407119 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 \ @@ -69,8 +69,8 @@ commands: - build-binaryen-linux - restore_cache: keys: - - go-cache-v3-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - - go-cache-v3-{{ checksum "go.mod" }} + - go-cache-v4-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} + - go-cache-v4-{{ checksum "go.mod" }} - llvm-source-linux - run: go install -tags=llvm<> . - restore_cache: @@ -92,7 +92,7 @@ commands: - run: make gen-device -j4 - run: make smoketest XTENSA=0 - save_cache: - key: go-cache-v3-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} + key: go-cache-v4-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - /go/pkg/mod @@ -100,11 +100,18 @@ commands: jobs: test-llvm15-go118: docker: - - image: golang:1.18-buster + - image: golang:1.18-bullseye steps: - test-linux: llvm: "15" 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-llvm15-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 1284a4ed..be8bdb03 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 - run: go install + - 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/GNUmakefile b/GNUmakefile index bd597917..8d36e99a 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -10,7 +10,7 @@ LLD_SRC ?= $(LLVM_PROJECTDIR)/lld # Try to autodetect LLVM build tools. # Versions are listed here in descending priority order. -LLVM_VERSIONS = 16 15 +LLVM_VERSIONS = 17 16 15 errifempty = $(if $(1),$(1),$(error $(2))) detect = $(shell which $(call errifempty,$(firstword $(foreach p,$(2),$(shell command -v $(p) 2> /dev/null && echo $(p)))),failed to locate $(1) at any of: $(2))) toolSearchPathsVersion = $(1)-$(2) diff --git a/cgo/libclang_config_llvm16.go b/cgo/libclang_config_llvm16.go index 01c3a7e2..8afdb14c 100644 --- a/cgo/libclang_config_llvm16.go +++ b/cgo/libclang_config_llvm16.go @@ -1,8 +1,8 @@ -//go:build !byollvm && !llvm15 +//go:build !byollvm && !llvm15 && !llvm17 package cgo -// As of 2023-05-05, there is a packaging issue on Debian: +// As of 2023-05-05, there is a packaging issue with LLVM 16 on Debian: // https://github.com/llvm/llvm-project/issues/62199 // A workaround is to fix this locally, using something like this: // diff --git a/cgo/libclang_config_llvm17.go b/cgo/libclang_config_llvm17.go new file mode 100644 index 00000000..fd6d1480 --- /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 48049c88..36d601f8 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 b895ee1d..1b5ad074 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=