72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os
|
||
|
from collections import OrderedDict
|
||
|
import subprocess
|
||
|
import re
|
||
|
|
||
|
toolchain_dir = "/opt/arm"
|
||
|
toolchains = os.listdir(toolchain_dir)
|
||
|
|
||
|
gcc_versions = OrderedDict()
|
||
|
|
||
|
for toolchain in toolchains:
|
||
|
fullpath = os.path.join(toolchain_dir, toolchain)
|
||
|
gcc_path = os.path.join(fullpath, "bin/arm-none-eabi-gcc")
|
||
|
version = subprocess.run([gcc_path, "--version"], capture_output=True)
|
||
|
stdout = version.stdout.decode('utf-8')
|
||
|
stderr = version.stderr.decode('utf-8')
|
||
|
assert(len(stderr) == 0)
|
||
|
# Version should be on first line
|
||
|
version_line = stdout.split("\n")[0]
|
||
|
m = re.search("(\d+\.\d+\.\d+)", version_line)
|
||
|
assert(m is not None)
|
||
|
version = m.group(1)
|
||
|
|
||
|
if version in gcc_versions:
|
||
|
raise Exception("Already have version {} in versions current path {}, this path {}".format(version, gcc_versions[version], fullpath))
|
||
|
|
||
|
gcc_versions[version] = fullpath
|
||
|
|
||
|
# Sort by major version
|
||
|
gcc_versions_sorted = OrderedDict(sorted(gcc_versions.items(), key=lambda item: int(item[0].replace(".", ""))))
|
||
|
|
||
|
|
||
|
# Create output
|
||
|
output = '''
|
||
|
name: Multi GCC
|
||
|
on: [workflow_dispatch, push, pull_request]
|
||
|
|
||
|
jobs:
|
||
|
build:
|
||
|
if: github.repository_owner == 'raspberrypi'
|
||
|
runs-on: [self-hosted, Linux, X64]
|
||
|
|
||
|
steps:
|
||
|
- name: Clean workspace
|
||
|
run: |
|
||
|
echo "Cleaning up previous run"
|
||
|
rm -rf "${{ github.workspace }}"
|
||
|
mkdir -p "${{ github.workspace }}"
|
||
|
|
||
|
- name: Checkout repo
|
||
|
uses: actions/checkout@v2
|
||
|
|
||
|
- name: Checkout submodules
|
||
|
run: git submodule update --init
|
||
|
|
||
|
- name: Get core count
|
||
|
id: core_count
|
||
|
run : cat /proc/cpuinfo | grep processor | wc -l
|
||
|
'''
|
||
|
|
||
|
for gcc_version, toolchain_path in gcc_versions_sorted.items():
|
||
|
for build_type in ["Debug", "Release"]:
|
||
|
output += "\n"
|
||
|
output += " - name: GCC {} {}\n".format(gcc_version, build_type)
|
||
|
output += " if: always()\n"
|
||
|
output += " shell: bash\n"
|
||
|
output += " run: cd ${{{{github.workspace}}}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE={} -DPICO_TOOLCHAIN_PATH={} -DPICO_BOARD=pico_w; make -j ${{{{steps.core_count.outputs.output}}}}\n".format(build_type, toolchain_path)
|
||
|
|
||
|
print(output)
|