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, 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-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 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