feat: Android improvements needed for building NumPy and related packages (#2695)
* Use auditwheel on Android * Add auditwheel command to defaults * pkgconfig fixes * Pre-import ctypes before monkey-patching in _cross_venv * Set PKG_CONFIG and PKG_CONFIG_RELOCATE_PATHS variables * Initial attempt at using mzakharo/android-gfortran * Switch to using termux/ndk-toolchain-clang-with-flang * Move PKG_CONFIG variables from build_env to android_env * Simplify flang installation * Add cross build files for NumPy * Add ldpaths entry for libomp * Add `--rm` to docker command line * Make Rust and Fortran shims consistent * Update documentation * Default to API level 24 on all Python versions * Clarify comments * Cleanups * Fix tests: * Set up Android env after installing pkgconf * Add tests for successfully using an older API level * Previous commit's auditwheel failure is fixed in the auditwheel PR * Update how-it-works diagram * Add tests for repair errors * Add more repair tests * Add test for Meson and Fortran * Add test for cross build files * Improve test_api_level error message * Add xbuild-files option * use pypa/auditwheel@main * Remove dependencies which are no longer needed * Fix README * Update to auditwheel 6.7.0 * Fix compatibility with pkgconf 2.5.1.post2 * Documentation clarifications Co-authored-by: Joe Rickerby <joerick@mac.com> * Fortran shim improvements * Add Jinja variables to new_meson_project * Update run_example_ci_configs for changed new_meson_project signature * Add missing dependency to run_example_ci_configs --------- Co-authored-by: mayeut <mayeut@users.noreply.github.com> Co-authored-by: Joe Rickerby <joerick@mac.com>
This commit is contained in:
co-authored by
Joe Rickerby
mayeut
parent
e3e7cc9e07
commit
1cf64d0d3c
@@ -667,3 +667,51 @@ def test_xbuild_tools_handling(tmp_path: Path, definition: str, expected: list[s
|
||||
|
||||
local = options.build_options("cp313-ios_13_0_arm64_iphoneos")
|
||||
assert local.xbuild_tools == expected
|
||||
|
||||
|
||||
DEFAULT_XBUILD_FILES = {
|
||||
"numpy": [
|
||||
"numpy/_core/include/numpy/_numpyconfig.h",
|
||||
"numpy/_core/include/numpy/numpyconfig.h",
|
||||
"numpy/_core/lib/libnpymath.a",
|
||||
"numpy/random/lib/libnpyrandom.a",
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("definition", "expected"),
|
||||
[
|
||||
("", DEFAULT_XBUILD_FILES),
|
||||
('xbuild-files = ""', {}),
|
||||
('xbuild-files = "package1: file1"', {"package1": ["file1"]}),
|
||||
(
|
||||
"xbuild-files = \"package1: 'file1 with space'; package2: file2a file2b\"",
|
||||
{"package1": ["file1 with space"], "package2": ["file2a", "file2b"]},
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_xbuild_files(tmp_path: Path, definition: str, expected: dict[str, list[str]]) -> None:
|
||||
args = CommandLineArguments.defaults()
|
||||
args.package_dir = tmp_path
|
||||
|
||||
pyproject_toml: Path = tmp_path / "pyproject.toml"
|
||||
pyproject_toml.write_text(
|
||||
textwrap.dedent(
|
||||
f"""\
|
||||
[tool.cibuildwheel]
|
||||
{definition}
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
options = Options(platform="ios", command_line_arguments=args, env={})
|
||||
assert options.build_options(None).xbuild_files == expected
|
||||
|
||||
pyproject_toml.write_text(
|
||||
"[tool.cibuildwheel.xbuild-files]\n"
|
||||
+ "\n".join(f"{package} = {files}" for package, files in expected.items())
|
||||
)
|
||||
|
||||
options = Options(platform="ios", command_line_arguments=args, env={})
|
||||
assert options.build_options(None).xbuild_files == expected
|
||||
|
||||
Reference in New Issue
Block a user