# # build.yml - GitHub build action for AVRDUDE # Copyright (C) 2021 Marius Greuel # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # name: Build on: push: pull_request: workflow_call: env: BUILD_TYPE: RelWithDebInfo jobs: linux-x86_64: runs-on: ubuntu-latest defaults: run: working-directory: ./src steps: - uses: actions/checkout@v2 - name: Install prerequisites run: >- sudo apt-get install -y build-essential cmake flex bison libelf-dev libusb-dev libusb-1.0-0-dev libhidapi-dev libftdi1-dev libreadline-dev - name: Configure run: >- cmake -D DEBUG_CMAKE=1 -D HAVE_LINUXGPIO=1 -D HAVE_LINUXSPI=1 -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -B ../build - name: Build run: cmake --build ../build - name: Archive build artifacts if: always() uses: actions/upload-artifact@v2 with: name: build-linux-x86_64 path: | build/ !**/*.d !**/*.o - name: Archive executables uses: actions/upload-artifact@v2 with: name: avrdude-linux-x86_64 path: | build/avrdude build/avrdude.conf linux: runs-on: ubuntu-latest container: debian:11 defaults: run: working-directory: ./src strategy: matrix: include: - { arch: i386, processor: i686, prefix: i686-linux-gnu, inc-lib: i386-linux-gnu } - { arch: armhf, processor: armhf, prefix: arm-linux-gnueabihf, inc-lib: arm-linux-gnueabihf } - { arch: arm64, processor: aarch64, prefix: aarch64-linux-gnu, inc-lib: aarch64-linux-gnu } steps: - uses: actions/checkout@v2 - name: Add architecture run: | dpkg --add-architecture ${{matrix.arch}} apt-get update - name: Install prerequisites run: >- apt-get install -y git cmake flex bison crossbuild-essential-${{matrix.arch}} libelf-dev:${{matrix.arch}} libusb-dev:${{matrix.arch}} libusb-1.0-0-dev:${{matrix.arch}} libhidapi-dev:${{matrix.arch}} libftdi1-dev:${{matrix.arch}} libreadline-dev:${{matrix.arch}} - name: Configure run: >- cmake -D DEBUG_CMAKE=1 -D HAVE_LINUXGPIO=1 -D HAVE_LINUXSPI=1 -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -D CMAKE_SYSTEM_NAME=Linux -D CMAKE_SYSTEM_PROCESSOR=${{matrix.processor}} -D CMAKE_C_COMPILER=${{matrix.prefix}}-gcc -D CMAKE_FIND_ROOT_PATH=/usr/${{matrix.prefix}} -D CMAKE_INCLUDE_PATH=/usr/include/${{matrix.inc-lib}} -D CMAKE_LIBRARY_PATH=/usr/lib/${{matrix.inc-lib}} -B ../build - name: Build run: cmake --build ../build - name: Archive build artifacts if: always() uses: actions/upload-artifact@v2 with: name: build-linux-${{matrix.processor}} path: | build/ !**/*.d !**/*.o - name: Archive executables uses: actions/upload-artifact@v2 with: name: avrdude-linux-${{matrix.processor}} path: | build/avrdude build/avrdude.conf macos-x86_64: runs-on: macos-latest defaults: run: working-directory: ./src steps: - uses: actions/checkout@v2 - name: Install prerequisites run: >- brew install cmake flex bison libelf libusb hidapi libftdi - name: Configure run: >- cmake -D CMAKE_C_FLAGS=-I/usr/local/include -D CMAKE_EXE_LINKER_FLAGS=-L/usr/local/Cellar -D DEBUG_CMAKE=1 -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -B ../build - name: Build run: cmake --build ../build - name: Archive build artifacts if: always() uses: actions/upload-artifact@v2 with: name: build-macos-x86_64 path: | build/ !**/*.d !**/*.o - name: Archive executables uses: actions/upload-artifact@v2 with: name: avrdude-macos-x86_64 path: | build/avrdude build/avrdude.conf msvc: runs-on: windows-latest defaults: run: working-directory: ./src strategy: matrix: include: - { arch: x86, platform: Win32 } - { arch: x64, platform: x64 } - { arch: arm64, platform: ARM64 } steps: - uses: actions/checkout@v2 - name: Install prerequisites # As Chocolatey is notoriously unreliable, install winflexbison3 directly from GitHub. # run: choco install winflexbison3 run: | curl https://github.com/lexxmark/winflexbison/releases/download/v2.5.24/win_flex_bison-2.5.24.zip --location --output winflexbison.zip unzip winflexbison.zip -d ${{github.workspace}}\winflexbison echo "${{github.workspace}}\winflexbison" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Configure run: >- cmake -A ${{matrix.platform}} -D DEBUG_CMAKE=1 -D CMAKE_SYSTEM_VERSION=11 -D CMAKE_C_FLAGS_RELWITHDEBINFO="/MT /GL /Zi /O2 /Ob1 /DNDEBUG" -D CMAKE_CXX_FLAGS_RELWITHDEBINFO="/MT /GL /Zi /O2 /Ob1 /DNDEBUG" -D CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO="/DEBUG /INCREMENTAL:NO /LTCG /OPT:REF /OPT:ICF" -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -D USE_EXTERNAL=1 -B ../build - name: Build run: cmake --build ../build --config ${{env.BUILD_TYPE}} - name: Archive build artifacts if: always() uses: actions/upload-artifact@v2 with: name: build-msvc-${{matrix.arch}} path: | build/ !**/_deps/ !**/*.obj - name: Move executables run: | mv ../build/RelWithDebInfo/avrdude.exe ../build mv ../build/RelWithDebInfo/avrdude.pdb ../build - name: Archive executables uses: actions/upload-artifact@v2 with: name: avrdude-msvc-${{matrix.arch}} path: | build/avrdude.exe build/avrdude.pdb build/avrdude.conf mingw: runs-on: windows-latest defaults: run: shell: msys2 {0} working-directory: ./src strategy: matrix: include: - { sys: mingw32, env: i686 } - { sys: mingw64, env: x86_64 } steps: - uses: actions/checkout@v2 - uses: msys2/setup-msys2@v2 with: msystem: ${{matrix.sys}} update: true install: >- base-devel mingw-w64-${{matrix.env}}-gcc mingw-w64-${{matrix.env}}-cmake mingw-w64-${{matrix.env}}-libelf mingw-w64-${{matrix.env}}-libusb mingw-w64-${{matrix.env}}-libusb-compat-git mingw-w64-${{matrix.env}}-hidapi mingw-w64-${{matrix.env}}-libftdi - name: Configure run: >- cmake -G"MSYS Makefiles" -D DEBUG_CMAKE=1 -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -B ../build - name: Build run: cmake --build ../build - name: Archive build artifacts if: always() uses: actions/upload-artifact@v2 with: name: build-mingw-${{matrix.env}} path: | build/ - name: Archive executables uses: actions/upload-artifact@v2 with: name: avrdude-mingw-${{matrix.env}} path: | build/avrdude.exe build/avrdude.conf