rusefi-1/.github/workflows/build-firmware.yaml

151 lines
5.2 KiB
YAML

name: Firmware CI
on: [push,pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
# Let all builds finish even if one fails early
fail-fast: false
matrix:
# What boards should we build for? In the 'include' section below,
# set up what each of these boards needs to build.
build-target: [frankenso, frankenso-pal, mre-f4, mre-f7, prometheus-405, prometheus-469, proteus-f4, proteus-f7, kinetis]
build-type: [debug, release]
include:
# Board configurations
- build-target: frankenso
efi-cpu: ARCH_STM32F4
efi-board: st_stm32f4
- build-target: frankenso-pal
efi-cpu: ARCH_STM32F4
efi-board: st_stm32f4
target-extra-params: -DHAL_TRIGGER_USE_PAL=TRUE -DEFI_ICU_INPUTS=FALSE -DEFI_VEHICLE_SPEED=FALSE -DEFI_LOGIC_ANALYZER=FALSE
- build-target: mre-f4
efi-cpu: ARCH_STM32F4
efi-board: microrusefi
- build-target: mre-f7
efi-cpu: ARCH_STM32F7
efi-board: microrusefi
- build-target: prometheus-405
efi-cpu: ARCH_STM32F4
efi-board: prometheus/f405
- build-target: prometheus-469
efi-cpu: ARCH_STM32F4
efi-board: prometheus/f469
- build-target: proteus-f4
efi-cpu: ARCH_STM32F4
efi-board: proteus
- build-target: proteus-f7
efi-cpu: ARCH_STM32F7
efi-board: proteus
- build-target: kinetis
efi-cpu: kinetis
efi-board: kinetis
target-extra-params: -DCPU_MKE16F512VLH16 -DCPU_MKE16F512VLH16_cm4 -D__USE_CMSI -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS
extra-options: USE_FATFS=no USE_BOOTLOADER=no
# Debug vs. release configuration
- build-type: debug
type-extra-params: -DDUMMY
build-debug-level-opt: -O0 -ggdb -g3
- build-type: release
type-extra-params: -DEFI_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_TRACE=FALSE -DCH_DBG_ENABLE_ASSERTS=FALSE -DCH_DBG_ENABLE_STACK_CHECK=FALSE -DCH_DBG_FILL_THREADS=FALSE -DCH_DBG_THREADS_PROFILING=FALSE
build-debug-level-opt: -O2 -ggdb -g3
# We don't need debug builds for every board...
exclude:
- build-target: frankenso-pal
build-type: debug
- build-target: mre-f4
build-type: debug
- build-target: mre-f7
build-type: debug
- build-target: prometheus-405
build-type: debug
- build-target: prometheus-469
build-type: debug
- build-target: proteus-f4
build-type: debug
- build-target: proteus-f7
build-type: debug
- build-target: kinetis
build-type: debug
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: Generate Configs
working-directory: ./firmware/
run: sh gen_config.sh
- name: Generate Live Documentation
working-directory: ./firmware/
run: sh gen_live_documentation.sh
# Build machines don't have arm-none-eabi gcc, so let's download it and put it on the path
- name: Download & Install GCC
run: | # Compiler hosted on our other git repo - avoids having to download from the nice folks at ARM every time
wget 'https://github.com/rusefi/build_support/raw/master/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.xz' -O compiler.tar.xz
tar -xvf compiler.tar.xz
echo "::add-path::`pwd`/gcc-arm-none-eabi-9-2019-q4-major/bin"
# Make sure the compiler we just downloaded works - just print out the version
- name: Test Compiler
run: arm-none-eabi-gcc -v
# Build the firmware!
- name: Build Firmware
working-directory: ./firmware/
run: make -j4 PROJECT_BOARD=${{matrix.efi-board}} PROJECT_CPU=${{matrix.efi-cpu}} EXTRA_PARAMS="${{matrix.type-extra-params}} ${{matrix.target-extra-params}}" DEBUG_LEVEL_OPT='${{matrix.build-debug-level-opt}}' ${{matrix.extra-options}}
# Get hex2dfu
- name: Fetch hex2dfu
uses: actions/checkout@v2
with:
repository: 'rusefi/hex2dfu'
path: hex2dfu
# Build hex2dfu
- name: Build hex2dfu
working-directory: ./hex2dfu
run: gcc hex2dfu.c -o hex2dfu
# Convert hex to dfu
- name: Create DFU file
run: ./hex2dfu/hex2dfu -i ./firmware/build/rusefi.hex -o ./firmware/build/rusefi.dfu
# The next two steps upload the bin, elf, and dfu as build artifacts
- name: Upload elf
uses: actions/upload-artifact@v1
with:
name: firmware-${{matrix.build-target}}-${{matrix.build-type}}-elf
path: ./firmware/build/rusefi.elf
- name: Upload bin
uses: actions/upload-artifact@v1
with:
name: firmware-${{matrix.build-target}}-${{matrix.build-type}}-bin
path: ./firmware/build/rusefi.bin
- name: Upload dfu
uses: actions/upload-artifact@v1
with:
name: firmware-${{matrix.build-target}}-${{matrix.build-type}}-dfu
path: ./firmware/build/rusefi.dfu