version: 2.1 commands: setup-toolchain: parameters: toolchain: type: string steps: - run: name: Set toolchain url and key command: | TOOLCHAIN_JSON='{ "aarch64-gcc": "https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz", "arm-clang": "https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-17.0.1/LLVMEmbeddedToolchainForArm-17.0.1-Linux-x86_64.tar.xz", "arm-gcc": "https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v12.3.1-1.1/xpack-arm-none-eabi-gcc-12.3.1-1.1-linux-x64.tar.gz", "msp430-gcc": "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2", "riscv-gcc": "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-linux-x64.tar.gz", "rx-gcc": "https://llvm-gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run" }' toolchain_url=$(echo $TOOLCHAIN_JSON | jq -r '.["<< parameters.toolchain >>"]') # only cache if not a github link if [[ $toolchain_url != "https://github.com"* ]]; then echo "<< parameters.toolchain >>-$toolchain_url" > toolchain_key fi echo "export toolchain_url=$toolchain_url" >> $BASH_ENV - restore_cache: name: Restore Toolchain Cache key: deps-{{ checksum "toolchain_key" }} paths: - ~/cache/<< parameters.toolchain >> - run: name: Install Toolchain command: | # download if folder does not exist (not cached) if [ ! -d ~/cache/<< parameters.toolchain >> ]; then mkdir -p ~/cache/<< parameters.toolchain >> wget --progress=dot:giga $toolchain_url -O toolchain.tar.gz if [[ << parameters.toolchain >> == rx-gcc ]]; then mv toolchain.tar.gz toolchain.run chmod +x toolchain.run ./toolchain.run -p ~/cache/<< parameters.toolchain >>/gnurx -y else tar -C ~/cache/<< parameters.toolchain >> -xaf toolchain.tar.gz fi fi # Add toolchain to PATH echo "export PATH=$PATH:`echo ~/cache/<< parameters.toolchain >>/*/bin`" >> $BASH_ENV - save_cache: name: Save Toolchain Cache key: deps-{{ checksum "toolchain_key" }} paths: - ~/cache/<< parameters.toolchain >> build: parameters: build-system: type: string toolchain: type: string family: type: string steps: - checkout - run: name: Get Dependencies command: | python tools/get_deps.py << parameters.family >> # Install ninja if cmake build system if [ << parameters.build-system >> == "cmake" ]; then NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip wget $NINJA_URL -O ninja-linux.zip unzip ninja-linux.zip -d ~/bin fi # rx-gcc is 32-bit binary if [[ << parameters.toolchain >> == rx-gcc ]]; then sudo dpkg --add-architecture i386 sudo apt update sudo apt install libc6:i386 libstdc++6:i386 zlib1g:i386 fi # Install Pico SDK if [ << parameters.family >> == "rp2040" ]; then git clone --depth 1 https://github.com/raspberrypi/pico-sdk.git ~/pico-sdk echo "export PICO_SDK_PATH=~/pico-sdk" >> $BASH_ENV fi - when: condition: not: equal: [esp-idf, << parameters.toolchain >>] steps: - setup-toolchain: toolchain: << parameters.toolchain >> - run: name: Build command: | if [ << parameters.toolchain >> == esp-idf ]; then docker run --rm -v $PWD:/project -w /project espressif/idf:v5.3.1 python tools/build.py << parameters.family >> else # Toolchain option default is gcc if [ << parameters.toolchain >> == arm-clang ]; then TOOLCHAIN_OPTION="--toolchain clang" elif [ << parameters.toolchain >> == arm-gcc ]; then TOOLCHAIN_OPTION="--toolchain gcc" fi python tools/build.py -s << parameters.build-system >> $TOOLCHAIN_OPTION << parameters.family >> fi jobs: # Build using docker build: parameters: resource_class: type: string default: medium+ build-system: type: string toolchain: type: string family: type: string docker: - image: cimg/base:current resource_class: << parameters.resource_class >> steps: - build: build-system: << parameters.build-system >> toolchain: << parameters.toolchain >> family: << parameters.family >> # Build using VM build-vm: parameters: resource_class: type: string default: large build-system: type: string toolchain: type: string family: type: string machine: image: ubuntu-2404:current resource_class: << parameters.resource_class >> steps: - build: build-system: << parameters.build-system >> toolchain: << parameters.toolchain >> family: << parameters.family >> workflows: build: jobs: # - build: # matrix: # parameters: # toolchain: [ 'arm-gcc' ] # build-system: [ 'cmake' ] # family: [ 'nrf' ] # resource_class: ['large'] # - build-vm: # matrix: # parameters: # toolchain: ['esp-idf'] # build-system: ['cmake'] # family: ['-bespressif_kaluga_1'] # resource_class: ['large']