aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2019-04-05 13:45:02 +0200
committerRon Evans <[email protected]>2019-04-08 09:13:16 +0200
commit2e926789f59379d0afdbcd7abfe1dba38c335e2a (patch)
tree7135cd11a800fd8d9d5ebd574ccdb3f929c0c84d
parent38c3d0852e16e74f73723ae6e121feac22e871b3 (diff)
downloadtinygo-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.yml93
-rw-r--r--.travis.yml39
-rw-r--r--Makefile10
-rw-r--r--README.md1
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
diff --git a/Makefile b/Makefile
index 3012a4be9..763f67c33 100644
--- a/Makefile
+++ b/Makefile
@@ -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.
diff --git a/README.md b/README.md
index 6956a1c36..3327e7a39 100644
--- a/README.md
+++ b/README.md
@@ -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.