Skip to content

Sped up Smoldyn suface and panel lookup with new c-safe Hashtable #30

Sped up Smoldyn suface and panel lookup with new c-safe Hashtable

Sped up Smoldyn suface and panel lookup with new c-safe Hashtable #30

Workflow file for this run

name: "Build Wheels"
on:
workflow_dispatch:
pull_request:
push:
branches:
- master
release:
types:
- published
jobs:
build_wheels:
name: Build Python Wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
python_version: ["cp39-*", "cp310-*", "cp311-*", "cp312-*", "cp313-*"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: true
- name: Install Ubuntu Dependencies
if: matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm'
run: |
sudo apt update
sudo apt install -y wget gfortran cmake ninja-build libboost-all-dev libzip-dev libhdf5-dev libbz2-dev libssl-dev liblzma-dev
# for some reason, there aren't headers included in libzip-dev???? so we're building from source!
mkdir ../libzip-source
wget https://libzip.org/download/libzip-1.11.3.tar.gz
tar -xzvf libzip-1.11.3.tar.gz -C ../libzip-source
cmake -S ../libzip-source/libzip-1.11.3 -B ../libzip-source/libzip-1.11.3/build -G Ninja
cmake --build ../libzip-source/libzip-1.11.3/build
sudo cmake --install ../libzip-source/libzip-1.11.3/build
echo "Confirming header presence..."
- name: Install Intel MacOS Dependencies
if: matrix.os == 'macos-13'
shell: bash
run: |
brew install boost
brew install hdf5
brew install libzip
brew install ninja
brew install libaec
brew install llvm
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile
source /Users/runner/.bash_profile
ln -s $(which gfortran-14) /usr/local/bin/gfortran
- name: Install ARM MacOS dependencies
if: matrix.os == 'macos-14'
shell: bash
run: |
brew install boost
brew install hdf5
brew install libzip
brew install ninja
brew install libaec
brew install llvm
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile
ln -s /opt/homebrew/bin/gfortran-14 /usr/local/bin/gfortran
- name: Install Windows Dependencies
if: matrix.os == 'windows-latest'
run: |
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install ninja
choco install msys2
C:\tools\msys64\usr\bin\bash -lc "pacman -Sy --noconfirm \
mingw-w64-clang-x86_64-cmake \
mingw-w64-clang-x86_64-ninja \
mingw-w64-clang-x86_64-toolchain \
mingw-w64-clang-x86_64-boost \
mingw-w64-clang-x86_64-hdf5 \
mingw-w64-clang-x86_64-zlib \
mingw-w64-clang-x86_64-libzip \
mingw-w64-clang-x86_64-libaec"
echo "C:\tools\msys64\mingw64\bin" | Out-File -Append -Encoding ascii $env:GITHUB_PATH
echo "C:\tools\msys64\clang64\bin" | Out-File -Append -Encoding ascii $env:GITHUB_PATH
echo "C:\tools\msys64\clang64\lib" | Out-File -Append -Encoding ascii $env:GITHUB_PATH
echo "C:\tools\msys64\clang64\include" | Out-File -Append -Encoding ascii $env:GITHUB_PATH
- name: Build Wheels (Windows)
uses: pypa/cibuildwheel@v2.23.2
if: matrix.os == 'windows-latest'
env:
CIBW_BUILD: ${{ matrix.python_version }}
CIBW_BEFORE_BUILD: "pip install cmake ninja"
CIBW_ENVIRONMENT: >
CC=clang
CXX=clang++
CMAKE_GENERATOR=Ninja
# with:
# package-dir: .
# output-dir: wheelhouse
# config-file: "{package}/pyproject.toml"
- name: Build Wheels (MacOS<x86_64>)
uses: pypa/cibuildwheel@v2.23.2
if: matrix.os == 'macos-13'
env:
CIBW_BUILD: ${{ matrix.python_version }}
CIBW_ENVIRONMENT: >
FC=/usr/local/bin/gfortran
MACOSX_DEPLOYMENT_TARGET="10.13"
# with:
# package-dir: .
# output-dir: wheelhouse
# config-file: "{package}/pyproject.toml"
- name: Build Wheels (MacOS<ARM>)
uses: pypa/cibuildwheel@v2.23.2
if: matrix.os == 'macos-14'
env:
MACOSX_DEPLOYMENT_TARGET: 14.0
CIBW_BUILD: ${{ matrix.python_version }}
CIBW_ENVIRONMENT: >
FC=/opt/homebrew/bin/gfortran-14
# with:
# package-dir: .
# output-dir: wheelhouse
# config-file: "{package}/pyproject.toml"
- name: Build Wheels (Linux<ARM>)
uses: pypa/cibuildwheel@v2.23.2
if: matrix.os == 'ubuntu-24.04-arm'
env:
CIBW_BUILD: ${{ matrix.python_version }}
CIBW_MANYLINUX_*_IMAGE: "manylinux_2_34"
CIBW_REPAIR_WHEEL_COMMAND: 'auditwheel repair --disable-isa-ext-check {wheel} -w {dest_dir}'
CIBW_BEFORE_BUILD: "yum install -y boost-devel hdf5-devel libzip-devel bzip2-devel ninja-build openssl-devel xz-devel && pip install h5py"
# with:
# package-dir: .
# output-dir: wheelhouse
# config-file: "{package}/pyproject.toml"
- name: Build Wheels (Linux<x86_64>)
uses: pypa/cibuildwheel@v2.23.2
if: matrix.os == 'ubuntu-latest'
env:
CIBW_BUILD: ${{ matrix.python_version }}
CIBW_MANYLINUX_*_IMAGE: 'manylinux_2_34'
CIBW_REPAIR_WHEEL_COMMAND: 'auditwheel repair --disable-isa-ext-check {wheel} -w {dest_dir}'
CIBW_BEFORE_BUILD: "yum install -y boost-devel hdf5-devel libzip-devel bzip2-devel ninja-build openssl-devel xz-devel && pip install h5py \
"
# with:
# package-dir: .
# output-dir: wheelhouse
# config-file: "{package}/pyproject.toml"
# && mkdir /libzip_source \
# &&
# && export LIBZIP_INCLUDE_DIR=/usr/local/include \
# && export LIBZIP_LIBRARY=/usr/local/lib/libzip.so
- name: Upload Artifact (Python 3.9)
uses: actions/upload-artifact@v4
if: matrix.python_version == 'cp39-*'
with:
name: pyvcell-fv-${{ matrix.os }}-cp39-cibw-wheels
path: ./wheelhouse/*.whl
- name: Upload Artifact (Python 3.10)
uses: actions/upload-artifact@v4
if: matrix.python_version == 'cp310-*'
with:
name: pyvcell-fv-${{ matrix.os }}-cp310-cibw-wheels
path: ./wheelhouse/*.whl
- name: Upload Artifact (Python 3.11)
uses: actions/upload-artifact@v4
if: matrix.python_version == 'cp311-*'
with:
name: pyvcell-fv-${{ matrix.os }}-cp311-cibw-wheels
path: ./wheelhouse/*.whl
- name: Upload Artifact (Python 3.12)
uses: actions/upload-artifact@v4
if: matrix.python_version == 'cp312-*'
with:
name: pyvcell-fv-${{ matrix.os }}-cp312-cibw-wheels
path: ./wheelhouse/*.whl
- name: Upload Artifact (Python 3.13)
uses: actions/upload-artifact@v4
if: matrix.python_version == 'cp313-*'
with:
name: pyvcell-fv-${{ matrix.os }}-cp313-cibw-wheels
path: ./wheelhouse/*.whl
- name: Setup tmate session on failure
uses: mxschmitt/action-tmate@v3
if: ${{ failure() }}
with:
limit-access-to-actor: true