diff --git a/.circleci/config.yml b/.circleci/config.yml index f7458742f3..d9407119bc 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 1284a4edd3..be8bdb0379 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/GNUmakefile b/GNUmakefile index bd597917d3..8d36e99a2a 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 01c3a7e2d1..8afdb14cb8 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 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=