From 9109cb9ff6be607f2b310f128cbc2f7f464b3534 Mon Sep 17 00:00:00 2001 From: guoxx Date: Wed, 11 Feb 2026 14:45:25 +0800 Subject: [PATCH 1/2] feat(android): add support for Android platform in CMake configuration - Detect Android platform and set relevant build options - Disable Hello ImGui by default on Android - Adjust OpenGL backend linking for Android - Update pyproject.toml with Android-specific configurations --- .../internal/add_imgui_bundle_bindings.cmake | 14 +++++++-- pyproject.toml | 30 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/imgui_bundle_cmake/internal/add_imgui_bundle_bindings.cmake b/imgui_bundle_cmake/internal/add_imgui_bundle_bindings.cmake index 7a54d74f..2e832d4a 100644 --- a/imgui_bundle_cmake/internal/add_imgui_bundle_bindings.cmake +++ b/imgui_bundle_cmake/internal/add_imgui_bundle_bindings.cmake @@ -140,8 +140,18 @@ function(add_imgui_bundle_bindings) target_link_libraries(${python_native_module_name} PUBLIC ${bound_library}) - # Link with OpenGL (necessary for nanobind) - if (NOT EMSCRIPTEN) + # On Android, explicitly link against the Python library + if(ANDROID) + if(DEFINED ENV{ANDROID_PYTHON_LIBRARY}) + message(STATUS "Android: Linking ${python_native_module_name} against Python library: $ENV{ANDROID_PYTHON_LIBRARY}") + target_link_libraries(${python_native_module_name} PRIVATE "$ENV{ANDROID_PYTHON_LIBRARY}") + else() + message(WARNING "Android: ANDROID_PYTHON_LIBRARY environment variable not set!") + endif() + endif() + + # Link with OpenGL (necessary for nanobind on desktop platforms) + if (NOT EMSCRIPTEN AND NOT ANDROID) find_package(OpenGL REQUIRED) target_link_libraries(${python_native_module_name} PUBLIC OpenGL::GL) endif() diff --git a/pyproject.toml b/pyproject.toml index 0f60b19b..f4087985 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -120,6 +120,15 @@ cmake.version = ">=3.26.1" build.verbose = true logging.level = "INFO" +[[tool.scikit-build.overrides]] +if.platform-system = "android" +cmake.args = [ + "-DPython_FIND_STRATEGY=LOCATION", + "-DIMGUI_BUNDLE_WITH_HELLO_IMGUI=OFF", + "-DIMGUI_BUNDLE_PYTHON_DISABLE_OPENGL2=ON", + "-DIMGUI_BUNDLE_PYTHON_DISABLE_OPENGL3=ON", +] + [tool.isort] profile = "black" @@ -202,6 +211,27 @@ before-all = "apk add xorg-server-dev libxcursor-dev libxi-dev libxinerama-dev l [tool.cibuildwheel.windows] skip = ["*win32"] +#------------------------------------ +# android wheels options +#------------------------------------ +[tool.cibuildwheel.android] +build = "cp313-*" +archs = ["arm64_v8a"] +before-build = "pip install numpy" + +[tool.cibuildwheel.android.environment] +ANDROID_API_LEVEL = "31" +ANDROID_ABI = "arm64-v8a" +IMGUI_BUNDLE_WITH_HELLO_IMGUI = "OFF" +IMGUI_BUNDLE_WITH_IMMAPP = "OFF" +IMGUI_BUNDLE_WITH_IMMVISION = "OFF" +IMGUI_BUNDLE_WITH_IMFILEDIALOG = "OFF" +IMGUI_BUNDLE_WITH_IMGUI_TEX_INSPECT = "OFF" +IMGUI_BUNDLE_WITH_IMGUI_TEST_ENGINE = "OFF" +IMGUI_BUNDLE_PYTHON_DISABLE_OPENGL2 = "ON" +IMGUI_BUNDLE_PYTHON_DISABLE_OPENGL3 = "ON" +ANDROID_PYTHON_LIBRARY = "$(python -c 'from pathlib import Path; import os; tf = Path(os.environ[\"CMAKE_TOOLCHAIN_FILE\"]); print(next((tf.parent / \"python\" / \"prefix\" / \"lib\").glob(\"libpython3.*.so\")))')" + # ═══════════════════════════════════════════════════════════════════════════ # Custom Build Configurations From d70f76e759f10576898faf00a84b0825295b6a43 Mon Sep 17 00:00:00 2001 From: guoxx Date: Mon, 16 Feb 2026 15:28:30 +0800 Subject: [PATCH 2/2] fix(android): remove unnecessary numpy installation step in before-build --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f4087985..4bd13db8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -217,7 +217,6 @@ skip = ["*win32"] [tool.cibuildwheel.android] build = "cp313-*" archs = ["arm64_v8a"] -before-build = "pip install numpy" [tool.cibuildwheel.android.environment] ANDROID_API_LEVEL = "31"