| version: 2.1 |
| |
| setup: true |
| orbs: |
| continuation: circleci/continuation@1 |
| |
| jobs: |
| set-matrix: |
| executor: continuation/default |
| docker: |
| - image: cimg/base:current |
| resource_class: large |
| steps: |
| - checkout |
| - run: |
| name: Set matrix |
| command: | |
| MATRIX_JSON=$(python .github/workflows/ci_set_matrix.py) |
| echo "MATRIX_JSON=$MATRIX_JSON" |
| |
| BUILDSYSTEM_LIST=( |
| "cmake" |
| "make" |
| ) |
| |
| TOOLCHAIN_LIST=( |
| "aarch64-gcc" |
| "arm-clang" |
| "arm-gcc" |
| "esp-idf" |
| "ft9xx-gcc" |
| "msp430-gcc" |
| "riscv-gcc" |
| ) |
| |
| # only build IAR if not forked PR, since IAR token is not shared |
| if [ -z $CIRCLE_PR_USERNAME ]; then |
| TOOLCHAIN_LIST+=("arm-iar") |
| fi |
| |
| gen_build_entry() { |
| local build_system="$1" |
| local toolchain="$2" |
| local family="$3" |
| local build_args="" |
| |
| if [[ "$toolchain" == "arm-iar" || "$build_system" == "make" ]]; then |
| build_args="--one-random" |
| fi |
| |
| if [[ "$toolchain" == "esp-idf" ]]; then |
| echo " - build-vm:" >> .circleci/config2.yml |
| else |
| echo " - build:" >> .circleci/config2.yml |
| fi |
| echo " matrix:" >> .circleci/config2.yml |
| echo " alias: build-${build_system}-${toolchain}" >> .circleci/config2.yml |
| echo " parameters:" >> .circleci/config2.yml |
| echo " build-system: ['$build_system']" >> .circleci/config2.yml |
| echo " toolchain: ['$toolchain']" >> .circleci/config2.yml |
| echo " family: $family" >> .circleci/config2.yml |
| echo " resource_class: ['large']" >> .circleci/config2.yml |
| echo " build-args: ['$build_args']" >> .circleci/config2.yml |
| } |
| |
| # Collect all build aliases for code-metrics requires (cmake only, exclude esp-idf) |
| BUILD_ALIASES=() |
| |
| for build_system in "${BUILDSYSTEM_LIST[@]}"; do |
| for toolchain in "${TOOLCHAIN_LIST[@]}"; do |
| # make does not support these toolchains |
| if [ "$build_system" == "make" ] && { [ "$toolchain" == "arm-clang" ] || [ "$toolchain" == "arm-iar" ] || [ "$toolchain" == "esp-idf" ]; }; then |
| continue |
| fi |
| |
| FAMILY=$(echo $MATRIX_JSON | jq -r ".\"$toolchain\"") |
| echo "FAMILY_${toolchain}=$FAMILY" |
| gen_build_entry "$build_system" "$toolchain" "$FAMILY" |
| |
| # Only add cmake builds: excluding esp-idf or build_args="--one-random" to metrics requirements |
| if [ "$build_system" == "cmake" ] && [ "$toolchain" != "esp-idf" ] && [ "$toolchain" != "arm-iar" ]; then |
| BUILD_ALIASES+=("build-${build_system}-${toolchain}") |
| fi |
| done |
| done |
| |
| # Add code-metrics job that requires all build jobs |
| echo " - code-metrics:" >> .circleci/config2.yml |
| echo " requires:" >> .circleci/config2.yml |
| for alias in "${BUILD_ALIASES[@]}"; do |
| echo " - $alias" >> .circleci/config2.yml |
| done |
| |
| - continuation/continue: |
| configuration_path: .circleci/config2.yml |
| |
| workflows: |
| set-matrix: |
| jobs: |
| - set-matrix |