name: Reusable build util on: workflow_call: inputs: build-system: required: true type: string toolchain: required: true type: string build-args: required: true type: string build-options: required: false default: '' type: string upload-artifacts: required: false default: false type: boolean upload-metrics: required: false default: false type: boolean os: required: false type: string default: 'ubuntu-latest' jobs: family: runs-on: ${{ inputs.os }} strategy: fail-fast: false matrix: arg: ${{ fromJSON(inputs.build-args) }} steps: - name: Checkout TinyUSB uses: actions/checkout@v6 - name: Setup Toolchain id: setup-toolchain uses: ./.github/actions/setup_toolchain with: toolchain: ${{ inputs.toolchain }} - name: Get Dependencies uses: ./.github/actions/get_deps with: arg: ${{ matrix.arg }} - name: Build env: IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }} TOOLCHAIN: ${{ inputs.toolchain }} run: | if [ "$TOOLCHAIN" == "esp-idf" ]; then docker run --rm -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py ${{ matrix.arg }} elif [ "${{ inputs.build-system }}" == "cmake-make" ] || [ "${{ inputs.build-system }}" == "make-cmake" ]; then python tools/build.py -s make ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }} python tools/build.py -s cmake ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }} else python tools/build.py -s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }} fi shell: bash - name: Upload Artifacts for Metrics if: ${{ inputs.upload-metrics }} uses: actions/upload-artifact@v5 with: name: metrics-${{ matrix.arg }} path: cmake-build/cmake-build-*/metrics.json - name: Copy linker scripts for artifacts if: ${{ inputs.upload-artifacts }} run: | for dir in cmake-build/cmake-build-*; do board=$(basename "$dir" | sed 's/cmake-build-//') ld_path=$(jq -r --arg b "$board" '.targets[] | select(.board == $b) | .ld // empty' .github/membrowse-targets.json) if [ -n "$ld_path" ] && [ -f "$ld_path" ]; then mkdir -p "cmake-build/$(dirname "$ld_path")" cp "$ld_path" "cmake-build/$ld_path" fi done shell: bash - name: Upload Artifacts for Hardware Testing if: ${{ inputs.upload-artifacts }} uses: actions/upload-artifact@v5 with: name: binaries-${{ matrix.arg }} path: | cmake-build/cmake-build-*/*/*/*.elf cmake-build/cmake-build-*/*/*/*.bin cmake-build/cmake-build-*/*/*/*.bin cmake-build/cmake-build-*/*/*/bootloader/bootloader.bin cmake-build/cmake-build-*/*/*/partition_table/partition-table.bin cmake-build/cmake-build-*/*/*/config.env cmake-build/cmake-build-*/*/*/flash_args cmake-build/hw/mcu/**/*.ld