diff options
author | Ayke van Laethem <[email protected]> | 2019-04-05 13:45:02 +0200 |
---|---|---|
committer | Ron Evans <[email protected]> | 2019-04-08 09:13:16 +0200 |
commit | 2e926789f59379d0afdbcd7abfe1dba38c335e2a (patch) | |
tree | 7135cd11a800fd8d9d5ebd574ccdb3f929c0c84d | |
parent | 38c3d0852e16e74f73723ae6e121feac22e871b3 (diff) | |
download | tinygo-2e926789f59379d0afdbcd7abfe1dba38c335e2a.tar.gz tinygo-2e926789f59379d0afdbcd7abfe1dba38c335e2a.zip |
circleci: do macOS builds here instead of on Travis CI
This provides several advantages. Among others:
* Much faster and hopefully more reliable.
* Good caching support to store LLVM builds.
* Building and testing of release-ready artifacts.
-rw-r--r-- | .circleci/config.yml | 93 | ||||
-rw-r--r-- | .travis.yml | 39 | ||||
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | README.md | 1 |
4 files changed, 91 insertions, 52 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml index d9414c557..bc71b59d1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -49,16 +49,19 @@ commands: dep ensure --vendor-only smoketest: steps: + - smoketest-no-avr + - run: tinygo build -size short -o test.elf -target=arduino examples/blinky1 + - run: tinygo build -size short -o test.elf -target=digispark examples/blinky1 + smoketest-no-avr: + steps: - run: tinygo build -size short -o test.elf -target=pca10040 examples/blinky1 - run: tinygo build -size short -o test.elf -target=pca10040 examples/blinky2 - - run: tinygo build -size short -o blinky2 examples/blinky2 + - run: tinygo build -o blinky2 examples/blinky2 # TODO: re-enable -size flag with MachO support - run: tinygo build -size short -o test.elf -target=pca10040 examples/test - run: tinygo build -size short -o test.elf -target=microbit examples/echo - run: tinygo build -size short -o test.elf -target=nrf52840-mdk examples/blinky1 - run: tinygo build -size short -o test.elf -target=pca10031 examples/blinky1 - run: tinygo build -size short -o test.elf -target=bluepill examples/blinky1 - - run: tinygo build -size short -o test.elf -target=arduino examples/blinky1 - - run: tinygo build -size short -o test.elf -target=digispark examples/blinky1 - run: tinygo build -size short -o test.elf -target=reelboard examples/blinky1 - run: tinygo build -size short -o test.elf -target=reelboard examples/blinky2 - run: tinygo build -size short -o test.elf -target=pca10056 examples/blinky1 @@ -90,7 +93,7 @@ commands: paths: - ~/.cache/go-build - ~/.cache/tinygo - build-release: + build-linux: steps: - checkout - submodules @@ -162,9 +165,9 @@ commands: name: "Build TinyGo release" command: | make release -j3 - cp -p build/release.tar.gz /tmp/release.tar.gz + cp -p build/release.tar.gz /tmp/tinygo.linux-amd64.tar.gz - store_artifacts: - path: /tmp/release.tar.gz + path: /tmp/tinygo.linux-amd64.tar.gz - save_cache: key: go-cache-{{ checksum "Gopkg.lock" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: @@ -174,10 +177,71 @@ commands: name: "Extract release tarball" command: | mkdir -p ~/lib - tar -C ~/lib -xf /tmp/release.tar.gz + tar -C ~/lib -xf /tmp/tinygo.linux-amd64.tar.gz ln -s ~/lib/tinygo/bin/tinygo /go/bin/tinygo tinygo version - smoketest + build-macos: + steps: + - checkout + - submodules + - run: + name: "Install dependencies" + command: | + HOMEBREW_NO_AUTO_UPDATE=1 brew install go dep qemu + - restore_cache: + keys: + - llvm-source-8-macos-v2 + - run: + name: "Fetch LLVM source" + command: make llvm-source + - save_cache: + key: llvm-source-8-macos-v2 + paths: + - llvm + - restore_cache: + keys: + - llvm-build-8-macos-v2 + - run: + name: "Build LLVM" + command: | + if [ ! -f llvm-build/lib/liblldELF.a ] + then + # install dependencies + HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake ninja + # build! + make llvm-build + fi + - save_cache: + key: llvm-build-8-macos-v2 + 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/llvm-ar /usr/local/bin/llvm-ar + - run: + name: "Install Go dependencies" + command: dep ensure --vendor-only + - run: + name: "Test TinyGo" + command: make static-test + - run: + name: "Build TinyGo release" + command: | + make release -j3 + cp -p build/release.tar.gz /tmp/tinygo.darwin-amd64.tar.gz + - store_artifacts: + path: /tmp/tinygo.darwin-amd64.tar.gz + - run: + name: "Extract release tarball" + command: | + mkdir -p ~/lib + tar -C /usr/local/opt -xf /tmp/tinygo.darwin-amd64.tar.gz + ln -s /usr/local/opt/tinygo/bin/tinygo /usr/local/bin/tinygo + tinygo version + - smoketest-no-avr jobs: @@ -195,12 +259,20 @@ jobs: steps: - test-linux: llvm: "-8" - build-release: + build-linux: docker: - image: circleci/golang:1.12 working_directory: /go/src/github.com/tinygo-org/tinygo steps: - - build-release + - build-linux + build-macos: + macos: + xcode: "10.1.0" + working_directory: ~/go/src/github.com/tinygo-org/tinygo + steps: + - build-macos + + workflows: @@ -208,4 +280,5 @@ workflows: jobs: - test-llvm8-go111 - test-llvm8-go112 - - build-release + - build-linux + - build-macos diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index acec65141..000000000 --- a/.travis.yml +++ /dev/null @@ -1,39 +0,0 @@ -language: go - -matrix: - include: - - os: osx - go: "1.12" - env: PATH="/usr/local/opt/llvm/bin:$PATH" - before_install: - - mkdir -p /Users/travis/gopath/bin - -addons: - homebrew: - update: true - packages: - - llvm@8 - - qemu - -install: - - curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh - - dep ensure --vendor-only - -script: - - go install github.com/tinygo-org/tinygo - - go test -v . - - make gen-device - - tinygo build -size short -o blinky1.nrf.elf -target=pca10040 examples/blinky1 - - tinygo build -size short -o blinky2.nrf.elf -target=pca10040 examples/blinky2 - - tinygo build -o blinky2 examples/blinky2 # TODO: re-enable -size flag with MachO support - - tinygo build -size short -o test.nrf.elf -target=pca10040 examples/test - - tinygo build -size short -o blinky1.nrf51.elf -target=microbit examples/echo - - tinygo build -size short -o test.nrf.elf -target=nrf52840-mdk examples/blinky1 - - tinygo build -size short -o blinky1.nrf51d.elf -target=pca10031 examples/blinky1 - - tinygo build -size short -o blinky1.stm32.elf -target=bluepill examples/blinky1 - - tinygo build -size short -o blinky1.reel.elf -target=reelboard examples/blinky1 - - tinygo build -size short -o blinky2.reel.elf -target=reelboard examples/blinky2 - - tinygo build -size short -o blinky1.pca10056.elf -target=pca10056 examples/blinky1 - - tinygo build -size short -o blinky2.pca10056.elf -target=pca10056 examples/blinky2 - - tinygo build -size short -o blinky1.samd21.elf -target=itsybitsy-m0 examples/blinky1 - - tinygo build -o wasm.wasm -target=wasm examples/wasm @@ -47,9 +47,15 @@ LLD_SRC ?= llvm/tools/lld LLVM_COMPONENTS = all-targets analysis asmparser asmprinter bitreader bitwriter codegen core coroutines debuginfodwarf executionengine instrumentation interpreter ipo irreader linker lto mc mcjit objcarcopts option profiledata scalaropts support target -CLANG_LIBS = -Wl,--start-group $(abspath $(LLVM_BUILDDIR))/lib/libclang.a -lclangAnalysis -lclangARCMigrate -lclangAST -lclangASTMatchers -lclangBasic -lclangCodeGen -lclangCrossTU -lclangDriver -lclangDynamicASTMatchers -lclangEdit -lclangFormat -lclangFrontend -lclangFrontendTool -lclangHandleCXX -lclangHandleLLVM -lclangIndex -lclangLex -lclangParse -lclangRewrite -lclangRewriteFrontend -lclangSema -lclangSerialization -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangStaticAnalyzerFrontend -lclangTooling -lclangToolingASTDiff -lclangToolingCore -lclangToolingInclusions -lclangToolingRefactor -Wl,--end-group -lstdc++ +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Linux) + START_GROUP = -Wl,--start-group + END_GROUP = -Wl,--end-group +endif + +CLANG_LIBS = $(START_GROUP) $(abspath $(LLVM_BUILDDIR))/lib/libclang.a -lclangAnalysis -lclangARCMigrate -lclangAST -lclangASTMatchers -lclangBasic -lclangCodeGen -lclangCrossTU -lclangDriver -lclangDynamicASTMatchers -lclangEdit -lclangFormat -lclangFrontend -lclangFrontendTool -lclangHandleCXX -lclangHandleLLVM -lclangIndex -lclangLex -lclangParse -lclangRewrite -lclangRewriteFrontend -lclangSema -lclangSerialization -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangStaticAnalyzerFrontend -lclangTooling -lclangToolingASTDiff -lclangToolingCore -lclangToolingInclusions -lclangToolingRefactor $(END_GROUP) -lstdc++ -LLD_LIBS = -Wl,--start-group -llldCOFF -llldCommon -llldCore -llldDriver -llldELF -llldMachO -llldMinGW -llldReaderWriter -llldWasm -llldYAML -Wl,--end-group +LLD_LIBS = $(START_GROUP) -llldCOFF -llldCommon -llldCore -llldDriver -llldELF -llldMachO -llldMinGW -llldReaderWriter -llldWasm -llldYAML $(END_GROUP) # For static linking. @@ -1,6 +1,5 @@ # TinyGo - Go compiler for small places -[![Travis CI](https://travis-ci.com/tinygo-org/tinygo.svg?branch=dev)](https://travis-ci.com/tinygo-org/tinygo) [![CircleCI](https://circleci.com/gh/tinygo-org/tinygo/tree/dev.svg?style=svg)](https://circleci.com/gh/tinygo-org/tinygo/tree/dev) TinyGo is a Go compiler intended for use in small places such as microcontrollers, WebAssembly (WASM), and command-line tools. |