CI: added ccache test
This commit is contained in:
parent
ada6554578
commit
6b962ae48b
33
.github/workflows/test_ccache.yml
vendored
Normal file
33
.github/workflows/test_ccache.yml
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
name: test ccache
|
||||
|
||||
on: [push, pull_request, workflow_dispatch]
|
||||
# paths:
|
||||
# - "*"
|
||||
# - "!README.md" <-- don't rebuild on doc change
|
||||
concurrency:
|
||||
group: ci-${{github.workflow}}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-20.04
|
||||
container: ardupilot/ardupilot-dev-${{ matrix.toolchain }}:latest
|
||||
strategy:
|
||||
fail-fast: false # don't cancel if a job from the matrix fails
|
||||
matrix:
|
||||
toolchain: [
|
||||
chibios,
|
||||
]
|
||||
gcc: [10]
|
||||
steps:
|
||||
# git checkout the PR
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
- name: ccache test
|
||||
shell: bash
|
||||
run: |
|
||||
PATH="/usr/lib/ccache:/opt/gcc-arm-none-eabi-${{matrix.gcc}}/bin:$PATH"
|
||||
Tools/scripts/build_tests/test_ccache.py --boards MatekF405,MatekF405-bdshot --min-cache-pct=75
|
||||
Tools/scripts/build_tests/test_ccache.py --boards CubeOrange,Durandal --min-cache-pct=75
|
||||
|
58
Tools/scripts/build_tests/test_ccache.py
Executable file
58
Tools/scripts/build_tests/test_ccache.py
Executable file
@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python3
|
||||
# test ccache efficiency building two similar boards
|
||||
# AP_FLAKE8_CLEAN
|
||||
|
||||
import subprocess
|
||||
import re
|
||||
import argparse
|
||||
import sys
|
||||
import os
|
||||
|
||||
parser = argparse.ArgumentParser(description='test ccache performance')
|
||||
parser.add_argument('--boards', default='MatekF405,MatekF405-bdshot', help='boards to test')
|
||||
parser.add_argument('--min-cache-pct', type=int, default=75, help='minimum acceptable ccache hit rate')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
def ccache_stats():
|
||||
'''return hits/misses from ccache -s'''
|
||||
hits = 0
|
||||
miss = 0
|
||||
stats = str(subprocess.Popen(["ccache", "-s"], stdout=subprocess.PIPE).communicate()[0], encoding='ascii')
|
||||
for line in stats.split('\n'):
|
||||
m = re.match(r"cache.hit\D*(\d+)$", line)
|
||||
if m is not None:
|
||||
hits += int(m.group(1))
|
||||
m = re.match(r"cache.miss\D*(\d+)", line)
|
||||
if m is not None:
|
||||
miss += int(m.group(1))
|
||||
return (hits, miss)
|
||||
|
||||
|
||||
def build_board(boardname):
|
||||
subprocess.run(["./waf", "configure", "--board", boardname])
|
||||
subprocess.run(["./waf", "clean", "copter"])
|
||||
|
||||
|
||||
boards = args.boards.split(",")
|
||||
if len(boards) != 2:
|
||||
print(boards)
|
||||
print("Must specify exactly 2 boards (comma separated)")
|
||||
sys.exit(1)
|
||||
|
||||
os.environ['CCACHE_DIR'] = os.path.join(os.getcwd(), 'build', 'ccache')
|
||||
subprocess.run(["ccache", "-C", "-z"])
|
||||
build_board(boards[0])
|
||||
subprocess.run(["ccache", "-z"])
|
||||
build_board(boards[1])
|
||||
subprocess.run(["ccache", "-s"])
|
||||
|
||||
post = ccache_stats()
|
||||
hit_pct = 100 * post[0] / float(post[0]+post[1])
|
||||
print("ccache hit percentage: %.1f%% %s" % (hit_pct, post))
|
||||
if hit_pct < args.min_cache_pct:
|
||||
print("ccache hits too low, need %d%%" % args.min_cache_pct)
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("ccache hits good")
|
Loading…
Reference in New Issue
Block a user