-
Notifications
You must be signed in to change notification settings - Fork 972
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CI Improvements. Add multi-gcc workflow that tests each ARM GCC avail…
…able (#1192)
- Loading branch information
1 parent
248fc72
commit 0cfeec2
Showing
3 changed files
with
226 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
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 | ||
|
||
- name: GCC 6.2.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-6_2-2016q4 -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 6.2.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-6_2-2016q4 -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 6.3.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-6-2017-q2-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 6.3.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-6-2017-q2-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 7.2.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-7-2017-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 7.2.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-7-2017-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 7.3.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-7-2018-q2-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 7.3.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-7-2018-q2-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 8.2.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-8-2018-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 8.2.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-8-2018-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 8.3.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-8-2019-q3-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 8.3.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-8-2019-q3-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 9.2.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-9-2019-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 9.2.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-9-2019-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 9.3.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-9-2020-q2-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 9.3.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-9-2020-q2-update -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 10.2.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-10-2020-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 10.2.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-10-2020-q4-major -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 10.3.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-10.3-2021.10 -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 10.3.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-none-eabi-10.3-2021.10 -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 11.2.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 11.2.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 11.3.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 11.3.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 12.2.1 Debug | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Debug -DPICO_TOOLCHAIN_PATH=/opt/arm/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} | ||
|
||
- name: GCC 12.2.1 Release | ||
if: always() | ||
shell: bash | ||
run: cd ${{github.workspace}}; mkdir -p build; rm -rf build/*; cd build; cmake ../ -DPICO_SDK_TESTS_ENABLED=1 -DCMAKE_BUILD_TYPE=Release -DPICO_TOOLCHAIN_PATH=/opt/arm/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi -DPICO_BOARD=pico_w; make -j ${{steps.core_count.outputs.output}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
#!/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) |