version: 2.1 commands: submodules: steps: - run: name: "Pull submodules" command: git submodule update --init llvm-source-linux: steps: - restore_cache: keys: - llvm-source-18-v1 - run: name: "Fetch LLVM source" command: make llvm-source - save_cache: key: llvm-source-18-v1 paths: - llvm-project/clang/lib/Headers - llvm-project/clang/include - llvm-project/compiler-rt - 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-v3 - run: name: "Build Binaryen" command: | make binaryen - save_cache: key: binaryen-linux-v3 paths: - build/wasm-opt test-linux: parameters: llvm: type: string fmt-check: type: boolean default: true steps: - checkout - submodules - run: name: "Install apt dependencies" command: | echo 'deb https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-<> main' > /etc/apt/sources.list.d/llvm.list wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - apt-get update apt-get install --no-install-recommends -y \ llvm-<>-dev \ clang-<> \ libclang-<>-dev \ lld-<> \ cmake \ ninja-build - hack-ninja-jobs - build-binaryen-linux - restore_cache: keys: - go-cache-v4-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - go-cache-v4-{{ checksum "go.mod" }} - llvm-source-linux - run: go install -tags=llvm<> . - restore_cache: keys: - wasi-libc-sysroot-systemclang-v7 - run: make wasi-libc - save_cache: key: wasi-libc-sysroot-systemclang-v7 paths: - lib/wasi-libc/sysroot - when: condition: <> steps: - run: # Do this before gen-device so that it doesn't check the # formatting of generated files. name: Check Go code formatting command: make fmt-check lint - run: make gen-device -j4 - run: make smoketest XTENSA=0 - save_cache: key: go-cache-v4-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths: - ~/.cache/go-build - /go/pkg/mod jobs: test-llvm15-go119: docker: - image: golang:1.19-bullseye steps: - test-linux: llvm: "15" # "make lint" fails before go 1.21 because internal/tools/go.mod specifies packages that require go 1.21 fmt-check: false resource_class: large test-llvm18-go123: docker: - image: golang:1.23-bullseye steps: - test-linux: llvm: "18" resource_class: large workflows: test-all: jobs: # This tests our lowest supported versions of Go and LLVM, to make sure at # least the smoke tests still pass. - test-llvm15-go119 # This tests LLVM 18 support when linking against system libraries. - test-llvm18-go123