version: 2.1 commands: submodules: steps: - run: name: "Pull submodules" command: git submodule update --init install-xtensa-toolchain: parameters: variant: type: string steps: - run: name: "Install Xtensa toolchain" command: | curl -L https://github.com/espressif/crosstool-NG/releases/download/esp-2020r2/xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<>.tar.gz -o xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<>.tar.gz sudo tar -C /usr/local -xf xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<>.tar.gz sudo ln -s /usr/local/xtensa-esp32-elf/bin/xtensa-esp32-elf-ld /usr/local/bin/xtensa-esp32-elf-ld rm xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<>.tar.gz llvm-source-linux: steps: - restore_cache: keys: - llvm-source-12-v1 - run: name: "Fetch LLVM source" command: make llvm-source - save_cache: key: llvm-source-12-v1 paths: - llvm-project/clang/lib/Headers - llvm-project/clang/include - llvm-project/lld/include - llvm-project/llvm/include hack-ninja-jobs: steps: - run: name: "Hack Ninja to use less jobs" command: | echo -e '#!/bin/sh\n/usr/bin/ninja -j3 "$@"' > /go/bin/ninja chmod +x /go/bin/ninja build-binaryen-linux: steps: - restore_cache: keys: - binaryen-linux-v1 - run: name: "Build Binaryen" command: | make binaryen - save_cache: key: binaryen-linux-v1 paths: - build/wasm-opt test-linux: parameters: llvm: type: string steps: - checkout - submodules - 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 --no-install-recommends \ llvm-<>-dev \ clang-<> \ libclang-<>-dev \ lld-<> \ gcc-avr \ avr-libc \ cmake \ ninja-build - hack-ninja-jobs - build-binaryen-linux - 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 -tags=llvm<> . - restore_cache: keys: - wasi-libc-sysroot-systemclang-v3 - run: make wasi-libc - save_cache: key: wasi-libc-sysroot-systemclang-v3 paths: - lib/wasi-libc/sysroot - run: make gen-device -j4 - run: make smoketest XTENSA=0 - save_cache: key: go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - /go/pkg/mod - run: make fmt-check build-macos: steps: - checkout - submodules - run: name: "Install dependencies" command: | curl https://dl.google.com/go/go1.17.darwin-amd64.tar.gz -o go1.17.darwin-amd64.tar.gz sudo tar -C /usr/local -xzf go1.17.darwin-amd64.tar.gz ln -s /usr/local/go/bin/go /usr/local/bin/go HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake ninja - install-xtensa-toolchain: variant: "macos" - restore_cache: keys: - go-cache-macos-v3-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - go-cache-macos-v3-{{ checksum "go.mod" }} - restore_cache: keys: - llvm-source-12-macos-v1 - run: name: "Fetch LLVM source" command: make llvm-source - save_cache: key: llvm-source-12-macos-v1 paths: - llvm-project/clang/lib/Headers - llvm-project/clang/include - llvm-project/lld/include - llvm-project/llvm/include - restore_cache: keys: - llvm-build-12-macos-v1 - run: name: "Build LLVM" command: | if [ ! -f llvm-build/lib/liblldELF.a ] then # fetch LLVM source (may only have headers right now) rm -rf llvm-project make llvm-source # build! make llvm-build find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \; fi - save_cache: key: llvm-build-12-macos-v1 paths: llvm-build - restore_cache: keys: - binaryen-macos-v1 - run: name: "Build Binaryen" command: | if [ ! -f build/wasm-opt ] then make binaryen fi - save_cache: key: binaryen-macos-v1 paths: - build/wasm-opt - restore_cache: keys: - wasi-libc-sysroot-macos-v4 - run: name: "Build wasi-libc" command: make wasi-libc - save_cache: key: wasi-libc-sysroot-macos-v4 paths: - lib/wasi-libc/sysroot - run: name: "Test TinyGo" command: make test GOTESTFLAGS="-v -short" no_output_timeout: 20m - 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: make tinygo-test - run: make smoketest AVR=0 - save_cache: key: go-cache-macos-v3-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - /go/pkg/mod jobs: test-llvm11-go115: docker: - image: circleci/golang:1.15-buster steps: - test-linux: llvm: "11" test-llvm12-go116: docker: - image: circleci/golang:1.16-buster steps: - test-linux: llvm: "12" build-macos: macos: xcode: "11.1.0" # macOS 10.14 steps: - build-macos workflows: test-all: jobs: - test-llvm11-go115 - test-llvm12-go116 - build-macos