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

5.1 KiB

First Build Strategy

1. 目标与非目标

Phase 1 第一目标仅为:以 HarmonyOS API 24 arm64 工具链构建尽可能原始的 upstream MPV,产出 libmpv 及必需 Native libraries。不是播放视频、UI、硬解、HDR 或性能优化。

2. 已确认工具链

SDK root   /Applications/DevEco-Studio.app/Contents/sdk/default/openharmony
version    6.1.1.125 / API 24
sysroot    <SDK root>/native/sysroot
CC         <SDK root>/native/llvm/bin/clang
CXX        <SDK root>/native/llvm/bin/clang++
AR         <SDK root>/native/llvm/bin/llvm-ar
RANLIB     <SDK root>/native/llvm/bin/llvm-ranlib
STRIP      <SDK root>/native/llvm/bin/llvm-strip
LD         <SDK root>/native/llvm/bin/ld.lld
target     aarch64-linux-ohos
compiler   OHOS Clang 15.0.4

本机当前没有 meson、ninja、pkg-config 命令。Phase 1 必须先安装并记录版本;不能把 DevEco CMake 当作 MPV 的 Meson 替代品。

3. Meson cross file

建议新增仓库内 toolchains/ohos-api24-arm64.ini,路径允许通过环境生成而非硬编码提交个人目录。预计内容:

[binaries]
c = '/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/llvm/bin/clang'
cpp = '/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/llvm/bin/clang++'
ar = '/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/llvm/bin/llvm-ar'
strip = '/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/llvm/bin/llvm-strip'
pkg-config = 'pkg-config'

[built-in options]
c_args = ['--target=aarch64-linux-ohos', '--sysroot=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/sysroot', '-DOHOS_PLATFORM']
cpp_args = ['--target=aarch64-linux-ohos', '--sysroot=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/sysroot', '-DOHOS_PLATFORM']
c_link_args = ['--target=aarch64-linux-ohos', '--sysroot=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/sysroot']
cpp_link_args = ['--target=aarch64-linux-ohos', '--sysroot=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/sysroot']

[host_machine]
system = 'ohos'
cpu_family = 'aarch64'
cpu = 'armv8-a'
endian = 'little'

[properties]
needs_exe_wrapper = true

OHOS_PLATFORM 是本机 EGL header 选择 OHNativeWindow * 的条件;编译器只自动定义 __OHOS__。PKG_CONFIG_LIBDIR 必须只包含 OHOS staging prefix 的 pkgconfig 路径,禁止找到 macOS 宿主库。

4. 依赖顺序

  1. 建立独立 staging prefix,例如 build/ohos-arm64/prefix。
  2. zlib:优先使用 SDK libz.so;验证 Meson/pkg-config 可见性。
  3. TLS:交叉构建锁版 OpenSSL,确认 CA 策略和许可证。
  4. FFmpeg:先 software decode/network 版本;再受控开启 --enable-ohcodec。
  5. FreeType → HarfBuzz/FriBidi → libass。
  6. libplacebo:首版只开启 MPV 所需最小能力;Vulkan 可暂关,保留 GLES/OpenGL 方向。
  7. MPV:只构建 libmpv,关闭不适用桌面平台 backend。

每个依赖必须安装 .pc 到 staging prefix;静态依赖需要 Libs.private 完整。

5. MPV 最小 Patch 前的预计配置

以下命令是 Phase 1 设计,不是编译成功声明:

PKG_CONFIG_LIBDIR="$OHOS_PREFIX/lib/pkgconfig:$OHOS_PREFIX/share/pkgconfig" \
meson setup build/ohos-arm64/mpv \
  --cross-file toolchains/ohos-api24-arm64.ini \
  --prefix "$OHOS_PREFIX" \
  --default-library shared \
  -Dcplayer=false \
  -Dlibmpv=true \
  -Dtests=false \
  -Dfuzzers=false \
  -Dplain-gl=enabled \
  -Degl=enabled \
  -Dvulkan=disabled \
  -Dx11=disabled \
  -Dwayland=disabled \
  -Ddrm=disabled \
  -Dgbm=disabled \
  -Dalsa=disabled \
  -Dpipewire=disabled \
  -Dpulse=disabled \
  -Djack=disabled \
  -Doss-audio=disabled \
  -Dsndio=disabled \
  -Daaudio=disabled \
  -Daudiotrack=disabled \
  -Dopensles=disabled \
  -Dcocoa=disabled \
  -Dd3d11=disabled \
  -Ddirect3d=disabled \
  -Dwasapi=disabled \
  -Dcuda-hwaccel=disabled \
  -Dvaapi=disabled \
  -Dvdpau=disabled \
  -Dandroid-media-ndk=disabled \
  -Dlibcurl=disabled \
  -Djavascript=disabled \
  -Dlua=disabled \
  -Dmanpage-build=disabled

meson compile -C build/ohos-arm64/mpv -v

首次 configure 前需要先增加最小 ohos OS detection,否则 MPV 会把它归为泛 POSIX并选择 Linux timer;应一次修一个 blocker并记入 DOCS/BUILD_ISSUES.md。

6. 预计 Native 链接库

基础:libc/libm、pthread、dl、z。渲染集成阶段:EGL、GLESv3 或 GLESv2、native_window、ace_ndk。音频阶段:ohaudio。硬解阶段:native_media_vdec、native_media_codecbase、native_media_core、native_window。日志可选 hilog_ndk。

不得在 Phase 1 把尚未使用的全部 SDK 库一次性链接进去。

7. Blocker 处理与验收

  • 创建 DOCS/BUILD_ISSUES.md,每个原始错误独立编号;一个 patch 对应一个根因。
  • 禁止批量 #ifdef 掉 core、fake success 或空 backend。
  • 产物验收:架构为 AArch64;动态依赖无 macOS/Android 库;导出 libmpv public symbols;记录尺寸、warnings、耗时、enabled/disabled features。
  • 完成后生成 DOCS/MPV_BUILD_REPORT.md;当前 Phase 0 不提前创建伪报告。