Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
49f65df
bump all packages
ndonkoHenri Jun 5, 2026
dd1d360
websockets: quote version "16.0" — avoid YAML float coercion
ndonkoHenri Jun 5, 2026
3e610ea
markupsafe: fix test_speedups_loaded for 3.x API rename
ndonkoHenri Jun 5, 2026
307d699
opencv-python: target 4.12.0.88 (latest with sdist on PyPI)
ndonkoHenri Jun 5, 2026
ae6e4d4
gdal: revert to 3.10.0 — defer the libgdal chain to a separate effort
ndonkoHenri Jun 5, 2026
a0e9f17
recipes: rebase 4 setup.py mobile.patches for upstream version drift
ndonkoHenri Jun 5, 2026
49775ba
shapely: drop mobile.patch — 2.1+ has native env-var cross-compile
ndonkoHenri Jun 5, 2026
b67f066
pillow: rebase setup patch for 12.x — drop the obsolete add_imaging_l…
ndonkoHenri Jun 5, 2026
8815665
recipes: rebase pandas + pyobjus patches for upstream catch-up
ndonkoHenri Jun 5, 2026
32ff8a5
recipes: rebase blis + grpcio + pyjnius; drop pendulum patch (upstrea…
ndonkoHenri Jun 5, 2026
6ea6de0
recipes: drop numpy mobile patch (upstreamed); cap tokenizers at 0.22.2
ndonkoHenri Jun 5, 2026
2ddf547
ci: disable concurrency cancel-in-progress during bumps iteration
ndonkoHenri Jun 5, 2026
87a7fbb
blis + grpcio: fix the two compile failures CI surfaced
ndonkoHenri Jun 5, 2026
ebd5281
pyobjus: bypass new iOS build-time check for ios-deps-install/
ndonkoHenri Jun 5, 2026
2233317
opencv-python: drop bogus a.diff hunk + add cmake build dep; pillow: …
ndonkoHenri Jun 5, 2026
48709e1
recipes: defer 3 bumps — opaque, pynacl, shapely — each blocked by a …
ndonkoHenri Jun 5, 2026
f091d2d
opencv-python + pillow: finish off the 3 failures CI surfaced last sweep
ndonkoHenri Jun 6, 2026
d8eab88
pillow iOS: also drop png from the hardcoded transitive-deps list
ndonkoHenri Jun 6, 2026
50ec338
ci: add prebuild_libs input — validate native-lib chain bumps in one run
ndonkoHenri Jun 6, 2026
a6151c8
pynacl: re-bump to 1.6.2 to validate via cffi chain prebuild
ndonkoHenri Jun 6, 2026
c179411
opaque chain: bump flet-libopaque 1.0.1 + opaque 1.0.0 for prebuild test
ndonkoHenri Jun 6, 2026
ec548e4
gdal chain: bump flet-libgdal 3.13.1 + sync 4 consumers for prebuild …
ndonkoHenri Jun 6, 2026
d635a19
shapely chain: bump flet-libgeos 3.14.1 + shapely 2.1.2 + iOS force_l…
ndonkoHenri Jun 6, 2026
d5919ae
flet-libgdal: patch GDAL 3.13 to skip Python detection when bindings off
ndonkoHenri Jun 6, 2026
8280c2e
flet-libgeos: pin 3.13.1 (3.14 breaks iOS via thread_local in Interru…
ndonkoHenri Jun 6, 2026
fd10411
flet-libgdal: pass BUILD_PYTHON_BINDINGS=OFF in iOS build.sh too
ndonkoHenri Jun 6, 2026
94d0900
gdal: rebase config.patch for upstream 3.13.1 setup.py drift
ndonkoHenri Jun 6, 2026
bee18f4
flet-libgdal: pass GDAL_USE_OPENMP=OFF on both arches
ndonkoHenri Jun 6, 2026
e26af84
ci: fold prebuild_libs into the build job's Build wheels step
ndonkoHenri Jun 7, 2026
e9fc7ae
recipes: fix build_number on gdal chain consumers for pip wheel selec…
ndonkoHenri Jun 7, 2026
5bfaf58
Preserve upstream wheel Python/ABI tag in `fix_wheel` (#67)
ndonkoHenri Jun 8, 2026
a4869bb
restore ci concurrency
ndonkoHenri Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion .github/workflows/build-wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ on:
description: "Packages (comma-separated, e.g. pillow:11.1.0,pydantic-core:2.33.2) — or 'ALL' to build/test every recipe"
required: false
default: "pydantic-core:2.33.2"
prebuild_recipes:
description: |
Comma-separated list of recipes (typically flet-lib*) to
build FIRST and seed into the matrix's dist/ for host-dep pip resolution
(e.g. flet-libgdal -> gdal).
required: false
default: ""
Comment on lines +16 to +22
python_build_run_id:
description: |
flet-dev/python-build Actions run-id whose artifacts to use as the
Expand Down Expand Up @@ -178,9 +185,11 @@ jobs:
env:
FORGE_ARCH: ${{ matrix.forge_arch }}
FORGE_PACKAGES: ${{ matrix.forge_packages }}
PREBUILD_RECIPES: ${{ inputs.prebuild_recipes }}
PLATFORM: ${{ matrix.platform }}
PYTHON_BUILD_RUN_ID: ${{ inputs.python_build_run_id }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # used by `gh run download`
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PIP_FIND_LINKS: ${{ github.workspace }}/dist
run: |
set -euxo pipefail

Expand All @@ -198,6 +207,16 @@ jobs:
# the canonical v<version> release.
source ./setup.sh "$UV_PYTHON" "$PLATFORM"

# When prebuild_recipes is set, this step builds those recipes FIRST. Their wheels
# land in dist/ alongside the consumer wheels. PIP_FIND_LINKS points forge's
# host-dep pip resolution at dist/, so the consumer build below picks up the
# freshly-built libs over whatever pypi.flet.dev has published.
if [[ -n "${PREBUILD_RECIPES:-}" ]]; then
for lib in $(echo "$PREBUILD_RECIPES" | tr ',' ' '); do
forge "$FORGE_ARCH" "$lib"
done
fi

IFS=' ' read -r -a packages <<< "$FORGE_PACKAGES"
for package in "${packages[@]}"; do
forge "$FORGE_ARCH" "$package"
Expand Down
4 changes: 2 additions & 2 deletions recipes/aiohttp/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package:
name: aiohttp
version: 3.9.5
version: 3.14.0

build:
number: 10
number: 1
4 changes: 2 additions & 2 deletions recipes/argon2-cffi-bindings/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package:
name: argon2-cffi-bindings
version: 21.2.0
version: 25.1.0

build:
number: 10
number: 1
4 changes: 2 additions & 2 deletions recipes/bcrypt/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package:
name: bcrypt
version: 4.2.0
version: 5.0.0

build:
number: 10
number: 1
script_env:
_PYTHON_SYSCONFIGDATA_NAME: '{sysconfigdata_name}'
4 changes: 2 additions & 2 deletions recipes/bitarray/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package:
name: bitarray
version: 3.6.1
version: 3.8.1

build:
number: 10
number: 1
4 changes: 2 additions & 2 deletions recipes/blis/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package:
name: blis
version: 1.0.0
version: 1.3.3

build:
number: 10
number: 1

requirements:
host:
Expand Down
56 changes: 24 additions & 32 deletions recipes/blis/patches/mobile.patch
Original file line number Diff line number Diff line change
@@ -1,53 +1,45 @@
diff --git a/blis/_src/frame/thread/bli_pthread.c b/blis/_src/frame/thread/bli_pthread.c
index a099356..6d5fe03 100644
--- a/blis/_src/frame/thread/bli_pthread.c
+++ b/blis/_src/frame/thread/bli_pthread.c
@@ -594,7 +594,7 @@ int bli_pthread_barrier_wait
return 0;
}
-#elif defined(__APPLE__) || defined(_MSC_VER) // !defined(BLIS_DISABLE_SYSTEM)
+#elif defined(__APPLE__) || defined(_MSC_VER) || defined(__ANDROID__) // !defined(BLIS_DISABLE_SYSTEM)
#include <errno.h>

@@ -319,7 +319,7 @@

// -- pthread_barrier_*() --

-#if defined(__APPLE__) || defined(_MSC_VER)
+#if defined(__APPLE__) || defined(_MSC_VER) || defined(__ANDROID__)

// For OS X and Windows, we define barriers ourselves in terms of the rest
// of the API, though for slightly different reasons: For Windows, we must
diff --git a/blis/_src/include/linux-generic/blis.h b/blis/_src/include/linux-generic/blis.h
index d5158ff..bf3fbe5 100644
--- a/blis/_src/include/linux-generic/blis.h
+++ b/blis/_src/include/linux-generic/blis.h
@@ -1581,7 +1581,7 @@ typedef pthread_cond_t bli_pthread_cond_t;
typedef pthread_condattr_t bli_pthread_condattr_t;
typedef pthread_once_t bli_pthread_once_t;
@@ -1537,7 +1537,7 @@ typedef pthread_cond_t bli_pthread_cond_t;
typedef pthread_condattr_t bli_pthread_condattr_t;
typedef pthread_once_t bli_pthread_once_t;

-#if defined(__APPLE__)
+#if defined(__APPLE__) || defined(__ANDROID__)

// For OS X, we must define the barrier types ourselves since Apple does
// not implement barriers in their variant of pthreads.
diff --git a/setup.py b/setup.py
index d0944c9..6b3c19e 100644
--- a/setup.py
+++ b/setup.py
@@ -21,6 +21,7 @@ import subprocess
@@ -21,8 +21,13 @@
import sys
import platform
import numpy
+import sysconfig


PLATFORM_TO_ARCH = {
@@ -36,6 +37,10 @@ PLATFORM_TO_ARCH = {


MOD_NAMES = ["blis.cy", "blis.py"]
+
+# Redirect the compiler to CC
+os.environ["BLIS_ARCH"] = "generic"
+os.environ["BLIS_COMPILER"] = os.environ["CC"]
+

print("BLIS_COMPILER?", os.environ.get("BLIS_COMPILER", "None"))


@@ -220,6 +225,9 @@ class ExtensionBuilder(build_ext, build_ext_options):

@@ -199,6 +204,9 @@
objects = []
platform_arch = platform + "-" + py_arch
compiler = self.get_compiler_name()
Expand All @@ -57,12 +49,12 @@ index d0944c9..6b3c19e 100644
with open(os.path.join(BLIS_DIR, "make", "%s.jsonl" % platform_arch)) as file_:
env = {}
for line in file_:
@@ -255,6 +263,8 @@ class ExtensionBuilder(build_ext, build_ext_options):
@@ -228,6 +236,8 @@
spec["flags"] = [
f for f in spec["flags"] if "visibility=hidden" not in f
]
+ if len(host_triplet) == 4 and host_triplet[0] == "ios":
+ spec["flags"].append(f"-mios-version-min={host_triplet[1]}")
objects.append(self.build_object(env=env, **spec))
return objects

# spec["flags"].append(
# "-D__cpuid=__cpuid_function"
# )
4 changes: 2 additions & 2 deletions recipes/brotli/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package:
name: Brotli
version: 1.1.0
version: 1.2.0

build:
number: 10
number: 1
4 changes: 2 additions & 2 deletions recipes/cffi/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package:
name: cffi
version: 1.17.1
version: 2.0.0

build:
number: 10
number: 1

requirements:
host:
Expand Down
4 changes: 2 additions & 2 deletions recipes/contourpy/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package:
name: contourpy
version: 1.3.1
version: 1.3.3

requirements:
build:
Expand All @@ -14,7 +14,7 @@ requirements:
# {% endif %}

build:
number: 10
number: 1
backend-args:
- -Csetup-args=--cross-file
- -Csetup-args={MESON_CROSS_FILE}
12 changes: 9 additions & 3 deletions recipes/fiona/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,23 @@ package:

requirements:
host:
- flet-libgdal 3.10.0
- flet-libgdal 3.13.1
# {% if sdk != 'android' %}
# iOS-only — see GDAL_LIBS comment below for the rationale.
- openssl >=3.0.15
- flet-libjpeg 3.0.90
# {% endif %}

build:
number: 10
# Same source version as pypi.flet.dev's fiona-1.10.1-10 wheel, but
# this rebuild links against flet-libgdal 3.13.1 (vs. the published
# wheel's 3.10.0). pip's wheel selection picks the higher build_tag
# per PEP 427 when name+version collide; the new wheel must outrank
# build 10 or downstream installs would silently keep the old
# libgdal-3.10-linked fiona and the gdal chain bump would be invisible.
number: 11
script_env:
GDAL_VERSION: 3.10.0
GDAL_VERSION: 3.13.1
GDAL_LIB_PATH: '{platlib}/opt/lib'
GDAL_INCLUDE_PATH: '{platlib}/opt/include'
# {% if sdk == 'android' %}
Expand Down
5 changes: 4 additions & 1 deletion recipes/flet-libgdal/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ if [ $CROSS_VENV_SDK == "android" ]; then
-DGDAL_USE_OPENSSL=OFF \
-DGDAL_USE_CURL=OFF \
-DGDAL_USE_LIBXML2=OFF \
-DGDAL_USE_OPENMP=OFF \
-DBUILD_APPS=OFF \
-DBUILD_TESTING=OFF \
-DBUILD_PYTHON_BINDINGS=OFF
Expand All @@ -48,8 +49,10 @@ else
-DSQLite3_INCLUDE_DIR=$SDK_ROOT/usr/include \
-DGDAL_BUILD_OPTIONAL_DRIVERS=OFF \
-DOGR_BUILD_OPTIONAL_DRIVERS=OFF \
-DGDAL_USE_OPENMP=OFF \
-DBUILD_APPS=OFF \
-DBUILD_TESTING=OFF
-DBUILD_TESTING=OFF \
-DBUILD_PYTHON_BINDINGS=OFF
fi

cmake --build . -j $CPU_COUNT
Expand Down
9 changes: 6 additions & 3 deletions recipes/flet-libgdal/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{% set version = "3.10.0" %}
{% set version = "3.13.1" %}

package:
name: flet-libgdal
Expand All @@ -8,10 +8,13 @@ source:
url: https://github.com/OSGeo/gdal/releases/download/v{{ version }}/gdal-{{ version }}.tar.gz

build:
number: 10
number: 1

requirements:
build:
- cmake
host:
- flet-libproj 9.5.0
- flet-libproj 9.5.0

patches:
- mobile.patch
24 changes: 24 additions & 0 deletions recipes/flet-libgdal/patches/mobile.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -221,6 +221,12 @@ endif()
endif()
set(ENV{MKL_ENABLE_INSTRUCTIONS} "SSE4_2")

+# Mobile cross-compile guard: GDAL 3.13 unconditionally probes for the
+# target Python interpreter even when -DBUILD_PYTHON_BINDINGS=OFF. Under
+# CMake 4.x that trips policy CMP0190 ("Interpreter and/or Compiler
+# components cannot be searched when CMAKE_CROSSCOMPILING_EMULATOR
+# variable is not specified"). Skip the block when bindings are off.
+if (BUILD_PYTHON_BINDINGS OR NOT DEFINED BUILD_PYTHON_BINDINGS)
if (Python_LOOKUP_VERSION)
set(Python_FIND_STRATEGY VERSION)
find_package(Python ${Python_LOOKUP_VERSION} EXACT COMPONENTS Interpreter Development NumPy)
@@ -248,6 +254,7 @@ if (Python_Interpreter_FOUND)
endif ()
endif()
endif()
+endif()

# Restore previous value of MKL_ENABLE_INSTRUCTIONS
if(DEFINED BACKUP_ENV_VAR_MKL_ENABLE_INSTRUCTIONS)
8 changes: 4 additions & 4 deletions recipes/flet-libgeos/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package:
name: flet-libgeos
version: 3.13.0
version: 3.13.1

build:
number: 10
number: 1

source:
url: http://download.osgeo.org/geos/geos-3.13.0.tar.bz2
url: http://download.osgeo.org/geos/geos-3.13.1.tar.bz2

requirements:
build:
- cmake
- cmake
4 changes: 2 additions & 2 deletions recipes/flet-libopaque/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{% set version = "0.99.8" %}
{% set version = "1.0.1" %}

package:
name: flet-libopaque
version: '{{ version }}'

build:
number: 10
number: 1

source:
url: https://github.com/stef/libopaque/archive/refs/tags/v{{ version }}.tar.gz
Expand Down
12 changes: 8 additions & 4 deletions recipes/gdal/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package:
name: gdal
version: 3.10.0
# Pinned to match `flet-libgdal` (the host C library). GDAL's Python
# bindings hard-require an exact major.minor match with libgdal —
# any bump here must come with flet-libgdal bumped to the same
# version, plus fiona / rasterio / pyogrio re-pinned in lockstep.
version: 3.13.1

requirements:
host:
- flet-libgdal 3.10.0
- flet-libgdal 3.13.1
# {% if sdk == 'android' %}
# libgdal links C++; the SWIG-generated _gdal.so loads via dlopen which
# needs libc++_shared.so on Android.
Expand All @@ -16,9 +20,9 @@ requirements:
# {% endif %}

build:
number: 10
number: 1
script_env:
GDAL_VERSION: 3.10.0
GDAL_VERSION: 3.13.1
GDAL_PREFIX: '{platlib}/opt'
GDAL_CFLAGS: ''
# {% if sdk != 'android' %}
Expand Down
Loading
Loading