Added ARM64 and ARM64e support on MacOS #181
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
name: Build | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
jobs: | |
Build: | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
#Linux-aarch64 | |
- os: ubuntu-latest | |
name: Linux-aarch64 | |
other_linker_flags: '-L/usr/aarch64-linux-gnu/local/lib' | |
arch: aarch64 | |
output: libRemoteInput.so.1.0.0 | |
release: libRemoteInput-aarch64.so | |
#Linux-armhf | |
- os: ubuntu-latest | |
name: Linux-armhf | |
other_linker_flags: '' | |
arch: armhf | |
output: libRemoteInput.so.1.0.0 | |
release: libRemoteInput-armhf.so | |
#Linux-64 | |
- os: ubuntu-latest | |
name: Linux-64 | |
other_linker_flags: '-m64' | |
arch: x86_64 | |
output: libRemoteInput.so.1.0.0 | |
release: libRemoteInput-x86_64.so | |
#MacOS-64 | |
- os: macos-latest | |
name: MacOS-64 | |
other_linker_flags: '-m64' | |
arch: x86_64 | |
output: libRemoteInput.1.0.0.dylib | |
release: libRemoteInput-x86_64.dylib | |
#Windows-32 | |
- os: windows-latest | |
name: Windows-32 | |
other_linker_flags: '-m32' | |
arch: i686 | |
output: libRemoteInput.dll | |
release: libRemoteInput-i686.dll | |
#Windows-64 | |
- os: windows-latest | |
name: Windows-64 | |
other_linker_flags: '-m64' | |
arch: x86_64 | |
output: libRemoteInput.dll | |
release: libRemoteInput-x86_64.dll | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
#Linux-aarch64 | |
- name: Update Sources - Linux-aarch64 | |
if: matrix.config.name == 'Linux-aarch64' | |
run: | | |
#source_version=$(cat /etc/apt/sources.list | grep "main restricted" | head -1 | sed -e 's/.*com\/ //' -e 's/ main.*//') | |
#echo "Found: ${ source_version }" | |
sudo sed -Ei 's/^deb /deb \[arch=amd64\,i386\] /' /etc/apt/sources.list | |
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list | |
sudo dpkg --add-architecture arm64 | |
sudo apt-get update | |
- name: Dependencies - Linux-aarch64 | |
if: matrix.config.name == 'Linux-aarch64' | |
run: | | |
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | |
#sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf | |
sudo apt-get install libprocps-dev:arm64 mesa-common-dev:arm64 libglu1-mesa:arm64 libglu1-mesa-dev:arm64 libgl1-mesa-glx:arm64 libgl1-mesa-dev:arm64 libglfw3-dev:arm64 cmake | |
sudo apt-get install openjdk-11-jdk | |
sudo apt-get install libpython3-dev:arm64 | |
- name: CMake Generate Build Files - Linux-aarch64 | |
if: matrix.config.name == 'Linux-aarch64' | |
env: | |
JAVA_HOME: '/usr/lib/jvm/java-11-openjdk-amd64' | |
run: | | |
cmake -S '${{ github.workspace }}' -B '${{ github.workspace }}/cmake-build-release' -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++ -DCMAKE_BUILD_TYPE=Release -DOTHER_LINKER_FLAGS:STRING=${{ matrix.config.other_linker_flags }} -G "CodeBlocks - Unix Makefiles" | |
- name: Build - Linux-aarch64 | |
if: matrix.config.name == 'Linux-aarch64' | |
env: | |
JAVA_HOME: '/usr/lib/jvm/java-11-openjdk-amd64' | |
run: | | |
cmake --build '${{ github.workspace }}/cmake-build-release' --target all -- -j 4 | |
#Linux-armhf | |
- name: Update Sources - Linux-armhf | |
if: matrix.config.name == 'Linux-armhf' | |
run: | | |
#source_version=$(cat /etc/apt/sources.list | grep "main restricted" | head -1 | sed -e 's/.*com\/ //' -e 's/ main.*//') | |
#echo "Found: ${ source_version }" | |
sudo sed -Ei 's/^deb /deb \[arch=amd64\,i386\] /' /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ jammy main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ jammy-updates main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ jammy universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ jammy-updates universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ jammy multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ jammy-updates multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list | |
sudo dpkg --add-architecture armhf | |
sudo apt-get update | |
- name: Dependencies - Linux-armhf | |
if: matrix.config.name == 'Linux-armhf' | |
run: | | |
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf | |
sudo apt-get install libprocps-dev:armhf mesa-common-dev:armhf libglu1-mesa:armhf libglu1-mesa-dev:armhf libgl1-mesa-glx:armhf libgl1-mesa-dev:armhf libglfw3-dev:armhf cmake | |
sudo apt-get install openjdk-11-jdk | |
sudo apt-get install libpython3-dev:armhf | |
- name: CMake Generate Build Files - Linux-armhf | |
if: matrix.config.name == 'Linux-armhf' | |
env: | |
JAVA_HOME: '/usr/lib/jvm/java-11-openjdk-amd64' | |
run: | | |
cmake -S '${{ github.workspace }}' -B '${{ github.workspace }}/cmake-build-release' -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=armhf -DCMAKE_C_COMPILER=/usr/bin/arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=/usr/bin/arm-linux-gnueabihf-g++ -DCMAKE_BUILD_TYPE=Release -DOTHER_LINKER_FLAGS:STRING=${{ matrix.config.other_linker_flags }} -G "CodeBlocks - Unix Makefiles" | |
- name: Build - Linux-armhf | |
if: matrix.config.name == 'Linux-armhf' | |
env: | |
JAVA_HOME: '/usr/lib/jvm/java-11-openjdk-amd64' | |
run: | | |
cmake --build '${{ github.workspace }}/cmake-build-release' --target all -- -j 4 | |
#Linux-64 | |
- name: Dependencies - Linux-64 | |
if: matrix.config.name == 'Linux-64' | |
run: | | |
sudo apt-get update | |
sudo apt-get install libprocps-dev mesa-common-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev clang cmake g++ | |
- name: CMake Generate Build Files - Linux-64 | |
if: matrix.config.name == 'Linux-64' | |
run: | | |
cmake -S '${{ github.workspace }}' -B '${{ github.workspace }}/cmake-build-release' -DCMAKE_BUILD_TYPE=Release -DOTHER_LINKER_FLAGS:STRING=${{ matrix.config.other_linker_flags }} -G "CodeBlocks - Unix Makefiles" | |
- name: Build - Linux-64 | |
if: matrix.config.name == 'Linux-64' | |
run: | | |
cmake --build '${{ github.workspace }}/cmake-build-release' --target all -- -j 4 | |
#MacOS-64 | |
- name: CMake Generate Build Files - MacOS-64 | |
if: matrix.config.name == 'MacOS-64' | |
run: | | |
cmake -S '${{ github.workspace }}' -B '${{ github.workspace }}/cmake-build-release' -DCMAKE_BUILD_TYPE=Release -DOTHER_LINKER_FLAGS:STRING=${{ matrix.config.other_linker_flags }} -G "CodeBlocks - Unix Makefiles" | |
- name: Build - MacOS-64 | |
if: matrix.config.name == 'MacOS-64' | |
run: | | |
cmake --build '${{ github.workspace }}/cmake-build-release' --target all -- -j 4 | |
#Windows-32 | |
- name: Dependencies - Windows-32 | |
if: matrix.config.name == 'Windows-32' | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MINGW32 | |
install: mingw-w64-i686-gcc mingw-w64-i686-cmake make | |
update: false | |
- name: CMake Generate Build Files - Windows-32 | |
if: matrix.config.name == 'Windows-32' | |
shell: msys2 {0} | |
run: | | |
set MSYSTEM=MINGW32 | |
MINGW_INSTALLS=MINGW32 | |
cmake -S '${{ github.workspace }}' -B '${{ github.workspace }}/cmake-build-release' -DCMAKE_BUILD_TYPE=Release -DOTHER_LINKER_FLAGS:STRING=${{ matrix.config.other_linker_flags }} -G "CodeBlocks - Unix Makefiles" | |
- name: Build - Windows-32 | |
if: matrix.config.name == 'Windows-32' | |
shell: msys2 {0} | |
run: | | |
set MSYSTEM=MINGW32 | |
MINGW_INSTALLS=MINGW32 | |
cmake --build '${{ github.workspace }}/cmake-build-release' --target all -- -j 4 | |
#Windows-64 | |
- name: Dependencies - Windows-64 | |
if: matrix.config.name == 'Windows-64' | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MINGW64 | |
install: mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake make | |
update: false | |
- name: CMake Generate Build Files - Windows-64 | |
if: matrix.config.name == 'Windows-64' | |
shell: msys2 {0} | |
run: | | |
set MSYSTEM=MINGW64 | |
MINGW_INSTALLS=MINGW64 | |
cmake -S '${{ github.workspace }}' -B '${{ github.workspace }}/cmake-build-release' -DCMAKE_BUILD_TYPE=Release -DOTHER_LINKER_FLAGS:STRING=${{ matrix.config.other_linker_flags }} -G "CodeBlocks - Unix Makefiles" | |
- name: Build - Windows-64 | |
if: matrix.config.name == 'Windows-64' | |
shell: msys2 {0} | |
run: | | |
set MSYSTEM=MINGW64 | |
MINGW_INSTALLS=MINGW64 | |
cmake --build '${{ github.workspace }}/cmake-build-release' --target all -- -j 4 | |
#Shared | |
- name: Move Artifacts - ${{ matrix.config.name }} | |
if: github.event_name == 'push' | |
run: | | |
mv '${{ github.workspace }}/cmake-build-release/${{ matrix.config.output }}' '${{ github.workspace }}/cmake-build-release/${{ matrix.config.release }}' | |
- name: 'Upload Artifacts - ${{ matrix.config.name }}' | |
if: github.event_name == 'push' | |
uses: actions/[email protected] | |
with: | |
path: '${{ github.workspace }}/cmake-build-release/${{ matrix.config.release }}' | |
Release: | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: true | |
matrix: | |
config: | |
- os: windows-latest | |
target_release_repo: Reflection | |
steps: | |
- name: Wait For Builds | |
if: github.event_name == 'push' | |
uses: Brandon-T/wait-for-check-action@v1 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
check_names: '["Linux-aarch64", "Linux-armhf", "Linux-64", "MacOS-64", "Windows-32", "Windows-64"]' | |
statuses: '["completed", "completed", "completed", "completed", "completed", "completed"]' | |
conclusions: '["success", "success", "success", "success", "success", "success"]' | |
timeout: 600 | |
poll_interval: 10 | |
- name: Gather Release Notes | |
id: release_notes | |
if: github.event_name == 'push' | |
run: | | |
if [ "${{ github.event_name }}" = "push" ]; then | |
commit="${{ github.event.head_commit.message }}" | |
author="${{ github.event.head_commit.author.name }}" | |
notes="${commit}<br /><br />- ${author}" | |
notes="${notes//\\n/<br />}" | |
notes="${notes//$'\n'/<br />}" | |
elif [ "${{ github.event_name }}" = "pull_request" ]; then | |
commit="${{ github.event.pull_request.title }}" | |
body="${{ github.event.pull_request.body }}" | |
author="${{ github.event.pull_request.author }}" | |
notes="${commit}<br />${body}<br /><br />- ${author}" | |
notes="${notes//\\n/<br />}" | |
notes="${notes//$'\n'/<br />}" | |
fi | |
echo ::set-output name=description::"${notes}" | |
shell: bash | |
- name: Download Artifacts | |
if: github.event_name == 'push' | |
uses: actions/download-artifact@v2 | |
- name: Upload Autobuild | |
if: github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/v') | |
uses: Brandon-T/update-release-action@v1 | |
with: | |
github_token: ${{ secrets.CI_RELEASE_TOKEN }} | |
release_name: 'Auto-Build' | |
file: 'artifact/*' | |
is_file_glob: true | |
overwrite: true | |
release_notes: ${{ steps.release_notes.outputs.description }} | |
deletes_existing_release: true | |
pre_release: false | |
prefix_branch_name: false | |
suffix_branch_name: false | |
draft_release: false | |
retry_count: 2 | |
retry_delay: 5 | |
owner: '${{ github.repository_owner }}' | |
repo: '${{ matrix.config.target_release_repo }}' | |
tag: 'autobuild' | |
bump_tag: true | |
ref: 'master' | |
- name: Upload Release Build | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | |
uses: Brandon-T/update-release-action@v1 | |
with: | |
github_token: ${{ secrets.CI_RELEASE_TOKEN }} | |
release_name: ${{ steps.release_notes.outputs.version }} | |
file: 'artifact/*' | |
is_file_glob: true | |
overwrite: true | |
release_notes: ${{ steps.release_notes.outputs.description }} | |
deletes_existing_release: false | |
pre_release: false | |
prefix_branch_name: false | |
suffix_branch_name: false | |
draft_release: false | |
retry_count: 2 | |
retry_delay: 5 | |
owner: '${{ github.repository_owner }}' | |
repo: '${{ matrix.config.target_release_repo }}' | |
tag: ${{ steps.release_notes.outputs.version }} | |
bump_tag: true | |
ref: 'master' |