version: 2.1 commands: submodules: steps: - run: name: "Pull submodules" command: git submodule update --init apt-dependencies: parameters: llvm: type: string steps: - run: name: "Install apt dependencies" command: | echo 'deb https://apt.llvm.org/buster/ llvm-toolchain-buster<> main' | sudo tee /etc/apt/sources.list.d/llvm.list wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - sudo apt-get update sudo apt-get install \ llvm<>-dev \ clang<> \ libclang<>-dev \ lld<> \ gcc-arm-linux-gnueabihf \ gcc-aarch64-linux-gnu \ qemu-system-arm \ qemu-user \ gcc-avr \ avr-libc install-node: steps: - run: name: "Install node.js" command: | wget https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-x64.tar.xz sudo tar -C /usr/local -xf node-v10.15.1-linux-x64.tar.xz sudo ln -s /usr/local/node-v10.15.1-linux-x64/bin/node /usr/bin/node rm node-v10.15.1-linux-x64.tar.xz llvm-source-linux: steps: - restore_cache: keys: - llvm-source-9-v0 - run: name: "Fetch LLVM source" command: make llvm-source - save_cache: key: llvm-source-9-v0 paths: - llvm-project build-wasi-libc: steps: - restore_cache: keys: - wasi-libc-sysroot-v1 - run: name: "Build wasi-libc" command: make wasi-libc - save_cache: key: wasi-libc-sysroot-v1 paths: - lib/wasi-libc/sysroot test-linux: steps: - checkout - submodules - apt-dependencies: llvm: "-9" - install-node - restore_cache: keys: - go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - go-cache-v2-{{ checksum "go.mod" }} - llvm-source-linux - run: go install . - restore_cache: keys: - wasi-libc-sysroot-systemclang-v0 - run: make wasi-libc - save_cache: key: wasi-libc-sysroot-systemclang-v0 paths: - lib/wasi-libc/sysroot - run: go test -v ./cgo ./compileopts ./interp ./transform . - run: make gen-device -j4 - run: make smoketest - save_cache: key: go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - ~/.cache/tinygo - /go/pkg/mod - run: make fmt-check assert-test-linux: steps: - checkout - submodules - run: name: "Install apt dependencies" command: | sudo apt-get install \ gcc-arm-linux-gnueabihf \ binutils-arm-none-eabi \ libc6-dev-armel-cross \ gcc-aarch64-linux-gnu \ libc6-dev-arm64-cross \ qemu-system-arm \ qemu-user \ gcc-avr \ avr-libc - install-node - restore_cache: keys: - go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - go-cache-v2-{{ checksum "go.mod" }} - llvm-source-linux - restore_cache: keys: - llvm-build-9-linux-v0-assert - run: name: "Build LLVM" command: | if [ ! -f llvm-build/lib/liblldELF.a ] then # install dependencies sudo apt-get install cmake clang ninja-build # make build faster export CC=clang export CXX=clang++ # hack ninja to use less jobs echo -e '#!/bin/sh\n/usr/bin/ninja -j3 "$@"' > /go/bin/ninja chmod +x /go/bin/ninja # build! make ASSERT=1 llvm-build fi - save_cache: key: llvm-build-9-linux-v0-assert paths: llvm-build - run: make ASSERT=1 - build-wasi-libc - run: name: "Test TinyGo" command: make ASSERT=1 test - save_cache: key: go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - ~/.cache/tinygo - /go/pkg/mod - run: make gen-device -j4 - run: make smoketest TINYGO=build/tinygo build-linux: steps: - checkout - submodules - run: name: "Install apt dependencies" command: | sudo apt-get install \ gcc-arm-linux-gnueabihf \ binutils-arm-none-eabi \ libc6-dev-armel-cross \ gcc-aarch64-linux-gnu \ libc6-dev-arm64-cross \ qemu-system-arm \ qemu-user \ gcc-avr \ avr-libc - install-node - restore_cache: keys: - go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - go-cache-v2-{{ checksum "go.mod" }} - llvm-source-linux - restore_cache: keys: - llvm-build-9-linux-v0 - run: name: "Build LLVM" command: | if [ ! -f llvm-build/lib/liblldELF.a ] then # install dependencies sudo apt-get install cmake clang ninja-build # make build faster export CC=clang export CXX=clang++ # hack ninja to use less jobs echo -e '#!/bin/sh\n/usr/bin/ninja -j3 "$@"' > /go/bin/ninja chmod +x /go/bin/ninja # build! make llvm-build fi - save_cache: key: llvm-build-9-linux-v0 paths: llvm-build - build-wasi-libc - run: name: "Test TinyGo" command: make test - run: name: "Build TinyGo release" command: | make release -j3 cp -p build/release.tar.gz /tmp/tinygo.linux-amd64.tar.gz - store_artifacts: path: /tmp/tinygo.linux-amd64.tar.gz - save_cache: key: go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - ~/.cache/tinygo - /go/pkg/mod - run: name: "Extract release tarball" command: | mkdir -p ~/lib tar -C ~/lib -xf /tmp/tinygo.linux-amd64.tar.gz ln -s ~/lib/tinygo/bin/tinygo /go/bin/tinygo tinygo version - run: make smoketest build-macos: steps: - checkout - submodules - run: name: "Install dependencies" command: | curl https://dl.google.com/go/go1.13.darwin-amd64.tar.gz -o go1.13.darwin-amd64.tar.gz sudo tar -C /usr/local -xzf go1.13.darwin-amd64.tar.gz ln -s /usr/local/go/bin/go /usr/local/bin/go HOMEBREW_NO_AUTO_UPDATE=1 brew install qemu - restore_cache: keys: - go-cache-macos-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - go-cache-macos-v2-{{ checksum "go.mod" }} - restore_cache: keys: - llvm-source-9-macos-v0 - run: name: "Fetch LLVM source" command: make llvm-source - save_cache: key: llvm-source-9-macos-v0 paths: - llvm-project - restore_cache: keys: - llvm-build-9-macos-v0 - 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-9-macos-v0 paths: llvm-build - restore_cache: keys: - wasi-libc-sysroot-macos-v1 - run: name: "Build wasi-libc" command: make wasi-libc - save_cache: key: wasi-libc-sysroot-macos-v1 paths: - lib/wasi-libc/sysroot - run: name: "Test TinyGo" command: make 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 - run: name: "Download SiFive GNU toolchain" command: | curl -O https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.2.0-2019.05.3-x86_64-apple-darwin.tar.gz sudo tar -C /usr/local --strip-components=1 -xf riscv64-unknown-elf-gcc-8.2.0-2019.05.3-x86_64-apple-darwin.tar.gz - run: make smoketest AVR=0 - save_cache: key: go-cache-macos-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - ~/.cache/tinygo - /go/pkg/mod jobs: test-llvm9-go111: docker: - image: circleci/golang:1.11-buster steps: - test-linux test-llvm9-go112: docker: - image: circleci/golang:1.12-buster steps: - test-linux test-llvm9-go113: docker: - image: circleci/golang:1.13-buster steps: - test-linux assert-test-linux: docker: - image: circleci/golang:1.13-stretch steps: - assert-test-linux build-linux: docker: - image: circleci/golang:1.13-stretch steps: - build-linux build-macos: macos: xcode: "10.1.0" steps: - build-macos workflows: test-all: jobs: - test-llvm9-go111 - test-llvm9-go112 - test-llvm9-go113 - build-linux - build-macos - assert-test-linux