diff --git a/.circleci/config.yml b/.circleci/config.yml index 1e1952a4..afaa5544 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -44,12 +44,12 @@ commands: steps: - restore_cache: keys: - - llvm-source-8-v5 + - llvm-source-9-v0 - run: name: "Fetch LLVM source" command: make llvm-source - save_cache: - key: llvm-source-8-v5 + key: llvm-source-9-v0 paths: - llvm-project test-linux: @@ -57,7 +57,7 @@ commands: - checkout - submodules - apt-dependencies: - llvm: "-8" + llvm: "-9" - install-node - restore_cache: keys: @@ -101,7 +101,7 @@ commands: - llvm-source-linux - restore_cache: keys: - - llvm-build-8-linux-v7-assert + - llvm-build-9-linux-v0-assert - run: name: "Build LLVM" command: | @@ -119,15 +119,15 @@ commands: make ASSERT=1 llvm-build fi - save_cache: - key: llvm-build-8-linux-v7-assert + key: llvm-build-9-linux-v0-assert paths: llvm-build - run: name: "Create LLVM symlinks" command: | - ln -s $PWD/llvm-build/bin/clang-8 /go/bin/clang-8 - ln -s $PWD/llvm-build/bin/ld.lld /go/bin/ld.lld-8 - ln -s $PWD/llvm-build/bin/wasm-ld /go/bin/wasm-ld-8 + ln -s $PWD/llvm-build/bin/clang-9 /go/bin/clang-9 + ln -s $PWD/llvm-build/bin/ld.lld /go/bin/ld.lld-9 + ln -s $PWD/llvm-build/bin/wasm-ld /go/bin/wasm-ld-9 - run: make ASSERT=1 - run: name: "Test TinyGo" @@ -166,7 +166,7 @@ commands: - llvm-source-linux - restore_cache: keys: - - llvm-build-8-linux-v7 + - llvm-build-9-linux-v0 - run: name: "Build LLVM" command: | @@ -184,15 +184,15 @@ commands: make llvm-build fi - save_cache: - key: llvm-build-8-linux-v7 + key: llvm-build-9-linux-v0 paths: llvm-build - run: name: "Create LLVM symlinks" command: | - ln -s $PWD/llvm-build/bin/clang-8 /go/bin/clang-8 - ln -s $PWD/llvm-build/bin/ld.lld /go/bin/ld.lld-8 - ln -s $PWD/llvm-build/bin/wasm-ld /go/bin/wasm-ld-8 + ln -s $PWD/llvm-build/bin/clang-9 /go/bin/clang-9 + ln -s $PWD/llvm-build/bin/ld.lld /go/bin/ld.lld-9 + ln -s $PWD/llvm-build/bin/wasm-ld /go/bin/wasm-ld-9 - run: name: "Test TinyGo" command: make test @@ -239,17 +239,17 @@ commands: - go-cache-macos-v2-{{ checksum "go.mod" }} - restore_cache: keys: - - llvm-source-8-macos-v5 + - llvm-source-9-macos-v0 - run: name: "Fetch LLVM source" command: make llvm-source - save_cache: - key: llvm-source-8-macos-v5 + key: llvm-source-9-macos-v0 paths: - llvm-project - restore_cache: keys: - - llvm-build-8-macos-v6 + - llvm-build-9-macos-v0 - run: name: "Build LLVM" command: | @@ -261,13 +261,13 @@ commands: make llvm-build fi - save_cache: - key: llvm-build-8-macos-v6 + key: llvm-build-9-macos-v0 paths: llvm-build - run: name: "Create LLVM symlinks" command: | - ln -s $PWD/llvm-build/bin/clang-8 /usr/local/bin/clang-8 + ln -s $PWD/llvm-build/bin/clang-9 /usr/local/bin/clang-9 - run: name: "Test TinyGo" command: make test @@ -300,17 +300,17 @@ commands: jobs: - test-llvm8-go111: + test-llvm9-go111: docker: - image: circleci/golang:1.11-stretch steps: - test-linux - test-llvm8-go112: + test-llvm9-go112: docker: - image: circleci/golang:1.12-stretch steps: - test-linux - test-llvm8-go113: + test-llvm9-go113: docker: - image: circleci/golang:1.13-stretch steps: @@ -337,9 +337,9 @@ jobs: workflows: test-all: jobs: - - test-llvm8-go111 - - test-llvm8-go112 - - test-llvm8-go113 + - test-llvm9-go111 + - test-llvm9-go112 + - test-llvm9-go113 - build-linux - build-macos - assert-test-linux diff --git a/Dockerfile b/Dockerfile index 95537ca5..cfa75aff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ -# TinyGo base stage installs Go 1.13, LLVM 8 and the TinyGo compiler itself. +# TinyGo base stage installs Go 1.13, LLVM 9 and the TinyGo compiler itself. FROM golang:1.13 AS tinygo-base RUN wget -O- https://apt.llvm.org/llvm-snapshot.gpg.key| apt-key add - && \ - echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-8 main" >> /etc/apt/sources.list && \ + echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >> /etc/apt/sources.list && \ apt-get update && \ - apt-get install -y llvm-8-dev libclang-8-dev git + apt-get install -y llvm-9-dev libclang-9-dev git COPY . /tinygo @@ -25,9 +25,9 @@ COPY --from=tinygo-base /tinygo/src /tinygo/src COPY --from=tinygo-base /tinygo/targets /tinygo/targets RUN wget -O- https://apt.llvm.org/llvm-snapshot.gpg.key| apt-key add - && \ - echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-8 main" >> /etc/apt/sources.list && \ + echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >> /etc/apt/sources.list && \ apt-get update && \ - apt-get install -y libllvm8 lld-8 + apt-get install -y libllvm9 lld-9 # tinygo-avr stage installs the needed dependencies to compile TinyGo programs for AVR microcontrollers. FROM tinygo-base AS tinygo-avr @@ -59,7 +59,7 @@ COPY --from=tinygo-base /tinygo/lib /tinygo/lib RUN cd /tinygo/ && \ apt-get update && \ - apt-get install -y apt-utils python3 make clang-8 && \ + apt-get install -y apt-utils python3 make clang-9 && \ make gen-device-nrf && make gen-device-stm32 && \ apt-get remove -y python3 && \ apt-get autoremove -y && \ @@ -74,7 +74,7 @@ COPY --from=tinygo-base /tinygo/lib /tinygo/lib RUN cd /tinygo/ && \ apt-get update && \ - apt-get install -y apt-utils python3 make clang-8 binutils-avr gcc-avr avr-libc && \ + apt-get install -y apt-utils python3 make clang-9 binutils-avr gcc-avr avr-libc && \ make gen-device && \ apt-get remove -y python3 && \ apt-get autoremove -y && \ diff --git a/Makefile b/Makefile index e1ecb84c..e5f14d00 100644 --- a/Makefile +++ b/Makefile @@ -120,13 +120,13 @@ gen-device-stm32: # Get LLVM sources. llvm-project/README.md: - git clone -b release/8.x https://github.com/llvm/llvm-project + git clone -b release/9.x https://github.com/llvm/llvm-project llvm-source: llvm-project/README.md # Configure LLVM. TINYGO_SOURCE_DIR=$(shell pwd) $(LLVM_BUILDDIR)/build.ninja: llvm-source - mkdir -p $(LLVM_BUILDDIR); cd $(LLVM_BUILDDIR); cmake -G Ninja $(TINYGO_SOURCE_DIR)/llvm-project/llvm "-DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64;WebAssembly" "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR;RISCV" -DCMAKE_BUILD_TYPE=Release -DLIBCLANG_BUILD_STATIC=ON -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ZLIB=OFF -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD=OFF $(LLVM_OPTION) + mkdir -p $(LLVM_BUILDDIR); cd $(LLVM_BUILDDIR); cmake -G Ninja $(TINYGO_SOURCE_DIR)/llvm-project/llvm "-DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64;RISCV;WebAssembly" "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR" -DCMAKE_BUILD_TYPE=Release -DLIBCLANG_BUILD_STATIC=ON -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ZLIB=OFF -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD=OFF $(LLVM_OPTION) # Build LLVM. $(LLVM_BUILDDIR): $(LLVM_BUILDDIR)/build.ninja diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fb8cc1b1..6e25acc0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -14,7 +14,7 @@ jobs: - task: CacheBeta@0 displayName: Cache LLVM source inputs: - key: llvm-source-8-windows-v0 + key: llvm-source-9-windows-v0 path: llvm-project - task: Bash@3 displayName: Download LLVM source @@ -24,7 +24,7 @@ jobs: - task: CacheBeta@0 displayName: Cache LLVM build inputs: - key: llvm-build-8-windows-v1 + key: llvm-build-9-windows-v0 path: llvm-build - task: Bash@3 displayName: Build LLVM @@ -34,6 +34,10 @@ jobs: if [ ! -f llvm-build/lib/liblldELF.a ] then choco install ninja + # LLVM 9 cannot be built with MinGW 8. + # For details: https://reviews.llvm.org/D70266 + choco uninstall mingw + choco install mingw --version=7.3.0 make llvm-build fi - task: Bash@3 diff --git a/builder/commands.go b/builder/commands.go index 9ee43538..2f2b131e 100644 --- a/builder/commands.go +++ b/builder/commands.go @@ -13,18 +13,18 @@ import ( // distributions or may not even exist in $PATH, in which case absolute paths // may be used. var commands = map[string][]string{ - "clang": {"clang-8"}, - "ld.lld": {"ld.lld-8", "ld.lld"}, - "wasm-ld": {"wasm-ld-8", "wasm-ld"}, + "clang": {"clang-9"}, + "ld.lld": {"ld.lld-9", "ld.lld"}, + "wasm-ld": {"wasm-ld-9", "wasm-ld"}, } func init() { - // Add the path to a Homebrew-installed LLVM 8 for ease of use (no need to + // Add the path to a Homebrew-installed LLVM 9 for ease of use (no need to // manually set $PATH). if runtime.GOOS == "darwin" { - commands["clang"] = append(commands["clang"], "/usr/local/opt/llvm@8/bin/clang-8") - commands["ld.lld"] = append(commands["ld.lld"], "/usr/local/opt/llvm@8/bin/ld.lld") - commands["wasm-ld"] = append(commands["wasm-ld"], "/usr/local/opt/llvm@8/bin/wasm-ld") + commands["clang"] = append(commands["clang"], "/usr/local/opt/llvm@9/bin/clang-9") + commands["ld.lld"] = append(commands["ld.lld"], "/usr/local/opt/llvm@9/bin/ld.lld") + commands["wasm-ld"] = append(commands["wasm-ld"], "/usr/local/opt/llvm@9/bin/wasm-ld") } // Add the path for when LLVM was installed with the installer from // llvm.org, which by default doesn't add LLVM to the $PATH environment diff --git a/builder/env.go b/builder/env.go index 1decd08b..c43fc218 100644 --- a/builder/env.go +++ b/builder/env.go @@ -96,9 +96,9 @@ func getClangHeaderPath(TINYGOROOT string) string { return "" } // Example executable: - // /usr/lib/llvm-8/bin/clang + // /usr/lib/llvm-9/bin/clang // Example include path: - // /usr/lib/llvm-8/lib/clang/8.0.1/include/ + // /usr/lib/llvm-9/lib/clang/9.0.1/include/ llvmRoot := filepath.Dir(filepath.Dir(binpath)) clangVersionRoot := filepath.Join(llvmRoot, "lib", "clang") dirs, err := ioutil.ReadDir(clangVersionRoot) diff --git a/cgo/libclang.go b/cgo/libclang.go index 46eff01c..336122a7 100644 --- a/cgo/libclang.go +++ b/cgo/libclang.go @@ -15,7 +15,7 @@ import ( ) /* -#include // if this fails, install libclang-8-dev +#include // if this fails, install libclang-9-dev #include #include diff --git a/cgo/libclang_config.go b/cgo/libclang_config.go index 4b08d3cb..822e0520 100644 --- a/cgo/libclang_config.go +++ b/cgo/libclang_config.go @@ -3,9 +3,9 @@ package cgo /* -#cgo linux CFLAGS: -I/usr/lib/llvm-8/include -#cgo darwin CFLAGS: -I/usr/local/opt/llvm@8/include -#cgo linux LDFLAGS: -L/usr/lib/llvm-8/lib -lclang -#cgo darwin LDFLAGS: -L/usr/local/opt/llvm@8/lib -lclang -lffi +#cgo linux CFLAGS: -I/usr/lib/llvm-9/include +#cgo darwin CFLAGS: -I/usr/local/opt/llvm@9/include +#cgo linux LDFLAGS: -L/usr/lib/llvm-9/lib -lclang +#cgo darwin LDFLAGS: -L/usr/local/opt/llvm@9/lib -lclang -lffi */ import "C" diff --git a/cgo/libclang_stubs.c b/cgo/libclang_stubs.c index ba3e6af9..9c193076 100644 --- a/cgo/libclang_stubs.c +++ b/cgo/libclang_stubs.c @@ -3,7 +3,7 @@ // are slightly different from the ones defined in libclang.go, but they // should be ABI compatible. -#include // if this fails, install libclang-8-dev +#include // if this fails, install libclang-9-dev CXCursor tinygo_clang_getTranslationUnitCursor(CXTranslationUnit tu) { return clang_getTranslationUnitCursor(tu); diff --git a/go.mod b/go.mod index 5d53aeef..61c2b6f7 100644 --- a/go.mod +++ b/go.mod @@ -9,5 +9,5 @@ require ( go.bug.st/serial.v1 v0.0.0-20180827123349-5f7892a7bb45 golang.org/x/sys v0.0.0-20191010194322-b09406accb47 // indirect golang.org/x/tools v0.0.0-20190227180812-8dcc6e70cdef - tinygo.org/x/go-llvm v0.0.0-20191103200204-37e93e3f04e2 + tinygo.org/x/go-llvm v0.0.0-20191113125529-bad6d01809e8 ) diff --git a/go.sum b/go.sum index 4e23e472..a31f3cf0 100644 --- a/go.sum +++ b/go.sum @@ -24,3 +24,5 @@ tinygo.org/x/go-llvm v0.0.0-20191103182207-90b6e4bdc0b9 h1:d6rAX39a3C0pKrY5HcojE tinygo.org/x/go-llvm v0.0.0-20191103182207-90b6e4bdc0b9/go.mod h1:fv1F0BSNpxMfCL0zF3M4OPFbgYHnhtB6ST0HvUtu/LE= tinygo.org/x/go-llvm v0.0.0-20191103200204-37e93e3f04e2 h1:Q5Hv3e5cLMGkiYwYgZL1Zrv6nb/EY+DJpRWrdO6ws6o= tinygo.org/x/go-llvm v0.0.0-20191103200204-37e93e3f04e2/go.mod h1:fv1F0BSNpxMfCL0zF3M4OPFbgYHnhtB6ST0HvUtu/LE= +tinygo.org/x/go-llvm v0.0.0-20191113125529-bad6d01809e8 h1:9Bfvso+tTVQg16UzOA614NaYA4x8vsRBNtd3eBrXwp0= +tinygo.org/x/go-llvm v0.0.0-20191113125529-bad6d01809e8/go.mod h1:fv1F0BSNpxMfCL0zF3M4OPFbgYHnhtB6ST0HvUtu/LE=