Files
ecoarkpywhl/experiments/README.md
root 553b83953c
Some checks failed
EcoArk Wheel Pipeline CI / build (push) Failing after 1m41s
feat: add manifest-driven batch rebuild, numpy cross-compilation, and CI pipeline updates
- Add pipeline/manifest.py for packages.txt parsing
- Implement real numpy cross-compilation (rebuild.py) with OHOS NDK + vendored meson
- Extend CLI with --manifest, --build-from-source, --stage-integration modes
- Add recipes/, experiments/, and scripts/ for integration staging and artifact upload
- Update CI workflow with manifest validation, artifact upload, and release publishing
- Update Makefile and README with new targets and documentation
2026-05-13 14:16:24 +08:00

83 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NumPy 真实重编实验记录
## 实验目标
验证在 x86_64 主机上,使用 OHOS NDK 交叉编译器,为 `aarch64-linux-ohos` (HarmonyOS arm64-v8a) 目标编译 NumPy 1.26.4 完整 native 扩展的真实阻塞点。
## 实验环境
- 主机: x86_64 Debian forky/sid, Python 3.12.13
- OHOS NDK: `/home/program/tools/command-line-tools/sdk/default/openharmony/native/llvm`
- clang 15.0.4, target aarch64-linux-ohos
- sysroot 包含 musl libc + crt 启动文件
- 链接器: ld.lld 15.0.4
- Python 3.12 交叉编译产物 (来自 EcoArk): `/home/program/EcoArk/sdk/pythonrunner/src/main/cpp/third_party/python/`
## 实验方法
1. pip 创建 venv安装 Cython 0.29.36 + meson-python 0.15.0 + ninja + setuptools
2. 下载 numpy 1.26.4 sdist
3. 使用 numpy 自带的 vendored-meson含自定义 features 模块)
4. 编写 OHOS aarch64 meson cross-compilation file
5. 执行 `meson setup``meson compile`
## 结果总结
### 流程进度
| 步骤 | 状态 | 备注 |
|------|------|------|
| NDK 交叉编译器可用性 | ✅ | `clang --target=aarch64-linux-ohos` 可编译 C 程序 |
| meson setup | ✅ | 需 `longdouble_format=IEEE_QUAD_LE` 绕过目标不可执行的问题 |
| meson compile | ✅ | 195 个 target 全部通过,产出 19 个 .so |
| 产物的正确性 | ✅ | 全部 19 个 .so 均为 ARM aarch64 ELF |
| so 动态链接 | ✅ | 仅依赖 libc.so (musl) |
### 第一个真实阻塞点
**`numpy/core/meson.build:376` — 无法在交叉编译环境中运行测试程序**
- 原因: numpy 编译时需要运行 C 程序检测 `long double` 的内存布局格式IEEE_DOUBLE_LE / INTEL_EXTENDED_16_BYTES_LE / IEEE_QUAD_LE / IBM_DOUBLE_DOUBLE_LE 等)
- 交叉编译时跨架构二进制无法在 build machine 运行
- 解决: 在 cross file 的 `[properties]` 中预声明 `longdouble_format = 'IEEE_QUAD_LE'`
### 次要阻塞点
| 阻塞点 | 位置 | 解决方式 |
|--------|------|----------|
| Cython 0.29 依赖 distutils (Python 3.12 移除) | Cython → distutils.extension | `pip install setuptools` |
| meson 缺少 "features" 模块 | meson_cpu/x86/meson.build:2 | 必须使用 numpy 自带的 vendored-meson |
| 交叉编译时 sizeof 类检测跳过 | 多个 meson.build 位置 | 系统 meson 自动处理 |
| OpenBLAS 未找到 | numpy/core/meson.build | `-Dallow-noblas=true` 降级 |
### 待解决(未阻塞编译,但影响最终产物)
1. **SOABI 标签修正**: .so 文件名当前为 `cpython-312-x86_64-linux-gnu`(来自 build machine Python),需改为 `cpython-312-aarch64-linux-ohos`(对应目标平台的 SOABI
2. **Wheel 打包**: 需将纯 Python 文件(来自 source tree与交叉编译 .so 组合为 wheel修改 tag 为 `harmonyos_arm64`
3. **OpenBLAS**: numpy 当前使用内置 slow fallback BLASlapack_lite如需性能需交叉编译 OpenBLAS
4. **pyconfig.h 校准**: 当前使用 x86_64 原生 configure 生成的 pyconfig.h需针对 aarch64-linux-ohos + musl 重新生成
## 最小前置依赖清单
```
pip install Cython>=0.29.34,<3.1 meson-python>=0.15.0,<0.16.0 ninja setuptools
# 使用 numpy vendored meson内置 features 模块)
# cross file: ohos-aarch64-cross.ini
# meson args: -Dallow-noblas=true -Ddisable-threading=true -Ddisable-optimization=true
```
## 参考命令
```bash
# 完整编译流程(已验证通过)
pip install Cython==0.29.36 meson-python==0.15.0 ninja setuptools
tar xzf numpy-1.26.4.tar.gz
cd numpy-1.26.4
# 必须用 vendored meson
python3 vendored-meson/meson/meson.py setup build \
--cross-file ../ohos-aarch64-cross.ini \
-Dallow-noblas=true -Ddisable-threading=true -Ddisable-optimization=true
python3 vendored-meson/meson/meson.py compile -C build -j4
# 产出在 build/numpy/ 下
```