Skip to content

Commit 3a86fdf

Browse files
committed
ENH: macOS scikit-build-core, Stable ABI support
1 parent 40312da commit 3a86fdf

File tree

4 files changed

+56
-66
lines changed

4 files changed

+56
-66
lines changed

scripts/internal/manylinux-build-wheels.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ for PYBIN in "${PYBINARIES[@]}"; do
7979
echo "# Build single ITK wheel"
8080
echo "#"
8181

82-
# Configure setup.py
82+
# Configure pyproject.toml
8383
${PYBIN}/python ${PYPROJECT_CONFIGURE} "itk"
8484
# Generate wheel
8585
${PYBIN}/python -m pip \
@@ -116,7 +116,6 @@ for PYBIN in "${PYBINARIES[@]}"; do
116116
-DITK_SOURCE_DIR:PATH=${source_path} \
117117
-DITK_BINARY_DIR:PATH=${build_path} \
118118
-DBUILD_TESTING:BOOL=OFF \
119-
-DSKBUILD:BOOL=ON \
120119
-DPython3_EXECUTABLE:FILEPATH=${Python3_EXECUTABLE} \
121120
-DPython3_INCLUDE_DIR:PATH=${Python3_INCLUDE_DIR} \
122121
-DCMAKE_CXX_COMPILER_TARGET:STRING=$(uname -m)-linux-gnu \
@@ -143,7 +142,7 @@ for PYBIN in "${PYBINARIES[@]}"; do
143142

144143
wheel_names=$(cat ${script_dir}/../WHEEL_NAMES.txt)
145144
for wheel_name in ${wheel_names}; do
146-
# Configure setup.py
145+
# Configure pyproject.toml
147146
${PYBIN}/python ${PYPROJECT_CONFIGURE} ${wheel_name}
148147
# Generate wheel
149148
${PYBIN}/python -m pip \

scripts/macpython-build-common.sh

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,6 @@ for PYBIN in "${PYBINARIES[@]}"; do
6969
VENVS+=(${VENV})
7070
done
7171

72-
# -----------------------------------------------------------------------
73-
SKBUILD_DIR=_skbuild
74-
75-
7672
# -----------------------------------------------------------------------
7773
# Ensure that requirements are met
7874
brew update

scripts/macpython-build-wheels.sh

Lines changed: 52 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#
1010
# Shared libraries can be included in the wheel by exporting them to DYLD_LIBRARY_PATH before
1111
# running this script.
12-
#
12+
#
1313
# For example,
1414
#
1515
# export DYLD_LIBRARY_PATH="/path/to/libs"
@@ -26,7 +26,6 @@
2626
# * PYTHON_VERSIONS
2727
# * NINJA_EXECUTABLE
2828
# * SCRIPT_DIR
29-
# * SKBUILD_DIR
3029
# * VENVS=()
3130

3231
MACPYTHON_PY_PREFIX=""
@@ -55,6 +54,7 @@ done
5554

5655
VENV="${VENVS[0]}"
5756
Python3_EXECUTABLE=${VENV}/bin/python3
57+
${Python3_EXECUTABLE} -m pip install --upgrade pip
5858
${Python3_EXECUTABLE} -m pip install --no-cache delocate
5959
DELOCATE_LISTDEPS=${VENV}/bin/delocate-listdeps
6060
DELOCATE_WHEEL=${VENV}/bin/delocate-wheel
@@ -72,6 +72,8 @@ else
7272
use_tbb="OFF"
7373
fi
7474

75+
export MACOSX_DEPLOYMENT_TARGET=${osx_target}
76+
7577
# Build standalone project and populate archive cache
7678
tbb_dir=$PWD/oneTBB-prefix/lib/cmake/TBB
7779
n_processors=$(sysctl -n hw.ncpu)
@@ -115,7 +117,7 @@ for VENV in "${VENVS[@]}"; do
115117
osx_target="${MACOSX_DEPLOYMENT_TARGET}"
116118
fi
117119
source_path=${SCRIPT_DIR}/../ITK-source/ITK
118-
SETUP_PY_CONFIGURE="${script_dir}/setup_py_configure.py"
120+
PYPROJECT_CONFIGURE="${script_dir}/pyproject_configure.py"
119121

120122
# Clean up previous invocations
121123
rm -rf ${build_path}
@@ -126,27 +128,25 @@ for VENV in "${VENVS[@]}"; do
126128
echo "# Build single ITK wheel"
127129
echo "#"
128130

129-
# Configure setup.py
130-
${Python3_EXECUTABLE} ${SETUP_PY_CONFIGURE} "itk"
131+
# Configure pyproject.toml
132+
${Python3_EXECUTABLE} ${PYPROJECT_CONFIGURE} "itk"
131133
# Generate wheel
132-
${Python3_EXECUTABLE} setup.py bdist_wheel --build-type ${build_type} --plat-name ${plat_name} -G Ninja -- \
133-
-DCMAKE_MAKE_PROGRAM:FILEPATH=${NINJA_EXECUTABLE} \
134-
-DITK_SOURCE_DIR:PATH=${source_path} \
135-
-DITK_BINARY_DIR:PATH=${build_path} \
136-
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${osx_target} \
137-
-DCMAKE_OSX_ARCHITECTURES:STRING=${osx_arch} \
138-
-DITK_WRAP_unsigned_short:BOOL=ON \
139-
-DITK_WRAP_double:BOOL=ON \
140-
-DITK_WRAP_complex_double:BOOL=ON \
141-
-DITK_WRAP_IMAGE_DIMS:STRING="2;3;4" \
142-
-DPython3_EXECUTABLE:FILEPATH=${Python3_EXECUTABLE} \
143-
-DPython3_INCLUDE_DIR:PATH=${Python3_INCLUDE_DIR} \
144-
-DModule_ITKTBB:BOOL=${use_tbb} \
145-
-DTBB_DIR:PATH=${tbb_dir} \
146-
-DITK_WRAP_DOC:BOOL=ON \
134+
${Python3_EXECUTABLE} -m pip \
135+
--verbose \
136+
wheel \
137+
--wheel-dir dist \
138+
--no-deps \
139+
--config-settings=cmake.define.CMAKE_MAKE_PROGRAM:FILEPATH=${NINJA_EXECUTABLE} \
140+
--config-settings=cmake.define.ITK_SOURCE_DIR:PATH=${source_path} \
141+
--config-settings=cmake.define.ITK_BINARY_DIR:PATH=${build_path} \
142+
--config-settings=cmake.define.CMAKE_OSX_DEPLOYMENT_TARGET:STRING=${osx_target} \
143+
--config-settings=cmake.define.CMAKE_OSX_ARCHITECTURES:STRING=${osx_arch} \
144+
--config-settings=cmake.define.Python3_EXECUTABLE:FILEPATH=${Python3_EXECUTABLE} \
145+
--config-settings=cmake.define.Python3_INCLUDE_DIR:PATH=${Python3_INCLUDE_DIR} \
146+
--config-settings=cmake.define.Module_ITKTBB:BOOL=${use_tbb} \
147+
--config-settings=cmake.define.TBB_DIR:PATH=${tbb_dir} \
148+
. \
147149
${CMAKE_OPTIONS}
148-
# Cleanup
149-
rm -r ${SKBUILD_DIR}
150150

151151
else
152152

@@ -188,28 +188,26 @@ for VENV in "${VENVS[@]}"; do
188188

189189
wheel_names=$(cat ${SCRIPT_DIR}/WHEEL_NAMES.txt)
190190
for wheel_name in ${wheel_names}; do
191-
# Configure setup.py
192-
${Python3_EXECUTABLE} ${SETUP_PY_CONFIGURE} ${wheel_name}
191+
# Configure pyproject.toml
192+
${Python3_EXECUTABLE} ${PYPROJECT_CONFIGURE} ${wheel_name}
193193
# Generate wheel
194-
${Python3_EXECUTABLE} setup.py bdist_wheel --build-type ${build_type} --plat-name ${plat_name} -G Ninja -- \
195-
-DITK_SOURCE_DIR:PATH=${source_path} \
196-
-DITK_BINARY_DIR:PATH=${build_path} \
197-
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${osx_target} \
198-
-DCMAKE_OSX_ARCHITECTURES:STRING=${osx_arch} \
199-
-DITKPythonPackage_USE_TBB:BOOL=${use_tbb} \
200-
-DITKPythonPackage_ITK_BINARY_REUSE:BOOL=ON \
201-
-DITKPythonPackage_WHEEL_NAME:STRING=${wheel_name} \
202-
-DITK_WRAP_unsigned_short:BOOL=ON \
203-
-DITK_WRAP_double:BOOL=ON \
204-
-DITK_WRAP_complex_double:BOOL=ON \
205-
-DITK_WRAP_IMAGE_DIMS:STRING="2;3;4" \
206-
-DPython3_EXECUTABLE:FILEPATH=${Python3_EXECUTABLE} \
207-
-DPython3_INCLUDE_DIR:PATH=${Python3_INCLUDE_DIR} \
208-
-DITK_WRAP_DOC:BOOL=ON \
194+
${Python3_EXECUTABLE} -m pip \
195+
--verbose \
196+
wheel \
197+
--wheel-dir dist \
198+
--no-deps \
199+
--config-settings=cmake.define.ITK_SOURCE_DIR:PATH=${source_path} \
200+
--config-settings=cmake.define.ITK_BINARY_DIR:PATH=${build_path} \
201+
--config-settings=cmake.define.CMAKE_OSX_DEPLOYMENT_TARGET:STRING=${osx_target} \
202+
--config-settings=cmake.define.CMAKE_OSX_ARCHITECTURES:STRING=${osx_arch} \
203+
--config-settings=cmake.define.ITKPythonPackage_USE_TBB:BOOL=${use_tbb} \
204+
--config-settings=cmake.define.ITKPythonPackage_ITK_BINARY_REUSE:BOOL=ON \
205+
--config-settings=cmake.define.ITKPythonPackage_WHEEL_NAME:STRING=${wheel_name} \
206+
--config-settings=cmake.define.Python3_EXECUTABLE:FILEPATH=${Python3_EXECUTABLE} \
207+
--config-settings=cmake.define.Python3_INCLUDE_DIR:PATH=${Python3_INCLUDE_DIR} \
208+
. \
209209
${CMAKE_OPTIONS} \
210210
|| exit 1
211-
# Cleanup
212-
rm -r ${SKBUILD_DIR}
213211
done
214212

215213
fi
@@ -220,22 +218,19 @@ for VENV in "${VENVS[@]}"; do
220218
find ${build_path} -name '*.o' -delete
221219
done
222220

223-
for wheel in dist/*.whl; do
224-
echo "Delocating $wheel"
225-
${DELOCATE_LISTDEPS} $wheel # lists library dependencies
226-
${DELOCATE_WHEEL} $wheel # copies library dependencies into wheel
227-
done
228-
229-
# Install packages and test
230-
# numpy wheel not currently available for the M1
231-
# https://github.com/numpy/numpy/issues/17807
232221
if [[ $(arch) != "arm64" ]]; then
233-
for VENV in "${VENVS[@]}"; do
234-
${VENV}/bin/pip install numpy
235-
${VENV}/bin/pip install itk --no-cache-dir --no-index -f ${SCRIPT_DIR}/../dist
236-
(cd $HOME && ${VENV}/bin/python -c 'import itk;')
237-
(cd $HOME && ${VENV}/bin/python -c 'import itk; image = itk.Image[itk.UC, 2].New()')
238-
(cd $HOME && ${VENV}/bin/python -c 'import itkConfig; itkConfig.LazyLoading = False; import itk;')
239-
(cd $HOME && ${VENV}/bin/python ${SCRIPT_DIR}/../docs/code/test.py )
222+
for wheel in dist/*.whl; do
223+
echo "Delocating $wheel"
224+
${DELOCATE_LISTDEPS} $wheel # lists library dependencies
225+
${DELOCATE_WHEEL} $wheel # copies library dependencies into wheel
240226
done
241227
fi
228+
229+
for VENV in "${VENVS[@]}"; do
230+
${VENV}/bin/pip install numpy
231+
${VENV}/bin/pip install itk --no-cache-dir --no-index -f ${SCRIPT_DIR}/../dist
232+
(cd $HOME && ${VENV}/bin/python -c 'import itk;')
233+
(cd $HOME && ${VENV}/bin/python -c 'import itk; image = itk.Image[itk.UC, 2].New()')
234+
(cd $HOME && ${VENV}/bin/python -c 'import itkConfig; itkConfig.LazyLoading = False; import itk;')
235+
(cd $HOME && ${VENV}/bin/python ${SCRIPT_DIR}/../docs/code/test.py )
236+
done

scripts/macpython-install-python.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,15 +408,15 @@ function make_workon_venv {
408408
if test "$(arch)" == "arm64"; then
409409
echo "we are arm"
410410
PLAT=arm64
411-
for pyversion in $LATEST_3p9 $LATEST_3p10 $LATEST_3p11 $LATEST_3p12; do
411+
for pyversion in $LATEST_3p9 $LATEST_3p10 $LATEST_3p11; do
412412
install_macpython $pyversion 11
413413
install_virtualenv
414414
done
415415
else
416416
# Deployment target requirements:
417417
# * 10.9: Python 3.7
418418
# * 11: Python >= 3.8
419-
for pyversion in $LATEST_3p8 $LATEST_3p9 $LATEST_3p10 $LATEST_3p11 $LATEST_3p12; do
419+
for pyversion in $LATEST_3p8 $LATEST_3p9 $LATEST_3p10 $LATEST_3p11; do
420420
install_macpython $pyversion 11
421421
install_virtualenv
422422
done

0 commit comments

Comments
 (0)