Skip to content

Commit

Permalink
Adjust CI configuration to try to match skimage
Browse files Browse the repository at this point in the history
  • Loading branch information
peekxc committed Aug 17, 2023
1 parent 8e7a15e commit b4fa04f
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 6 deletions.
138 changes: 133 additions & 5 deletions .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: setup.py
- name: Install dependencies
run: |
python -m pip install --upgrade pip
Expand Down Expand Up @@ -57,6 +55,136 @@ jobs:
maxColorRange: 100
minColorRange: 0
namedLogo: Pytest
# - name: Send coverage report
# run: |
# coveralls --service=github
# - name: Send coverage report
# run: |
# coveralls --service=github

build_windows_wheels:
name: Build ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
cibw_arch: ["AMD64"]
cibw_python: ["cp39-*", "cp310-*", "cp311-*"]

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- uses: actions/setup-python@v4
name: Install Python
with:
python-version: "3.9"

- name: Install cibuildwheel and add clang-cl to path
run: |
python -m pip install cibuildwheel
- name: Build AMD64 Windows wheels for CPython
if: matrix.cibw_arch == 'AMD64'
# To avoid "LINK : fatal error LNK1158: cannot run 'rc.exe'"
# we explicitly add rc.exe to path using the method from:
# https://github.com/actions/virtual-environments/issues/294#issuecomment-588090582
# with additional -arch=x86 flag to vsdevcmd.bat
run: |
function Invoke-VSDevEnvironment {
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$installationPath = & $vswhere -prerelease -legacy -latest -property installationPath
$Command = Join-Path $installationPath "Common7\Tools\vsdevcmd.bat"
& "${env:COMSPEC}" /s /c "`"$Command`" -arch=amd64 -no_logo && set" | Foreach-Object {
if ($_ -match '^([^=]+)=(.*)') {
[System.Environment]::SetEnvironmentVariable($matches[1], $matches[2])
}
}
}
Invoke-VSDevEnvironment
Get-Command rc.exe | Format-Table -AutoSize
python -m cibuildwheel --output-dir dist
env:
# define CC, CXX so meson will use clang-cl instead of MSVC
CC: clang-cl
CXX: clang-cl
CIBW_BUILD: ${{ matrix.cibw_python }}
CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_arch }}
# -Wl,-S equivalent to gcc's -Wl,--strip-debug
LDFLAGS: "-Wl,-S"

build_macos_wheels:
name: Build python ${{ matrix.cibw_python }} ${{ matrix.cibw_arch }} wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest]
cibw_python: ["cp39-*", "cp310-*", "cp311-*"]
cibw_arch: ["x86_64", "arm64"] # TODO: add "universal2" once a universal2 libomp is available

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- uses: actions/setup-python@v4
name: Install Python
with:
python-version: "3.9"

- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel
- name: Build wheels for CPython Mac OS
run: |
# Make sure to use a libomp version binary compatible with the oldest
# supported version of the macos SDK as libomp will be vendored into
# the scikit-image wheels for macos. The list of binaries are in
# https://packages.macports.org/libomp/. Currently, the oldest
# supported macos version is: High Sierra / 10.13. When upgrading
# this, be sure to update the MACOSX_DEPLOYMENT_TARGET environment
# variable accordingly. Note that Darwin_17 == High Sierra / 10.13.
#
# We need to set both MACOS_DEPLOYMENT_TARGET and MACOSX_DEPLOYMENT_TARGET
# until there is a new release with this commit:
# https://github.com/mesonbuild/meson-python/pull/309
if [[ "$CIBW_ARCHS_MACOS" == arm64 ]]; then
# SciPy requires 12.0 on arm to prevent kernel panics
# https://github.com/scipy/scipy/issues/14688
# so being conservative, we just do the same here
export MACOSX_DEPLOYMENT_TARGET=12.0
export MACOS_DEPLOYMENT_TARGET=12.0
OPENMP_URL="https://anaconda.org/conda-forge/llvm-openmp/11.1.0/download/osx-arm64/llvm-openmp-11.1.0-hf3c4609_1.tar.bz2"
else
export MACOSX_DEPLOYMENT_TARGET=10.9
export MACOS_DEPLOYMENT_TARGET=10.9
OPENMP_URL="https://anaconda.org/conda-forge/llvm-openmp/11.1.0/download/osx-64/llvm-openmp-11.1.0-hda6cdc1_1.tar.bz2"
fi
echo MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}
echo MACOS_DEPLOYMENT_TARGET=${MACOS_DEPLOYMENT_TARGET}
# use conda to install llvm-openmp
# Note that we do NOT activate the conda environment, we just add the
# library install path to CFLAGS/CXXFLAGS/LDFLAGS below.
sudo conda create -n build $OPENMP_URL
PREFIX="/usr/local/miniconda/envs/build"
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
export CPPFLAGS="$CPPFLAGS -Xpreprocessor -fopenmp"
export CFLAGS="$CFLAGS -Wno-implicit-function-declaration -I$PREFIX/include"
export CXXFLAGS="$CXXFLAGS -I$PREFIX/include"
export LDFLAGS="$LDFLAGS -Wl,-S -Wl,-rpath,$PREFIX/lib -L$PREFIX/lib -lomp"
python -m cibuildwheel --output-dir dist
env:
CIBW_BUILD: ${{ matrix.cibw_python }}
CIBW_ARCHS_MACOS: ${{ matrix.cibw_arch }}
CIBW_MANYLINUX_X86_64_IMAGE: manylinux1
CIBW_MANYLINUX_I686_IMAGE: manylinux1
CIBW_TEST_SKIP: "*-macosx_arm64"

- uses: actions/upload-artifact@v3
with:
name: wheels
path: ./dist/*.whl
7 changes: 6 additions & 1 deletion meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
project('simplextree', 'cpp', default_options : ['cpp_std=c++17'])
project(
'simplextree', 'cpp',
license: 'Apache-2.0',
meson_version: '>= 0.63.0',
default_options : ['cpp_std=c++17']
)

py_mod = import('python')
py = py_mod.find_installation(pure: true)
Expand Down
7 changes: 7 additions & 0 deletions simplextree/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
compiler = meson.get_compiler('cpp')
message('Compiler = '+compiler.get_id())

## Compiler flags
_cpp_args = compiler.get_supported_arguments(
'-Wall', '-Wextra', '-Wno-unused-parameter'
)
add_project_arguments(_cpp_args, language: ['cpp'])

## Platform detection
cpp_std = 'c++17'
is_windows = host_machine.system() == 'windows'
Expand All @@ -13,6 +19,7 @@ if is_windows
if is_mingw
add_project_link_arguments(['-lucrt', '-static'], language: ['cpp']) # For mingw-w64, link statically against the UCRT.
add_project_arguments('-D__USE_MINGW_ANSI_STDIO=1', language: ['cpp']) # https://github.com/rgommers/scipy/issues/118
add_project_arguments('-DMS_WIN64', language: ['cpp'])
endif
endif

Expand Down

0 comments on commit b4fa04f

Please sign in to comment.