summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2025-12-03 09:57:49 +0700
committerhathach <[email protected]>2025-12-03 11:00:57 +0700
commitee3d3e3551f95757b85de1c2c9777a1daed8f78d (patch)
treeed935ea67c67eba98ab29e0d9dcddc52e89b3137
parent3d190475ad2b71d913e059dfc6f5cc5dafe6555d (diff)
upload metrics.json and aggregate code metrics, fine tune ci matrix run
-rw-r--r--.github/workflows/build.yml26
-rw-r--r--.github/workflows/build_util.yml12
-rwxr-xr-x.github/workflows/ci_set_matrix.py18
-rwxr-xr-xtools/build.py13
-rwxr-xr-xtools/get_deps.py2
5 files changed, 46 insertions, 25 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7d7901c3a..5e996d9d9 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -57,11 +57,10 @@ jobs:
echo "hil_matrix=$HIL_MATRIX_JSON" >> $GITHUB_OUTPUT
# ---------------------------------------
- # Build CMake: only build on push with one-per-family.
+ # Build CMake: only one-per-family.
# Full built is done by CircleCI in PR
# ---------------------------------------
cmake:
- if: github.event_name == 'push'
needs: set-matrix
uses: ./.github/workflows/build_util.yml
strategy:
@@ -71,7 +70,7 @@ jobs:
- 'aarch64-gcc'
#- 'arm-clang'
- 'arm-gcc'
- - 'esp-idf'
+ # - 'esp-idf'
- 'msp430-gcc'
- 'riscv-gcc'
with:
@@ -79,6 +78,27 @@ jobs:
toolchain: ${{ matrix.toolchain }}
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
one-per-family: true
+ upload-metrics: true
+
+ code-metrics:
+ needs: cmake
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout TinyUSB
+ uses: actions/checkout@v4
+
+ - name: Download Artifacts
+ uses: actions/download-artifact@v5
+ with:
+ pattern: metrics-*
+ path: cmake-build
+ merge-multiple: true
+
+ - name: Aggregate Code Metrics
+ run: |
+ tree cmake-build
+ python tools/get_deps.py
+ python tools/metrics.py -f tinyusb/src cmake-build/*/metrics.json
# ---------------------------------------
# Build Make: only build on push with one-per-family
diff --git a/.github/workflows/build_util.yml b/.github/workflows/build_util.yml
index 848694597..2de0ed229 100644
--- a/.github/workflows/build_util.yml
+++ b/.github/workflows/build_util.yml
@@ -20,6 +20,10 @@ on:
required: false
default: false
type: boolean
+ upload-metrics:
+ required: false
+ default: false
+ type: boolean
os:
required: false
type: string
@@ -70,17 +74,17 @@ jobs:
shell: bash
- name: Upload Artifacts for Metrics
- if: inputs.build-system == 'cmake'
+ if: ${{ inputs.upload-metrics }}
uses: actions/upload-artifact@v4
with:
- name: ${{ matrix.arg }}-metrics
+ name: metrics-${{ matrix.arg }}
path: cmake-build/cmake-build-*/metrics.json
- name: Upload Artifacts for Hardware Testing
if: ${{ inputs.upload-artifacts }}
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
- name: ${{ matrix.arg }}-binaries
+ name: binaries-${{ matrix.arg }}
path: |
cmake-build/cmake-build-*/*/*/*.elf
cmake-build/cmake-build-*/*/*/*.bin
diff --git a/.github/workflows/ci_set_matrix.py b/.github/workflows/ci_set_matrix.py
index 9d0e42c2e..5032c83ae 100755
--- a/.github/workflows/ci_set_matrix.py
+++ b/.github/workflows/ci_set_matrix.py
@@ -15,28 +15,22 @@ toolchain_list = [
# family: [supported toolchain]
family_list = {
- "at32f402_405 at32f403a_407 at32f413 at32f415 at32f423 at32f425 at32f435_437": ["arm-gcc"],
- "broadcom_32bit": ["arm-gcc"],
+ "at32f402_405 at32f403a_407 at32f413 at32f415 at32f423 at32f425 at32f435_437 broadcom_32bit da1469x": ["arm-gcc"],
"broadcom_64bit": ["aarch64-gcc"],
"ch32v10x ch32v20x ch32v30x fomu gd32vf103": ["riscv-gcc"],
- "da1469x": ["arm-gcc"],
"imxrt": ["arm-gcc", "arm-clang"],
"kinetis_k kinetis_kl kinetis_k32l2": ["arm-gcc", "arm-clang"],
"lpc11 lpc13 lpc15": ["arm-gcc", "arm-clang"],
"lpc17 lpc18 lpc40 lpc43": ["arm-gcc", "arm-clang"],
"lpc51 lpc54 lpc55": ["arm-gcc", "arm-clang"],
- "maxim": ["arm-gcc"],
- "mcx": ["arm-gcc"],
- "mm32": ["arm-gcc"],
+ "maxim mcx mm32 msp432e4 tm4c": ["arm-gcc"],
"msp430": ["msp430-gcc"],
- "msp432e4 tm4c": ["arm-gcc"],
"nrf": ["arm-gcc", "arm-clang"],
- "nuc100_120 nuc121_125 nuc126 nuc505": ["arm-gcc"],
+ "nuc100_120 nuc121_125 nuc126 nuc505 xmc4000": ["arm-gcc"],
"ra": ["arm-gcc"],
"rp2040": ["arm-gcc"],
"rx": ["rx-gcc"],
- "samd11 samd2x_l2x": ["arm-gcc", "arm-clang"],
- "samd5x_e5x samg": ["arm-gcc", "arm-clang"],
+ "samd11 samd2x_l2x samd5x_e5x samg": ["arm-gcc", "arm-clang"],
"stm32c0 stm32f0 stm32f1 stm32f2 stm32f3": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32f4": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32f7": ["arm-gcc", "arm-clang", "arm-iar"],
@@ -45,9 +39,7 @@ family_list = {
"stm32h7rs": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32l0 stm32l4": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32n6": ["arm-gcc"],
- "stm32u0 stm32u5 stm32wb": ["arm-gcc", "arm-clang", "arm-iar"],
- "stm32wba": ["arm-gcc", "arm-clang"],
- "xmc4000": ["arm-gcc"],
+ "stm32u0 stm32u5 stm32wb stm32wba": ["arm-gcc", "arm-clang", "arm-iar"],
"-bespressif_s2_devkitc": ["esp-idf"],
# S3, P4 will be built by hil test
# "-bespressif_s3_devkitm": ["esp-idf"],
diff --git a/tools/build.py b/tools/build.py
index 5392a9aa4..b87af6c6a 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -6,8 +6,6 @@ import sys
import time
import subprocess
import shlex
-import glob
-import metrics
from pathlib import Path
from multiprocessing import Pool
@@ -26,6 +24,7 @@ build_separator = '-' * 95
build_status = [STATUS_OK, STATUS_FAILED, STATUS_SKIPPED]
verbose = False
+clean_build = False
parallel_jobs = os.cpu_count()
# -----------------------------
@@ -117,11 +116,13 @@ def cmake_board(board, build_args, build_flags_on):
f'-DBOARD={board}', '-DCMAKE_BUILD_TYPE=MinSizeRel', '-DLINKERMAP_OPTION=-q -f tinyusb/src',
*build_args, *build_flags])
if rcmd.returncode == 0:
+ if clean_build:
+ run_cmd(["cmake", "--build", build_dir, '--target', 'clean'])
cmd = ["cmake", "--build", build_dir, '--parallel', str(parallel_jobs)]
rcmd = run_cmd(cmd)
if rcmd.returncode == 0:
ret[0] += 1
- rcmd = run_cmd(["cmake", "--build", build_dir, '--target', 'tinyusb_examples_metrics'])
+ run_cmd(["cmake", "--build", build_dir, '--target', 'tinyusb_examples_metrics'])
# print(rcmd.stdout.decode("utf-8"))
else:
ret[1] += 1
@@ -148,7 +149,8 @@ def make_one_example(example, board, make_option):
if make_option:
make_args += shlex.split(make_option)
make_args.append("all")
- # run_cmd(make_args + ["clean"])
+ if clean_build:
+ run_cmd(make_args + ["clean"])
build_result = run_cmd(make_args)
r = 0 if build_result.returncode == 0 else 1
print_build_result(board, example, r, time.monotonic() - start_time)
@@ -235,11 +237,13 @@ def get_family_boards(family, one_per_family, boards):
# -----------------------------
def main():
global verbose
+ global clean_build
global parallel_jobs
parser = argparse.ArgumentParser()
parser.add_argument('families', nargs='*', default=[], help='Families to build')
parser.add_argument('-b', '--board', action='append', default=[], help='Boards to build')
+ parser.add_argument('-c', '--clean', action='store_true', default=False, help='Clean before build')
parser.add_argument('-t', '--toolchain', default='gcc', help='Toolchain to use, default is gcc')
parser.add_argument('-s', '--build-system', default='cmake', help='Build system to use, default is cmake')
parser.add_argument('-D', '--define-symbol', action='append', default=[], help='Define to pass to build system')
@@ -257,6 +261,7 @@ def main():
build_flags_on = args.build_flags_on
one_per_family = args.one_per_family
verbose = args.verbose
+ clean_build = args.clean
parallel_jobs = args.jobs
build_defines.append(f'TOOLCHAIN={toolchain}')
diff --git a/tools/get_deps.py b/tools/get_deps.py
index fe2f51e01..9634451e2 100755
--- a/tools/get_deps.py
+++ b/tools/get_deps.py
@@ -15,7 +15,7 @@ deps_mandatory = {
'159e31b689577dbf69cf0683bbaffbd71fa5ee10',
'all'],
'tools/linkermap': ['https://github.com/hathach/linkermap.git',
- '87f94869f9ff828812f4551138f82c3bfcaf2620',
+ '46c3c2947db366fb66af6723709febf80d860bc1',
'all'],
'tools/uf2': ['https://github.com/microsoft/uf2.git',
'c594542b2faa01cc33a2b97c9fbebc38549df80a',