Files
Velix-MPV-Core/DOCS/BUILD_STRATEGY.md
T

2.6 KiB
Raw Blame History

HarmonyOS Native Build Strategy

Scope

Phase 1 只构建 HarmonyOS API 24 arm64 libmpv。不包含播放器 UI、XComponent 集成、ao_harmony、MPV OHCodec backend、性能优化、HDR 或真机运行声明。

Toolchain

Item Value
SDK /Applications/DevEco-Studio.app/Contents/sdk/default/openharmony
Version 6.1.1.125 / API 24
Target aarch64-linux-ohos
Sysroot <SDK>/native/sysroot
Compiler OHOS Clang 15.0.4
Meson 1.9.0,仓库隔离 venv
Ninja SDK 1.12.0
pkgconf 3.0.6,仓库隔离 host tool
Cross File toolchains/ohos-api24-arm64.ini
Prefix build/ohos-arm64/prefix

scripts/setup-ohos-env.sh 清空 CPATH、C_INCLUDE_PATH、CPLUS_INCLUDE_PATH、LIBRARY_PATH、CMAKE_PREFIX_PATH,并将 pkg-config 限制到 OHOS prefix。target 编译和链接必须同时带 --target 与 --sysroot。

Reproducible Build

scripts/build-all-ohos.sh

顺序固定为:host tools → pinned sources → C/C++ probes → SDK zlib metadata → OpenSSL → FFmpeg → FreeType/FriBidi/HarfBuzz/libass → libplacebo → MPV → 全量 ABI/污染/符号校验。

各步骤也可单独执行:

scripts/verify-toolchain.sh
scripts/build-openssl-ohos.sh
scripts/build-ffmpeg-ohos.sh
scripts/build-font-stack-ohos.sh
scripts/build-libplacebo-ohos.sh
scripts/build-mpv-ohos.sh
scripts/verify-ohos-prefix.sh

所有下载源码按 scripts/fetch-phase1-sources.sh 的 tag/commit 固定。构建目录可删除后重建,禁止从 Homebrew 或 macOS prefix 提供 target library。

MPV Configuration

MPV 使用 -Dauto_features=disabled,再显式启用 libmpv、GPL、plain-gl、OpenGL、vector、zlib。CLI、测试、脚本语言、桌面后端、平台硬件加速 backend 和 Vulkan 均关闭。实际 feature 列表以 DOCS/MPV_BUILD_REPORT.md 和 build/ohos-arm64/logs/mpv.log 为准。

MPV 源码仅增加明确的 host_machine.system() == 'ohos' 检测与 ohos feature。POSIX 路径继续复用现有 threads、timer、path、poll、IPC、subprocess 实现;这些能力当前只能标记 compile verified。

Output and Gates

主产物:build/ohos-arm64/prefix/lib/libmpv.so.2.5.0。

scripts/verify-ohos-prefix.sh 必须同时证明:

  • 所有 prefix 静态库成员为 AArch64 ELF;
  • libmpv 为 AArch64 ELF shared object;
  • 动态依赖仅来自 HarmonyOS SDK allowlist;
  • .pc/CMake/Ninja target metadata 无 Homebrew、/usr/local、.dylib 或 Apple framework;
  • Client API 与 OpenGL Render API 必需符号存在。

真机行为、CA store、XComponent/EGL 生命周期及 OHCodec buffer 语义留到后续阶段验证。