arm64 linux builds #317
Workflow file for this run
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 and upload artifacts | |
on: [push, pull_request] | |
env: | |
PD_VERSION: 0.54-1 | |
PDINCLUDEDIR: ./pure-data/src | |
PDLIBDIR: ./build | |
LIBNAME: simplex~ | |
jobs: | |
build-linux: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
os: [linux] | |
arch: [amd64, arm64] | |
floatsize: [32, 64] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Set up cross-compilation environment for arm64 | |
if: matrix.arch == 'arm64' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-aarch64-linux-gnu | |
- name: Set environment variables for architecture | |
run: | | |
if [ "${{ matrix.arch }}" == "arm64" ]; then | |
echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV | |
fi | |
- name: Clone Pd | |
run: git clone --branch=${{ env.PD_VERSION }} --depth=1 https://github.com/pure-data/pure-data.git | |
- name: Compile amd64 external | |
if: matrix.arch == 'amd64' | |
run: | | |
if [ ${{ matrix.floatsize }} -eq 32 ]; then | |
make install floatsize=${{ matrix.floatsize }} extension=pd_${{ matrix.os }} | |
else | |
make install floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.floatsize }}.so | |
fi | |
- name: Compile arm64 external | |
if: matrix.arch == 'arm64' | |
run: make install floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.floatsize }}.so | |
- name: Archive artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }} | |
path: build/${{env.LIBNAME}} | |
build-macos: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
os: [darwin] | |
arch: [amd64] # FIXME: building for both architectures with this seems hacky | |
floatsize: [32, 64] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Clone Pd | |
run: git clone --branch=${{ env.PD_VERSION }} --depth=1 https://github.com/pure-data/pure-data.git | |
- name: Set up environment | |
run: brew install make | |
- name: Compile universal external | |
run: | | |
if [ ${{ matrix.floatsize }} -eq 32 ]; then | |
make install floatsize=${{ matrix.floatsize }} extension=d_fat arch="x86_64 arm64" | |
else | |
make install floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-fat-${{ matrix.floatsize }}.so arch="x86_64 arm64" | |
fi | |
- name: Archive artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }} | |
path: build/${{env.LIBNAME}} | |
build-windows: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
os: [windows] | |
arch: [amd64] | |
floatsize: [32, 64] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Download Pure-Data Binaries | |
run: | | |
if (${{ matrix.floatsize }} -eq 32) { | |
Invoke-WebRequest -Uri "http://msp.ucsd.edu/Software/pd-${{env.PD_VERSION}}.msw.zip" -OutFile "pd${{ matrix.floatsize }}-${{env.PD_VERSION}}.msw.zip" | |
} else { | |
Invoke-WebRequest -Uri "https://puredata.info/downloads/pure-data/releases/${{env.PD_VERSION}}-pd64/Pd64-${{env.PD_VERSION}}.msw.zip" -OutFile "pd${{ matrix.floatsize }}-${{env.PD_VERSION}}.msw.zip" | |
} | |
Expand-Archive -Path "pd${{ matrix.floatsize }}-${{env.PD_VERSION}}.msw.zip" -DestinationPath . | |
- name: Set up compiler environment | |
run: | | |
echo "C:\\msys64\\usr\\bin" >> $GITHUB_PATH # Ensure make and GCC are in PATH | |
- name: Compile external | |
shell: bash | |
run: | | |
export PATH="/c/msys64/mingw64/bin:$PATH" # Ensure MinGW GCC is preferred if needed | |
if [ ${{ matrix.floatsize }} -eq 32 ]; then | |
make install CC=gcc PDINCLUDEDIR="pd-${{env.PD_VERSION}}/src" PDDIR="pd-${{env.PD_VERSION}}" PDBINDIR="pd-${{env.PD_VERSION}}/bin" floatsize=${{ matrix.floatsize }} extension=m_${{ matrix.arch }} | |
else | |
make install CC=gcc PDINCLUDEDIR="Pd-0.54.1/src" PDDIR="Pd-0.54.1" PDBINDIR="Pd-0.54.1/bin" floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.floatsize }}.dll | |
fi | |
- name: Archive artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }} | |
path: build/${{env.LIBNAME}} | |
download-artifacts: | |
runs-on: ubuntu-latest | |
needs: [ build-linux, build-macos, build-windows ] | |
strategy: | |
matrix: | |
os: [linux, darwin, windows] | |
arch: [amd64, arm64] | |
floatsize: [32, 64] | |
exclude: | |
- { os: windows, arch: arm64 } | |
- { os: darwin, arch: arm64 } | |
steps: | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }} | |
path: artifacts/${{ matrix.os }} | |
package-release: | |
needs: download-artifacts | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
actions: read | |
steps: | |
- name: Setup directories | |
run: | | |
mkdir -p ${{env.LIBNAME}} | |
mkdir -p artifacts/linux | |
mkdir -p artifacts/darwin | |
mkdir -p artifacts/windows | |
- name: Download All Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
- name: Merge Artifacts | |
run: | | |
cp -rn artifacts/*/* ${{env.LIBNAME}}/ | |
- name: Rezip | |
run: | | |
SHORT=${GITHUB_REF:11} # Removes 'refs/tags/' prefix | |
SLUG=${SHORT//\//_} # Replaces '/' with '_' | |
zip -r ${{env.LIBNAME}}-${SLUG}.zip ${{env.LIBNAME}} | |
- name: Upload release content as Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}} | |
path: ${{env.LIBNAME}} | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/tags/') | |
with: | |
files: simplex*.zip | |
upload_to_deken: | |
runs-on: ubuntu-latest | |
needs: [package-release] | |
if: startsWith(github.ref, 'refs/tags/v') | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
path: ${{env.LIBNAME}}-src | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}} | |
path: ${{env.LIBNAME}} | |
- name: Create Deken Package and upload | |
shell: bash | |
env: | |
DEKEN_USERNAME: ${{ secrets.DEKEN_USERNAME }} | |
DEKEN_PASSWORD: ${{ secrets.DEKEN_PASSWORD }} | |
run: | | |
SHORT=${GITHUB_REF:11} # remove the 'refs/tags/' prefix | |
SLUG=${SHORT//\//_} # replace '/' with '_' | |
if [[ "${GITHUB_REF}" == *"test"* ]]; then | |
echo "Dry-run: Preparing to package for test tag ${GITHUB_REF}" | |
mkdir -p ${PWD}/package | |
docker run --rm --user $(id -u) --volume ${PWD}/${{env.LIBNAME}}:/${{env.LIBNAME}} --volume ${PWD}/package:/package registry.git.iem.at/pd/deken \ | |
deken package --output-dir /package -v "${SLUG}" /${{env.LIBNAME}} | |
echo "Listing generated Deken files for potential release:" | |
ls -l ${PWD}/package | |
echo "Listing contents of the .dek file:" | |
dek_files=$(ls ${PWD}/package/*.dek) | |
for dek_file in $dek_files; do | |
unzip -l "$dek_file" | |
done | |
else | |
docker run --rm -e DEKEN_USERNAME -e DEKEN_PASSWORD --volume ${PWD}/${{env.LIBNAME}}-src:/${{env.LIBNAME}} registry.git.iem.at/pd/deken \ | |
deken upload --name ${{env.LIBNAME}} /${{env.LIBNAME}} | |
docker run --rm -e DEKEN_USERNAME -e DEKEN_PASSWORD --volume ${PWD}/${{env.LIBNAME}}:/${{env.LIBNAME}} registry.git.iem.at/pd/deken \ | |
deken upload --name ${{env.LIBNAME}} --no-source-error /${{env.LIBNAME}} | |
fi |