build: complete HarmonyOS arm64 libmpv phase 1
This commit is contained in:
1 parent
f178d38ce6
commit
75ed9dd2f4
34 files changed
+913
-151
No files matched your search
@@ -1,3 +1,5 @@
|
||||
/subprojects/*
|
||||
!/subprojects/packagefiles
|
||||
!/subprojects/*.wrap
|
||||
/build/
|
||||
.DS_Store
|
||||
@@ -0,0 +1,97 @@
|
||||
# Phase 1 Build Issues
|
||||
|
||||
## BUILD-001
|
||||
|
||||
Component: FFmpeg configure
|
||||
|
||||
Command: `scripts/build-ffmpeg-ohos.sh`
|
||||
|
||||
Original Error: `Unknown option "--disable-postproc".`
|
||||
|
||||
File: `scripts/build-ffmpeg-ohos.sh`
|
||||
|
||||
Root Cause: 当前 FFmpeg 已移除独立 postproc 配置项,Phase 0 示例参数过期。
|
||||
|
||||
Platform Difference: 无;属于当前 upstream 配置接口变化。
|
||||
|
||||
Fix: 删除不存在的 `--disable-postproc`,以当前 `configure --help` 为准。
|
||||
|
||||
Files Changed: `scripts/build-ffmpeg-ohos.sh`
|
||||
|
||||
Patch Required: Build script only
|
||||
|
||||
Result: configure 继续执行。
|
||||
|
||||
Regression Risk: Low
|
||||
|
||||
## BUILD-002
|
||||
|
||||
Component: FFmpeg compiler/linker probe
|
||||
|
||||
Command: `scripts/build-ffmpeg-ohos.sh`
|
||||
|
||||
Original Error: `ld: library 'System' not found`,随后 `C compiler test failed`。
|
||||
|
||||
File: `scripts/build-ffmpeg-ohos.sh`、`ffbuild/config.log`
|
||||
|
||||
Root Cause: `--sysroot` 不会自动改变 Clang target;链接探针仍按 macOS 目标寻找 `libSystem`。
|
||||
|
||||
Platform Difference: macOS arm64 与 OHOS arm64 架构相同,但 ABI、对象格式和系统库不同。
|
||||
|
||||
Fix: 同时向 CFLAGS 和 LDFLAGS 显式传入 `--target=aarch64-linux-ohos`。
|
||||
|
||||
Files Changed: `scripts/build-ffmpeg-ohos.sh`
|
||||
|
||||
Patch Required: Build script only
|
||||
|
||||
Result: FFmpeg configure、build、install 成功,产物为 AArch64 ELF。
|
||||
|
||||
Regression Risk: Low
|
||||
|
||||
## BUILD-003
|
||||
|
||||
Component: FreeType zlib resolution
|
||||
|
||||
Command: `scripts/build-font-stack-ohos.sh`
|
||||
|
||||
Original Error: `ERROR: Subproject zlib is buildable: NO`,Meson 尝试下载 WrapDB zlib。
|
||||
|
||||
File: `scripts/build-font-stack-ohos.sh`
|
||||
|
||||
Root Cause: FreeType 的 `zlib=external` 表示构建 fallback subproject,不表示使用外部系统库。
|
||||
|
||||
Platform Difference: SDK 已提供 target `libz.so`,不应另行下载 target zlib。
|
||||
|
||||
Fix: 使用当前 FreeType 定义的 `zlib=system`,通过隔离 `.pc` 指向 SDK AArch64 zlib。
|
||||
|
||||
Files Changed: `scripts/build-font-stack-ohos.sh`
|
||||
|
||||
Patch Required: Build script only
|
||||
|
||||
Result: FreeType 2.14.3 静态库构建成功。
|
||||
|
||||
Regression Risk: Low
|
||||
|
||||
## BUILD-004
|
||||
|
||||
Component: Meson cross-file pkg-config resolution
|
||||
|
||||
Command: `scripts/build-font-stack-ohos.sh`
|
||||
|
||||
Original Error: HarfBuzz 报 `Dependency 'freetype2' is required but not found`,包装器被解析到 HarfBuzz 源码目录。
|
||||
|
||||
File: `toolchains/ohos-api24-arm64.ini`
|
||||
|
||||
Root Cause: `@GLOBAL_SOURCE_ROOT@` 指向当前被配置项目的 source root,不固定指向 Velix-MPV-Core。
|
||||
|
||||
Platform Difference: 多个独立 Meson 源码树共享一个 target prefix。
|
||||
|
||||
Fix: 使用以 Cross File 自身为基准的 `@DIRNAME@/../` 定位包装器与 prefix。
|
||||
|
||||
Files Changed: `toolchains/ohos-api24-arm64.ini`
|
||||
|
||||
Patch Required: Cross File only
|
||||
|
||||
Result: FreeType、HarfBuzz、libass 和 MPV 均只从 OHOS prefix 解析依赖。
|
||||
|
||||
Regression Risk: Low
|
||||
+49
-111
@@ -1,126 +1,64 @@
|
||||
# First Build Strategy
|
||||
# HarmonyOS Native Build Strategy
|
||||
|
||||
## 1. 目标与非目标
|
||||
## Scope
|
||||
|
||||
Phase 1 第一目标仅为:以 HarmonyOS API 24 arm64 工具链构建尽可能原始的 upstream MPV,产出 `libmpv` 及必需 Native libraries。不是播放视频、UI、硬解、HDR 或性能优化。
|
||||
Phase 1 只构建 HarmonyOS API 24 arm64 `libmpv`。不包含播放器 UI、XComponent 集成、`ao_harmony`、MPV OHCodec backend、性能优化、HDR 或真机运行声明。
|
||||
|
||||
## 2. 已确认工具链
|
||||
## Toolchain
|
||||
|
||||
```text
|
||||
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
|
||||
```
|
||||
| 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` |
|
||||
|
||||
本机当前没有 `meson`、`ninja`、`pkg-config` 命令。Phase 1 必须先安装并记录版本;不能把 DevEco CMake 当作 MPV 的 Meson 替代品。
|
||||
`scripts/setup-ohos-env.sh` 清空 `CPATH`、`C_INCLUDE_PATH`、`CPLUS_INCLUDE_PATH`、`LIBRARY_PATH`、`CMAKE_PREFIX_PATH`,并将 pkg-config 限制到 OHOS prefix。target 编译和链接必须同时带 `--target` 与 `--sysroot`。
|
||||
|
||||
## 3. Meson cross file
|
||||
|
||||
建议新增仓库内 `toolchains/ohos-api24-arm64.ini`,路径允许通过环境生成而非硬编码提交个人目录。预计内容:
|
||||
|
||||
```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 设计,不是编译成功声明:
|
||||
## Reproducible Build
|
||||
|
||||
```sh
|
||||
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
|
||||
scripts/build-all-ohos.sh
|
||||
```
|
||||
|
||||
首次 configure 前需要先增加最小 `ohos` OS detection,否则 MPV 会把它归为泛 POSIX并选择 Linux timer;应一次修一个 blocker并记入 `DOCS/BUILD_ISSUES.md`。
|
||||
顺序固定为:host tools → pinned sources → C/C++ probes → SDK zlib metadata → OpenSSL → FFmpeg → FreeType/FriBidi/HarfBuzz/libass → libplacebo → MPV → 全量 ABI/污染/符号校验。
|
||||
|
||||
## 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。
|
||||
```sh
|
||||
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
|
||||
```
|
||||
|
||||
不得在 Phase 1 把尚未使用的全部 SDK 库一次性链接进去。
|
||||
所有下载源码按 `scripts/fetch-phase1-sources.sh` 的 tag/commit 固定。构建目录可删除后重建,禁止从 Homebrew 或 macOS prefix 提供 target library。
|
||||
|
||||
## 7. Blocker 处理与验收
|
||||
## MPV Configuration
|
||||
|
||||
- 创建 `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 不提前创建伪报告。
|
||||
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 语义留到后续阶段验证。
|
||||
@@ -0,0 +1,60 @@
|
||||
# HarmonyOS First Native Build Report
|
||||
|
||||
## Result
|
||||
|
||||
Phase 1 已在 DevEco Studio OpenHarmony SDK 6.1.1.125 / API 24 下生成真实 arm64 `libmpv`。本报告只证明编译、链接和静态检查,不声明真机运行语义已验证。
|
||||
|
||||
| 项目 | 结果 |
|
||||
|---|---|
|
||||
| Origin | `https://git.leee.xin/leeexin/Velix-MPV-Core.git` |
|
||||
| origin/harmony-port | 以本次 Phase 1 提交推送后的 commit 为准 |
|
||||
| MPV | `182fa6ca49f455cadb884858f386e2f00540aeb7` / 0.41.0-UNKNOWN |
|
||||
| FFmpeg | `3acec0a1af2dda0a0838689b8b8649e7deb080a0` |
|
||||
| libmpv | `build/ohos-arm64/prefix/lib/libmpv.so.2.5.0` |
|
||||
| Size | 34,297,376 bytes |
|
||||
| SHA-256 | `e70c5c4e81cb40f03f5334b9d9deae9afa836b7e420a950a7111099bb87e3a87` |
|
||||
| Architecture / ABI | ELF64, little-endian, AArch64, System V ABI, shared object, SONAME `libmpv.so.2` |
|
||||
| Toolchain | OHOS Clang/LLD 15.0.4, target `aarch64-linux-ohos`, musl sysroot |
|
||||
| Source patches | 1:MPV Meson 增加明确 `ohos` platform feature;依赖源码修改 0 |
|
||||
| Build issues | 4,全部关闭 |
|
||||
|
||||
## Features
|
||||
|
||||
MPV enabled:`clone`、`ffmpeg`、`gl`、`glibc-thread-name`、`glob`、`glob-posix`、`gpl`、`libass`、`libdl`、`libplacebo`、`linux-fstatfs`、`memrchr`、`ohos`、`posix`、`posix-shm`、`ppoll`、`pthread-condattr-setclock`、`vector`、`vt.h`、`zlib`、`libmpv shared`、`plain-gl`。
|
||||
|
||||
FFmpeg enabled:软件解码、demux、network、HTTP/HTTPS/TCP/TLS、OpenSSL 3.6.4、SDK zlib、OHCodec H.264/HEVC decoder/encoder。FFmpeg GPL/version3/nonfree 均为 0。
|
||||
|
||||
Disabled:mpv CLI、tests、fuzzers、Lua/JavaScript、libcurl、桌面音视频后端、X11、Wayland、DRM/GBM、Cocoa、Windows backend、Android-specific backend、Vulkan、VAAPI、VDPAU、CUDA。libplacebo 的 Vulkan/OpenGL 自有 backend 关闭;MPV 自身 OpenGL Render API 保留。
|
||||
|
||||
## Verification
|
||||
|
||||
- 最小 C/C++ 探针均为 OHOS AArch64 ELF;C++ 探针依赖 SDK `libc++_shared.so`。
|
||||
- prefix 内 13 个静态库的全部可见 archive object 均通过 AArch64 ELF 检查。
|
||||
- `libmpv.so.2.5.0` 动态依赖仅为 `libc.so`、`libz.so`、`libnative_media_vdec.so`、`libnative_media_venc.so`、`libnative_media_codecbase.so`、`libnative_media_core.so`、`libnative_window.so`。
|
||||
- target metadata 未发现 Homebrew、`/usr/local`、`.dylib`、Apple framework 或 Mach-O 污染。
|
||||
- 已验证 `mpv_create`、`mpv_initialize`、`mpv_command`、`mpv_set_property`、`mpv_get_property`、`mpv_render_context_create`、`mpv_render_context_render`、`mpv_render_context_set_update_callback`、`mpv_render_context_free`。
|
||||
- `scripts/build-all-ohos.sh` 已连续完成第二次全链路构建与最终校验。
|
||||
|
||||
## Warnings
|
||||
|
||||
剩余 18 条构建 warning:FFmpeg 5 条 upstream fallthrough/unused-function;FriBidi 5 条 enum-conversion;HarfBuzz 1 条仅开发者需要 Ragel;libass/MPV 4 条非阻塞 CMake compiler-state 探测;libplacebo 3 条无 graphics backend/name-prefix 提示。均不影响当前 target 产物,未通过关闭警告掩盖问题。
|
||||
|
||||
## Dependency Graph
|
||||
|
||||
实际依赖图见 `DOCS/PHASE1_DEPENDENCY_MATRIX.md`。所有第三方库均静态进入 `libmpv`,SDK zlib、OHCodec 与 libc 保持系统动态依赖。
|
||||
|
||||
## License
|
||||
|
||||
仓库与 `libmpv` 当前按 MPV GPL-2.0-or-later 路线管理。FFmpeg 为 LGPL 配置且未启用 GPL/nonfree;OpenSSL 为 Apache-2.0;静态 LGPL 组件仍需在正式发布时履行可重新链接、源码与 notices 义务。本文件不是最终发行 notice。
|
||||
|
||||
## Phase 2 Risks
|
||||
|
||||
1. POSIX、DNS、HTTP/HTTPS 与动态库加载目前仅 compile/link verified,尚未真机 runtime verified。
|
||||
2. XComponent / OHNativeWindow 生命周期、线程归属、窗口销毁与 EGL context loss 尚未验证。
|
||||
3. MPV plain-gl 与 HarmonyOS EGL/GLES 的实际格式、扩展、同步和首帧路径尚未联调。
|
||||
4. FFmpeg OHCodec 已编译,但 MPV hwdec 选择、surface/output buffer 生命周期及零拷贝均未验证。
|
||||
5. OpenSSL CA 路径与 HAP 内依赖打包、SDK系统库版本兼容仍需真机验证。
|
||||
|
||||
## Phase 2 Entry Condition
|
||||
|
||||
已具备 XComponent + OHNativeWindow + EGL + libmpv OpenGL Render API 真机首帧测试的编译侧条件:SDK API 可用、libmpv 可链接、OpenGL Render API symbols 齐全。尚不代表首帧已经成功;Phase 2 必须在真机建立窗口和 EGL context 后验证。
|
||||
@@ -0,0 +1,40 @@
|
||||
# Phase 1 Dependency Matrix
|
||||
|
||||
基线:MPV `182fa6ca49f455cadb884858f386e2f00540aeb7`。状态来自当前 `meson.build`、实际 Meson 配置与最终产物,不沿用 Phase 0 假设。
|
||||
|
||||
| Dependency | Version / Commit | Required / Optional | Build System | License | Link | OHOS Status | pkg-config | Blocking libmpv |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| libavcodec | 63.8.101 / FFmpeg `3acec0a1` | Required | configure + Make | LGPL-2.1+ | Static | Built AArch64 | `libavcodec` | Yes |
|
||||
| libavfilter | 12.3.101 / FFmpeg `3acec0a1` | Required | configure + Make | LGPL-2.1+ | Static | Built AArch64 | `libavfilter` | Yes |
|
||||
| libavformat | 63.6.100 / FFmpeg `3acec0a1` | Required | configure + Make | LGPL-2.1+ | Static | Built AArch64 | `libavformat` | Yes |
|
||||
| libavutil | 61.6.100 / FFmpeg `3acec0a1` | Required | configure + Make | LGPL-2.1+ | Static | Built AArch64 | `libavutil` | Yes |
|
||||
| libswresample | 7.2.100 / FFmpeg `3acec0a1` | Required | configure + Make | LGPL-2.1+ | Static | Built AArch64 | `libswresample` | Yes |
|
||||
| libswscale | 10.2.100 / FFmpeg `3acec0a1` | Required | configure + Make | LGPL-2.1+ | Static | Built AArch64 | `libswscale` | Yes |
|
||||
| libplacebo | 7.360.1 / `cee9b076` | Required | Meson | LGPL-2.1+ | Static | Built AArch64; graphics backends off | `libplacebo` | Yes |
|
||||
| libass | 0.17.5 / `4a05d812` | Required | Meson | ISC | Static | Built AArch64 | `libass` | Yes |
|
||||
| FreeType | 2.14.3 / `0a0221a1` | libass transitive | Meson | FTL/GPL-2.0 dual | Static | Built AArch64 | `freetype2` | Yes via libass |
|
||||
| HarfBuzz | 14.4.0 / `36cb489c` | libass transitive | Meson | MIT | Static | Built AArch64 | `harfbuzz` | Yes via libass |
|
||||
| FriBidi | 1.0.16 / `68162bab` | libass transitive | Meson | LGPL-2.1+ | Static | Built AArch64 | `fribidi` | Yes via libass |
|
||||
| OpenSSL | 3.6.4 / `d3c1b116` | HTTPS transitive | Configure + Make | Apache-2.0 | Static | Built AArch64 | `openssl` | Yes for HTTPS |
|
||||
| zlib | SDK 1.2.13 | MPV optional; enabled | SDK | Zlib | Dynamic | SDK AArch64 `libz.so` | generated `zlib` | No |
|
||||
| threads / dl / m / rt | SDK API 24 | Platform required | SDK | SDK system | Dynamic/system | Compile verified | Meson compiler/system | Yes |
|
||||
| EGL / GLES | SDK API 24 | Phase 2 integration | SDK | SDK system | Not linked | Headers/libs available | No target `.pc` used | No |
|
||||
| libcurl, libarchive, libbluray, libavdevice | Optional | Disabled | Various | Various | None | Not built | Not queried or skipped | No |
|
||||
| CD/DVD, Lua, MuJS, uchardet, VapourSynth, zimg, rubberband | Optional | Disabled | Various | Various | None | Not built | Skipped | No |
|
||||
| ALSA, AudioUnit, CoreAudio, JACK, OpenAL, AAudio, OpenSLES, OSS, PipeWire, Pulse, sndio, WASAPI | Optional AO | Disabled | Various | Various | None | Not applicable | Skipped | No |
|
||||
| X11, Wayland, DRM/GBM, Cocoa, D3D11, Vulkan, VAAPI, VDPAU, CUDA, Android Media NDK | Optional VO/hwaccel | Disabled | Various | Various | None | Not applicable | Skipped | No |
|
||||
|
||||
实际依赖图:
|
||||
|
||||
```text
|
||||
OpenSSL ───────────────┐
|
||||
SDK zlib ──────────────┼─> FFmpeg ───────────────┐
|
||||
└─> FreeType ─> HarfBuzz ─┤
|
||||
FriBidi ──────────────────────────────┐ │
|
||||
FreeType + HarfBuzz + FriBidi ───────> libass ───┤
|
||||
libplacebo ──────────────────────────────────────┼─> libmpv.so
|
||||
SDK libc/pthread/dl/m/rt/z ──────────────────────┘
|
||||
SDK native_media_* + native_window <─ FFmpeg OHCodec
|
||||
```
|
||||
|
||||
所有 `.pc` 仅由 `scripts/pkg-config-ohos.sh` 从 OHOS prefix 解析。最终校验未发现 `/opt/homebrew`、`/usr/local`、Mach-O 或 `.dylib` target 输入。
|
||||
+1
-1
@@ -3,4 +3,4 @@
|
||||
- `GPL-2.0-or-later.txt`:MPV 默认构建所适用的 GPL v2 文本。
|
||||
- `LGPL-2.1-or-later.txt`:MPV 合规 LGPL-only 构建及 FFmpeg 默认构建所涉及的 LGPL v2.1 文本。
|
||||
|
||||
第三方源码未 vendoring 到本仓库,因此其许可证正文不在未锁版前复制。Phase 1 锁定每个依赖 commit 后,必须复制对应仓库的原始许可证正文并更新 `LICENSE_AUDIT.md`。
|
||||
Phase 1 已锁定第三方源码,实际版本、原始许可证文件位置和源码仓库见 `LICENSE_AUDIT.md`。正式发行包必须从对应锁定 commit 收集原始许可证与版权声明;本目录当前只保存 MPV/FFmpeg 核心 GPL/LGPL 正文,不得作为完整 Release notices 使用。
|
||||
+24
-29
@@ -1,39 +1,34 @@
|
||||
# License Audit
|
||||
|
||||
审计基线:MPV `182fa6ca49f455cadb884858f386e2f00540aeb7`。本文件是工程审计记录,不构成法律意见。
|
||||
审计基线:MPV `182fa6ca49f455cadb884858f386e2f00540aeb7`,Phase 1 实际构建。本文是工程记录,不构成法律意见。
|
||||
|
||||
## 当前结论
|
||||
## Conclusion
|
||||
|
||||
仓库分离不改变链接后二进制的许可证。第一版按 MPV 默认 GPLv2+ 口径管理,除非后续对 MPV、FFmpeg 及全部链接依赖完成 LGPL-only 的逐文件、逐选项和链接方式审计。MPV 自身 `Copyright` 明确说明 `-Dgpl=false` 只是排除已知 GPL-only 文件的辅助开关,并不自动产生 LGPL 授权结论。
|
||||
Velix-MPV-Core 与最终 `libmpv` 按 MPV 默认 GPL-2.0-or-later 路线管理。独立仓库及私有 Gitea 不改变 upstream 义务,也不使许可证自动隔离。当前不得宣称 LGPL-only。
|
||||
|
||||
Phase 0 尚未生成二进制,因此“最终实际链接库”尚不存在。下表区分计划必需与候选依赖;Phase 1 必须以 link map、`readelf -d` 和构建配置替换“预计”字段。
|
||||
FFmpeg 实际配置为 `CONFIG_GPL=0`、`CONFIG_VERSION3=0`、`CONFIG_NONFREE=0`。所有第三方库静态进入 `libmpv`,因此正式发布仍需满足 LGPL 组件的源码、版权、修改说明与可重新链接要求。
|
||||
|
||||
| 组件 | 许可证 | 计划链接 | 必需 | GPL-only / 风险 | 依据与状态 |
|
||||
|---|---|---:|---:|---|---|
|
||||
| MPV | 默认 GPL-2.0-or-later;满足完整条件时可 LGPL-2.1-or-later | 动态 `libmpv` 优先 | 是 | 默认构建含 GPL-only 文件 | 本仓库 `Copyright`、`LICENSE.GPL`、`LICENSE.LGPL` |
|
||||
| FFmpeg | 默认 LGPL-2.1-or-later;`--enable-gpl` 后 GPL;`--enable-nonfree` 不可再分发 | 动态优先 | 是 | 外部库和 configure 选项可改变整体许可证 | FFmpeg `LICENSE.md`;Phase 1 锁 commit |
|
||||
| libplacebo | LGPL-2.1-or-later(待锁定版本复核原文) | 静态或动态待定 | 是(当前 MPV Meson 强依赖) | 静态链接影响 LGPL 重新链接义务 | MPV `meson.build` 要求 `>=7.360.1` |
|
||||
| libass | ISC(待锁定版本复核原文) | 动态优先 | 是 | 还会引入 FreeType、HarfBuzz、FriBidi | MPV `meson.build` 要求 `>=0.12.2` |
|
||||
| zlib | Zlib | SDK 动态 `libz.so` 优先 | 可选但建议启用 | 低 | 本机 API 24 SDK 提供头文件和库 |
|
||||
| TLS 实现 | OpenSSL 3.x 为首选候选,Apache-2.0 | 动态优先 | HTTPS 必需 | FFmpeg GPLv2 模式与 OpenSSL 组合需单独复核;不得同时启用 nonfree 后分发 | 尚未锁版;Harmony `libnet_ssl.so` 不能直接当作 FFmpeg TLS backend |
|
||||
| FreeType | FTL 或 GPL 双许可证 | 由 libass 引入 | 字幕必需 | 选择 FTL 口径并保存原文 | NEED VERIFY at pin |
|
||||
| HarfBuzz | MIT | 由 libass 引入 | 复杂文本必需 | 低 | NEED VERIFY at pin |
|
||||
| FriBidi | LGPL-2.1-or-later | 由 libass 引入 | 双向文本必需 | 动态链接优先 | NEED VERIFY at pin |
|
||||
| iconv | 系统 libc 或独立实现许可证 | 系统符号优先 | 字符集处理 | 若引入 GNU libiconv,需审核 LGPL | Phase 1 探测 |
|
||||
| libcurl | curl license | 默认关闭;网络交给 FFmpeg | 否 | 增加 TLS/HTTP 依赖面 | MPV `-Dlibcurl=disabled` |
|
||||
| uchardet | MPL-1.1 / GPL-2.0-or-later / LGPL-2.1-or-later 多许可证 | 默认关闭 | 否 | 需选择许可口径 | NEED VERIFY at pin |
|
||||
| MuJS | ISC | 默认关闭 | 否 | 低 | JS 功能首版不需要 |
|
||||
| HarmonyOS Native SDK stubs | SDK/EULA 与各头文件声明并存 | 系统动态库 | 是 | 发行许可由 HarmonyOS SDK 条款约束 | 需在发版前由法务核查 SDK redistributable 边界 |
|
||||
| Component | Version / Commit | License | Feature | Link | Modified | Source Location |
|
||||
|---|---|---|---|---|---|---|
|
||||
| MPV | 0.41.0-UNKNOWN / `182fa6ca49` | GPL-2.0-or-later default | libmpv, plain-gl, subtitles, network | Shared output | Yes, OHOS Meson detection | `upstream` remote / current repository |
|
||||
| FFmpeg | `3acec0a1` | LGPL-2.1-or-later configuration | decode, demux, filter, network, HTTPS, OHCodec | Static | No | `https://git.ffmpeg.org/ffmpeg.git` |
|
||||
| libplacebo | 7.360.1 / `cee9b076` | LGPL-2.1-or-later | core/shader generation | Static | No | `https://code.videolan.org/videolan/libplacebo.git` |
|
||||
| libass | 0.17.5 / `4a05d812` | ISC | subtitle rendering | Static | No | `https://github.com/libass/libass.git` |
|
||||
| FreeType | 2.14.3 / `0a0221a1` | FreeType License or GPL-2.0 | font rasterization | Static | No | `https://github.com/freetype/freetype.git` |
|
||||
| HarfBuzz | 14.4.0 / `36cb489c` | MIT | text shaping | Static | No | `https://github.com/harfbuzz/harfbuzz.git` |
|
||||
| FriBidi | 1.0.16 / `68162bab` | LGPL-2.1-or-later | bidirectional text | Static | No | `https://github.com/fribidi/fribidi.git` |
|
||||
| OpenSSL | 3.6.4 / `d3c1b116` | Apache-2.0 | FFmpeg TLS/HTTPS | Static | No | `https://github.com/openssl/openssl.git` |
|
||||
| zlib | SDK 1.2.13 | Zlib | FFmpeg/FreeType/MPV compression | System dynamic | No | HarmonyOS Native SDK |
|
||||
| HarmonyOS Native SDK stubs | 6.1.1.125 / API 24 | SDK terms and header notices | libc, zlib, OHCodec, native window | System dynamic | No | DevEco Studio SDK |
|
||||
|
||||
## MPV GPL-only 范围
|
||||
## Actual Link State
|
||||
|
||||
MPV `Copyright` 当前列出 JACK、OSS、DVB、CDDA、DVD、CACA、legacy Direct3D、VAAPI VO、VDPAU、X11/Xv 等 GPL-only 文件。HarmonyOS 首版均不需要,但这不等于整个产物自动成为 LGPL。
|
||||
`libmpv.so.2.5.0` 的 `DT_NEEDED` 仅包含 `libc.so`、`libz.so`、`libnative_media_vdec.so`、`libnative_media_venc.so`、`libnative_media_codecbase.so`、`libnative_media_core.so`、`libnative_window.so`。其余依赖为静态链接。未发现 FFmpeg nonfree、Homebrew 或 macOS target library。
|
||||
|
||||
## 发版门禁
|
||||
## Release Gates
|
||||
|
||||
1. 固定全部源码 commit、构建选项、静态/动态链接方式。
|
||||
2. 保存 FFmpeg `configure` 输出与 `config.h`,确认未启用 `nonfree`,并列出 GPL/version3 状态。
|
||||
3. 保存 MPV `meson configure` 输出,逐项确认 GPL-only 文件是否进入产物。
|
||||
4. 用 `llvm-readelf -d`、link map 和 archive 成员清单核对所有实际链接库。
|
||||
5. 补齐许可证正文、版权声明、源码获取方式、修改说明及 LGPL 重新链接材料。
|
||||
6. 商业发布前完成法务复核;未完成前不得宣称“LGPL-only”或“闭源可安全链接”。
|
||||
1. 保存锁定 commit、构建选项、`config.h`、link state 与 archive 清单。
|
||||
2. 随发行物提供对应许可证正文、版权声明、源码获取方式和修改说明。
|
||||
3. 为静态 LGPL 组件提供满足许可证要求的重新链接材料。
|
||||
4. 复核 OpenSSL、FFmpeg、MPV GPLv2+ 组合以及 HarmonyOS SDK redistributable 边界。
|
||||
5. 商业发布前完成法务审核;`THIRD_PARTY_NOTICES.md` 当前仍不是最终 Release notice。
|
||||
@@ -1,10 +1,11 @@
|
||||
# Velix-MPV-Core Memory
|
||||
|
||||
- 项目:独立 HarmonyOS MPV 播放内核,禁止混入 Velix 主应用源码。
|
||||
- 当前阶段:Phase 0 研究已完成,等待确认后才能进入 Phase 1。
|
||||
- 当前阶段:Phase 1 已完成并验证;等待用户确认后才能进入 Phase 2。
|
||||
- 基线:MPV `182fa6ca49f455cadb884858f386e2f00540aeb7`,分支 `harmony-port`。
|
||||
- SDK:OpenHarmony API 24 / 6.1.1.125 / `aarch64-linux-ohos` / Clang 15.0.4。
|
||||
- 关键结论:首版 GLES+EGL+libmpv Render API;OHAudio AO;官方 FFmpeg OHCodec 路线。
|
||||
- Phase 1 产物:`build/ohos-arm64/prefix/lib/libmpv.so.2.5.0`,AArch64 ELF,OpenGL Render API symbols 完整。
|
||||
- 远程:`origin` 为私有 Gitea 仓库,默认分支 `harmony-port`;`upstream` 为 MPV 官方仓库。
|
||||
- 待办:安装 Meson/Ninja/pkg-config;用户确认后进入 Phase 1 首编译。
|
||||
- 待办:用户确认后进入 Phase 2 XComponent + EGL 真机首帧验证。
|
||||
- 索引:`memory/projects.md`、`memory/infra.md`、`memory/lessons.md`、`memory/2026-08-28.md`。
|
||||
+16
-3
@@ -1,7 +1,20 @@
|
||||
# Third-Party Notices
|
||||
|
||||
Velix-MPV-Core 基于 MPV,当前上游基线见 `UPSTREAM.md`。MPV 默认按 GNU GPL v2 or later 管理;其完整版权与许可证说明保留在 `Copyright`、`LICENSE.GPL`、`LICENSE.LGPL` 及 `LICENSES/`。
|
||||
Velix-MPV-Core 基于 MPV upstream Git 历史维护,当前默认按 GNU GPL v2 or later 管理。MPV 完整版权与许可证说明保留在 `Copyright`、`LICENSE.GPL`、`LICENSE.LGPL` 与 `LICENSES/`。
|
||||
|
||||
计划构建将使用 FFmpeg、libplacebo、libass,并可能使用 zlib、OpenSSL、FreeType、HarfBuzz、FriBidi 等依赖。Phase 0 未产生可分发二进制,依赖版本与最终链接集合尚未锁定,因此本文件不是最终发行 notices。
|
||||
Phase 1 实际构建包含:
|
||||
|
||||
每次发布必须由构建产物自动生成第三方清单,至少包含:组件名称、版本/commit、主页、版权方、许可证、修改状态、静态/动态链接方式、许可证正文位置和源码获取方式。完整审计门禁见 `LICENSE_AUDIT.md`。
|
||||
| Component | Version / Commit | License | Link | Modified |
|
||||
|---|---|---|---|---|
|
||||
| FFmpeg | `3acec0a1` | LGPL-2.1-or-later configuration | Static | No |
|
||||
| libplacebo | 7.360.1 | LGPL-2.1-or-later | Static | No |
|
||||
| libass | 0.17.5 | ISC | Static | No |
|
||||
| FreeType | 2.14.3 | FreeType License / GPL-2.0 dual | Static | No |
|
||||
| HarfBuzz | 14.4.0 | MIT | Static | No |
|
||||
| FriBidi | 1.0.16 | LGPL-2.1-or-later | Static | No |
|
||||
| OpenSSL | 3.6.4 | Apache-2.0 | Static | No |
|
||||
| zlib | HarmonyOS SDK 1.2.13 | Zlib | System dynamic | No |
|
||||
|
||||
源码仓库、完整 commit、启用功能与实际链接状态见 `UPSTREAM.md`、`LICENSE_AUDIT.md`、`DOCS/PHASE1_DEPENDENCY_MATRIX.md`。依赖源码由 `scripts/fetch-phase1-sources.sh` 获取,构建过程不修改其源码。
|
||||
|
||||
本文是 Phase 1 工程清单,不是最终发行 notice。正式发布必须补齐各组件原始版权声明、许可证正文、源码交付/获取方式、修改说明及 LGPL 静态链接所需的重新链接材料。
|
||||
+21
-1
@@ -14,6 +14,23 @@
|
||||
| Compiler | OHOS Clang `15.0.4` (`99548401bd80576251755b185ab95945e5fe7884`) |
|
||||
| Build System | MPV Meson `>=1.3.0` + Ninja;依赖使用各自原生构建系统 |
|
||||
|
||||
Velix-MPV-Core 是基于 MPV upstream Git 历史维护的独立派生仓库,不是 GitHub Fork。仓库完整保留 upstream history、基线 commit、MPV 版权与许可证文件,并持续保留 `upstream` remote。
|
||||
|
||||
## FFmpeg 基线
|
||||
|
||||
| 项目 | 值 |
|
||||
|---|---|
|
||||
| Repository | `https://git.ffmpeg.org/ffmpeg.git` |
|
||||
| Commit | `3acec0a1af2dda0a0838689b8b8649e7deb080a0` |
|
||||
| Commit Date | 2026-08-28 |
|
||||
| git describe | `3acec0a`(该 commit 无可达 tag) |
|
||||
| License Mode | LGPL-2.1-or-later;`CONFIG_GPL=0`、`CONFIG_VERSION3=0`、`CONFIG_NONFREE=0` |
|
||||
| Build | 静态 PIC;禁用 programs、docs、debug、avdevice 与 autodetect |
|
||||
| Enabled | network、OpenSSL、zlib、OHCodec |
|
||||
| OHCodec | `AV_HWDEVICE_TYPE_OHCODEC`、`AV_PIX_FMT_OHCODEC`、H.264/HEVC OH decoder/encoder 已编译 |
|
||||
|
||||
FFmpeg configure 参数由 `scripts/build-ffmpeg-ohos.sh` 固定。当前不创建 Velix FFmpeg fork;只有 upstream 出现需要长期维护的真实 blocker 时才重新评估。
|
||||
|
||||
## 远程状态
|
||||
|
||||
- `upstream` 已指向 MPV 官方仓库。
|
||||
@@ -23,6 +40,9 @@
|
||||
```sh
|
||||
git fetch upstream
|
||||
git fetch origin
|
||||
git log --oneline --decorate harmony-port..upstream/master
|
||||
git diff harmony-port...upstream/master
|
||||
git range-diff <old-upstream>..harmony-port upstream/master..<rebased-candidate>
|
||||
```
|
||||
|
||||
基线更新必须先 `git fetch upstream`,评估后再合并或变基到 `harmony-port`,并同步更新本文件。
|
||||
基线更新必须先检查 `git log`、`git diff` 和适用的 `git range-diff`,再评估使用 merge 或 rebase,并同步更新本文件。禁止直接强制覆盖 `harmony-port`。
|
||||
@@ -9,3 +9,9 @@
|
||||
文件变更: UPSTREAM.md, MEMORY.md, memory/projects.md, memory/infra.md, memory/lessons.md, memory/2026-08-28.md
|
||||
教训: 单次 HTTPS pack 受限时可分历史基线和增量推送,保持完整历史不变。
|
||||
标签: #git #gitea #remote #history
|
||||
|
||||
[PROJECT:Velix-MPV-Core] 完成 Phase 1 HarmonyOS Native Build
|
||||
结论: API 24 arm64 libmpv 已真实生成并重复构建通过,13 个静态库与最终 ELF、动态依赖、Client/OpenGL Render API symbols、宿主污染均完成核验。
|
||||
文件变更: meson.build, scripts/, toolchains/, UPSTREAM.md, LICENSE_AUDIT.md, THIRD_PARTY_NOTICES.md, DOCS/BUILD_STRATEGY.md, DOCS/PHASE1_DEPENDENCY_MATRIX.md, DOCS/BUILD_ISSUES.md, DOCS/MPV_BUILD_REPORT.md, memory/*
|
||||
教训: Clang target 必须显式用于编译与链接;Meson 共享 Cross File 使用 @DIRNAME@;FreeType SDK zlib 使用 system 模式。
|
||||
标签: #phase1 #libmpv #ohos #aarch64 #cross-compile
|
||||
@@ -7,5 +7,8 @@
|
||||
- Toolchain:`<SDK>/native/llvm/bin`
|
||||
- Target:`aarch64-linux-ohos`
|
||||
- Compiler:OHOS Clang 15.0.4
|
||||
- Build tools:Meson 1.9.0、Ninja 1.12.0、pkgconf 3.0.6,均由仓库脚本隔离管理
|
||||
- OHOS prefix:`build/ohos-arm64/prefix`
|
||||
- libmpv:`build/ohos-arm64/prefix/lib/libmpv.so.2.5.0`
|
||||
- Git origin:`https://git.leee.xin/leeexin/Velix-MPV-Core.git`,默认分支 `harmony-port`
|
||||
- MPV upstream:`https://github.com/mpv-player/mpv.git`
|
||||
@@ -5,8 +5,11 @@
|
||||
- OHOS 同时定义 `__OHOS__` 和 `__linux__`;必须显式平台检测,不能把全部 Linux API视为可用。
|
||||
- 最新 FFmpeg upstream 已有 OHCodec H.264/HEVC;研究当前源码后再决定 fork,避免重复维护。
|
||||
- `libnet_ssl.so` 主要提供证书验证接口,不是 FFmpeg TLS transport backend。
|
||||
- Clang 仅设置 sysroot 不会切换 target;macOS arm64 交叉编译必须在编译和链接两侧显式传 `--target=aarch64-linux-ohos`。
|
||||
|
||||
## Medium
|
||||
|
||||
- MPV upstream 使用 `DOCS/`;大小写不敏感文件系统不能可靠并存 `docs/`,沿用 upstream 目录。
|
||||
- 私有 Gitea 反向代理限制单次 HTTPS pack 时,可先推送历史基线 commit,再推增量分支;不得以浅克隆或裁剪历史规避限制。
|
||||
- Meson Cross File 的 `@GLOBAL_SOURCE_ROOT@` 随被构建项目变化;共享工具路径应以 `@DIRNAME@` 相对 Cross File 定位。
|
||||
- FreeType `zlib=external` 表示 fallback subproject;使用 SDK zlib 必须选择 `zlib=system` 并隔离 pkg-config。
|
||||
+4
-4
@@ -2,7 +2,7 @@
|
||||
|
||||
## Velix-MPV-Core
|
||||
|
||||
- 状态:Phase 0 研究文档已完成并核验;尚未进入首次编译。
|
||||
- 已完成:完整 MPV 历史、独立 `origin`、官方 `upstream`、`harmony-port`、89 个官方标签,以及 SDK/API/源码/依赖/许可证/渲染/音频/硬解研究。
|
||||
- 待办:用户确认后进入 Phase 1。
|
||||
- Phase 1 前置:安装 Meson、Ninja、pkg-config,锁定 FFmpeg与依赖 commit。
|
||||
- 状态:Phase 1 HarmonyOS arm64 首次 Native Build 已完成并核验;未进入 Phase 2。
|
||||
- 已完成:远程闭环、固定依赖、隔离工具链、C/C++ 探针、FFmpeg/OpenSSL/字体栈/libplacebo、AArch64 `libmpv.so.2.5.0`、ABI/符号/污染/许可证审计。
|
||||
- 产物:`build/ohos-arm64/prefix/lib/libmpv.so.2.5.0`,34,297,376 bytes。
|
||||
- 待办:用户确认后进入 Phase 2 XComponent + OHNativeWindow + EGL 真机首帧。
|
||||
@@ -324,10 +324,12 @@ if cc.get_id() == 'gcc'
|
||||
endif
|
||||
|
||||
darwin = host_machine.system() == 'darwin'
|
||||
ohos = host_machine.system() == 'ohos'
|
||||
win32 = host_machine.system() == 'cygwin' or host_machine.system() == 'windows'
|
||||
posix = not win32
|
||||
|
||||
features += {'darwin': darwin}
|
||||
features += {'ohos': ohos}
|
||||
features += {'posix': posix}
|
||||
features += {'dos-paths': win32, 'win32': win32}
|
||||
|
||||
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
HOST_ROOT=$PROJECT_ROOT/build/host-tools
|
||||
VENV=$HOST_ROOT/venv
|
||||
PKGCONF_SOURCE=$HOST_ROOT/pkgconf-source
|
||||
PKGCONF_BUILD=$HOST_ROOT/pkgconf-build
|
||||
PKGCONF_PREFIX=$HOST_ROOT/pkgconf
|
||||
NINJA_DIR=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native/build-tools/cmake/bin
|
||||
|
||||
mkdir -p "$HOST_ROOT"
|
||||
test -x "$VENV/bin/python" || python3 -m venv "$VENV"
|
||||
"$VENV/bin/python" -m pip install --disable-pip-version-check --quiet 'meson==1.9.0'
|
||||
|
||||
if test ! -d "$PKGCONF_SOURCE/.git"; then
|
||||
git clone --branch pkgconf-3.0.6 --depth 1 https://github.com/pkgconf/pkgconf.git "$PKGCONF_SOURCE"
|
||||
fi
|
||||
|
||||
PATH="$VENV/bin:$NINJA_DIR:$PATH"
|
||||
export PATH
|
||||
meson setup "$PKGCONF_BUILD" "$PKGCONF_SOURCE" --prefix "$PKGCONF_PREFIX" --buildtype release --wipe
|
||||
meson compile -C "$PKGCONF_BUILD"
|
||||
meson install -C "$PKGCONF_BUILD"
|
||||
|
||||
meson --version
|
||||
"$PKGCONF_PREFIX/bin/pkgconf" --version
|
||||
ninja --version
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
|
||||
"$PROJECT_ROOT/scripts/bootstrap-host-tools.sh"
|
||||
"$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
"$PROJECT_ROOT/scripts/verify-toolchain.sh"
|
||||
"$PROJECT_ROOT/scripts/prepare-sdk-dependencies.sh"
|
||||
"$PROJECT_ROOT/scripts/build-openssl-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-ffmpeg-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-font-stack-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-libplacebo-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/build-mpv-ohos.sh"
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-prefix.sh"
|
||||
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE=$OHOS_BUILD_ROOT/sources/ffmpeg
|
||||
BUILD=$OHOS_BUILD_ROOT/build/ffmpeg
|
||||
LOG_DIR=$OHOS_BUILD_ROOT/logs
|
||||
JOBS=$(sysctl -n hw.ncpu)
|
||||
|
||||
test -f "$SOURCE/configure" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
test -f "$PREFIX/lib/libssl.a" || "$PROJECT_ROOT/scripts/build-openssl-ohos.sh"
|
||||
mkdir -p "$BUILD" "$LOG_DIR"
|
||||
cd "$BUILD"
|
||||
|
||||
if ! "$SOURCE/configure" \
|
||||
--prefix="$PREFIX" \
|
||||
--enable-cross-compile \
|
||||
--target-os=linux \
|
||||
--arch=aarch64 \
|
||||
--cc="$CC" \
|
||||
--cxx="$CXX" \
|
||||
--ar="$AR" \
|
||||
--ranlib="$RANLIB" \
|
||||
--strip="$STRIP" \
|
||||
--nm="$NM" \
|
||||
--sysroot="$OHOS_SYSROOT" \
|
||||
--pkg-config="$PKG_CONFIG" \
|
||||
--extra-cflags="--target=$TARGET -D__MUSL__ -fPIC" \
|
||||
--extra-ldflags="--target=$TARGET -L$PREFIX/lib" \
|
||||
--enable-pic \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
--disable-programs \
|
||||
--disable-doc \
|
||||
--disable-debug \
|
||||
--disable-avdevice \
|
||||
--disable-autodetect \
|
||||
--enable-network \
|
||||
--enable-openssl \
|
||||
--enable-zlib \
|
||||
--enable-ohcodec > "$LOG_DIR/ffmpeg-configure.log" 2>&1; then
|
||||
tail -n 120 "$LOG_DIR/ffmpeg-configure.log" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! make -j"$JOBS" > "$LOG_DIR/ffmpeg-build.log" 2>&1; then
|
||||
tail -n 160 "$LOG_DIR/ffmpeg-build.log" >&2
|
||||
exit 1
|
||||
fi
|
||||
make install > "$LOG_DIR/ffmpeg-install.log" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" \
|
||||
"$PREFIX/lib/libavcodec.a" \
|
||||
"$PREFIX/lib/libavfilter.a" \
|
||||
"$PREFIX/lib/libavformat.a" \
|
||||
"$PREFIX/lib/libavutil.a" \
|
||||
"$PREFIX/lib/libswresample.a" \
|
||||
"$PREFIX/lib/libswscale.a"
|
||||
|
||||
for library in libavcodec libavfilter libavformat libavutil libswresample libswscale; do
|
||||
"$PKG_CONFIG" --modversion "$library"
|
||||
done
|
||||
|
||||
for definition in \
|
||||
CONFIG_H264_DECODER \
|
||||
CONFIG_HEVC_DECODER \
|
||||
CONFIG_H264_OH_DECODER \
|
||||
CONFIG_HEVC_OH_DECODER \
|
||||
CONFIG_MATROSKA_DEMUXER \
|
||||
CONFIG_MOV_DEMUXER \
|
||||
CONFIG_HTTP_PROTOCOL \
|
||||
CONFIG_HTTPS_PROTOCOL \
|
||||
CONFIG_TCP_PROTOCOL \
|
||||
CONFIG_TLS_PROTOCOL; do
|
||||
grep -q "^#define $definition 1$" "$BUILD/config_components.h" || {
|
||||
printf 'Missing FFmpeg feature: %s\n' "$definition" >&2
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
grep -q '^#define CONFIG_NETWORK 1$' "$BUILD/config.h"
|
||||
grep -q '^#define CONFIG_OHCODEC 1$' "$BUILD/config.h"
|
||||
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE_ROOT=$OHOS_BUILD_ROOT/sources
|
||||
BUILD_ROOT=$OHOS_BUILD_ROOT/build
|
||||
LOG_DIR=$OHOS_BUILD_ROOT/logs
|
||||
|
||||
test -f "$SOURCE_ROOT/freetype/meson.build" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
mkdir -p "$BUILD_ROOT" "$LOG_DIR"
|
||||
|
||||
setup_build()
|
||||
{
|
||||
name=$1
|
||||
shift
|
||||
source_dir=$SOURCE_ROOT/$name
|
||||
build_dir=$BUILD_ROOT/$name
|
||||
if test -f "$build_dir/meson-private/coredata.dat"; then
|
||||
meson setup "$build_dir" "$source_dir" --wipe "$@"
|
||||
else
|
||||
meson setup "$build_dir" "$source_dir" "$@"
|
||||
fi
|
||||
meson compile -C "$build_dir"
|
||||
meson install -C "$build_dir"
|
||||
}
|
||||
|
||||
setup_build freetype \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dzlib=system -Dharfbuzz=disabled -Dpng=disabled -Dbrotli=disabled \
|
||||
-Dbzip2=disabled -Dtests=disabled > "$LOG_DIR/freetype.log" 2>&1
|
||||
|
||||
setup_build fribidi \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Ddocs=false -Dbin=false -Dtests=false > "$LOG_DIR/fribidi.log" 2>&1
|
||||
|
||||
setup_build harfbuzz \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dglib=disabled -Dgobject=disabled -Dcairo=disabled -Dchafa=disabled \
|
||||
-Dpng=disabled -Dzlib=disabled -Dicu=disabled -Dfreetype=enabled \
|
||||
-Draster=disabled -Dvector=disabled -Dgpu=disabled -Dgpu_demo=disabled \
|
||||
-Dsubset=disabled -Dtests=disabled -Dintrospection=disabled -Ddocs=disabled \
|
||||
-Dutilities=disabled > "$LOG_DIR/harfbuzz.log" 2>&1
|
||||
|
||||
setup_build libass \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dfontconfig=disabled -Ddirectwrite=disabled -Dcoretext=disabled \
|
||||
-Dasm=disabled -Dlibunibreak=disabled -Drequire-system-font-provider=false \
|
||||
-Dtest=disabled -Dcompare=disabled -Dprofile=disabled -Dfuzz=disabled \
|
||||
-Dcheckasm=disabled > "$LOG_DIR/libass.log" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" \
|
||||
"$PREFIX/lib/libfreetype.a" \
|
||||
"$PREFIX/lib/libfribidi.a" \
|
||||
"$PREFIX/lib/libharfbuzz.a" \
|
||||
"$PREFIX/lib/libass.a"
|
||||
|
||||
for library in freetype2 fribidi harfbuzz libass; do
|
||||
printf '%s=' "$library"
|
||||
"$PKG_CONFIG" --modversion "$library"
|
||||
done
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE=$OHOS_BUILD_ROOT/sources/libplacebo
|
||||
BUILD=$OHOS_BUILD_ROOT/build/libplacebo
|
||||
LOG=$OHOS_BUILD_ROOT/logs/libplacebo.log
|
||||
|
||||
test -f "$SOURCE/meson.build" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
mkdir -p "$OHOS_BUILD_ROOT/logs"
|
||||
|
||||
if test -f "$BUILD/meson-private/coredata.dat"; then
|
||||
setup_mode=--wipe
|
||||
else
|
||||
setup_mode=
|
||||
fi
|
||||
|
||||
if ! meson setup "$BUILD" "$SOURCE" $setup_mode \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Dvulkan=disabled -Dopengl=disabled -Dd3d11=disabled \
|
||||
-Dglslang=disabled -Dshaderc=disabled -Dlcms=disabled \
|
||||
-Ddovi=disabled -Dlibdovi=disabled -Dunwind=disabled -Dxxhash=disabled \
|
||||
-Ddemos=false -Dtests=false -Dbench=false -Dfuzz=false > "$LOG" 2>&1; then
|
||||
tail -n 140 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! meson compile -C "$BUILD" >> "$LOG" 2>&1; then
|
||||
tail -n 180 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
meson install -C "$BUILD" >> "$LOG" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" "$PREFIX/lib/libplacebo.a"
|
||||
"$PKG_CONFIG" --modversion libplacebo
|
||||
"$PKG_CONFIG" --variable=pl_has_vulkan libplacebo
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
BUILD=$OHOS_BUILD_ROOT/build/mpv
|
||||
LOG=$OHOS_BUILD_ROOT/logs/mpv.log
|
||||
|
||||
mkdir -p "$OHOS_BUILD_ROOT/logs"
|
||||
test -f "$PREFIX/lib/libavcodec.a" || "$PROJECT_ROOT/scripts/build-ffmpeg-ohos.sh"
|
||||
test -f "$PREFIX/lib/libass.a" || "$PROJECT_ROOT/scripts/build-font-stack-ohos.sh"
|
||||
test -f "$PREFIX/lib/libplacebo.a" || "$PROJECT_ROOT/scripts/build-libplacebo-ohos.sh"
|
||||
|
||||
if test -f "$BUILD/meson-private/coredata.dat"; then
|
||||
setup_mode=--wipe
|
||||
else
|
||||
setup_mode=
|
||||
fi
|
||||
|
||||
if ! meson setup "$BUILD" "$PROJECT_ROOT" $setup_mode \
|
||||
--cross-file "$CROSS_FILE" --prefix "$PREFIX" --buildtype release \
|
||||
-Ddefault_library=shared -Dauto_features=disabled \
|
||||
-Dcplayer=false -Dlibmpv=true -Dtests=false -Dfuzzers=false \
|
||||
-Dgpl=true -Dbuild-date=false -Dplain-gl=enabled -Dgl=enabled \
|
||||
-Dzlib=enabled -Dvector=enabled -Dlua=disabled > "$LOG" 2>&1; then
|
||||
tail -n 180 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! meson compile -C "$BUILD" >> "$LOG" 2>&1; then
|
||||
tail -n 220 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
meson install -C "$BUILD" >> "$LOG" 2>&1
|
||||
|
||||
LIBMPV=$BUILD/libmpv.so
|
||||
test -f "$LIBMPV" || LIBMPV=$PREFIX/lib/libmpv.so
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-binary.sh" "$LIBMPV"
|
||||
"$PROJECT_ROOT/scripts/verify-libmpv-symbols.sh" "$LIBMPV"
|
||||
printf 'libmpv=%s\n' "$LIBMPV"
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE=$OHOS_BUILD_ROOT/sources/openssl
|
||||
BUILD=$OHOS_BUILD_ROOT/build/openssl
|
||||
LOG=$OHOS_BUILD_ROOT/logs/openssl.log
|
||||
JOBS=$(sysctl -n hw.ncpu)
|
||||
|
||||
test -f "$SOURCE/Configure" || "$PROJECT_ROOT/scripts/fetch-phase1-sources.sh"
|
||||
mkdir -p "$BUILD" "$PREFIX" "$OHOS_BUILD_ROOT/logs"
|
||||
cd "$BUILD"
|
||||
|
||||
if ! CC="$CC --target=$TARGET --sysroot=$OHOS_SYSROOT -D__MUSL__ -fPIC" \
|
||||
CXX="$CXX --target=$TARGET --sysroot=$OHOS_SYSROOT -D__MUSL__ -fPIC" \
|
||||
AR="$AR" RANLIB="$RANLIB" \
|
||||
perl "$SOURCE/Configure" linux-aarch64 \
|
||||
no-shared no-tests no-apps no-docs no-module \
|
||||
--prefix="$PREFIX" --openssldir=/etc/ssl --libdir=lib > "$LOG" 2>&1; then
|
||||
tail -n 140 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! make -j"$JOBS" >> "$LOG" 2>&1; then
|
||||
tail -n 180 "$LOG" >&2
|
||||
exit 1
|
||||
fi
|
||||
make install_sw >> "$LOG" 2>&1
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-static-archive.sh" "$PREFIX/lib/libcrypto.a" "$PREFIX/lib/libssl.a"
|
||||
"$PKG_CONFIG" --modversion openssl
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
SOURCE_ROOT=$OHOS_BUILD_ROOT/sources
|
||||
mkdir -p "$SOURCE_ROOT"
|
||||
|
||||
fetch_ref()
|
||||
{
|
||||
name=$1
|
||||
repository=$2
|
||||
reference=$3
|
||||
destination=$SOURCE_ROOT/$name
|
||||
|
||||
if test ! -d "$destination/.git"; then
|
||||
mkdir -p "$destination"
|
||||
git -C "$destination" init
|
||||
git -C "$destination" remote add origin "$repository"
|
||||
fi
|
||||
git -C "$destination" fetch --depth 1 origin "$reference"
|
||||
git -C "$destination" checkout --detach FETCH_HEAD
|
||||
printf '%-12s %s %s\n' "$name" "$(git -C "$destination" rev-parse HEAD)" "$(git -C "$destination" describe --tags --always)"
|
||||
}
|
||||
|
||||
fetch_ref openssl https://github.com/openssl/openssl.git openssl-3.6.4
|
||||
fetch_ref ffmpeg https://git.ffmpeg.org/ffmpeg.git 3acec0a1af2dda0a0838689b8b8649e7deb080a0
|
||||
fetch_ref freetype https://github.com/freetype/freetype.git VER-2-14-3
|
||||
fetch_ref fribidi https://github.com/fribidi/fribidi.git v1.0.16
|
||||
fetch_ref harfbuzz https://github.com/harfbuzz/harfbuzz.git 14.4.0
|
||||
fetch_ref libass https://github.com/libass/libass.git 0.17.5
|
||||
fetch_ref libplacebo https://code.videolan.org/videolan/libplacebo.git v7.360.1
|
||||
git -C "$SOURCE_ROOT/libplacebo" submodule update --init --depth 1
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
PREFIX=${PREFIX:-$PROJECT_ROOT/build/ohos-arm64/prefix}
|
||||
PKGCONF=$PROJECT_ROOT/build/host-tools/pkgconf/bin/pkgconf
|
||||
|
||||
test -x "$PKGCONF" || { printf 'pkgconf is not bootstrapped: %s\n' "$PKGCONF" >&2; exit 1; }
|
||||
|
||||
PKG_CONFIG_DIR= \
|
||||
PKG_CONFIG_PATH= \
|
||||
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig" \
|
||||
PKG_CONFIG_SYSROOT_DIR= \
|
||||
exec "$PKGCONF" "$@"
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
PC_DIR=$PREFIX/lib/pkgconfig
|
||||
mkdir -p "$PC_DIR"
|
||||
|
||||
printf '%s\n' \
|
||||
"prefix=$OHOS_SYSROOT/usr" \
|
||||
'exec_prefix=${prefix}' \
|
||||
'libdir=${prefix}/lib/aarch64-linux-ohos' \
|
||||
'includedir=${prefix}/include' \
|
||||
'' \
|
||||
'Name: zlib' \
|
||||
'Description: OpenHarmony SDK zlib' \
|
||||
'Version: 1.2.13' \
|
||||
'Libs: -L${libdir} -lz' \
|
||||
'Cflags: -I${includedir}' > "$PC_DIR/zlib.pc"
|
||||
|
||||
"$PKG_CONFIG" --modversion zlib
|
||||
"$PKG_CONFIG" --libs --cflags zlib
|
||||
@@ -0,0 +1,7 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
puts("HarmonyOS C probe");
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#include <cstdio>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::puts("HarmonyOS C++ probe");
|
||||
return 0;
|
||||
}
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
if test -f "$(pwd)/meson.build"; then
|
||||
PROJECT_ROOT=$(pwd)
|
||||
else
|
||||
PROJECT_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
fi
|
||||
DEFAULT_OHOS_SDK=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony
|
||||
OHOS_SDK=${OHOS_SDK:-$DEFAULT_OHOS_SDK}
|
||||
OHOS_NATIVE=$OHOS_SDK/native
|
||||
OHOS_SYSROOT=$OHOS_NATIVE/sysroot
|
||||
OHOS_TOOLCHAIN=$OHOS_NATIVE/llvm/bin
|
||||
OHOS_BUILD_ROOT=${OHOS_BUILD_ROOT:-$PROJECT_ROOT/build/ohos-arm64}
|
||||
PREFIX=${PREFIX:-$OHOS_BUILD_ROOT/prefix}
|
||||
TARGET=aarch64-linux-ohos
|
||||
|
||||
for path in "$OHOS_SYSROOT" "$OHOS_TOOLCHAIN/clang" "$OHOS_TOOLCHAIN/clang++" \
|
||||
"$OHOS_TOOLCHAIN/llvm-ar" "$OHOS_TOOLCHAIN/llvm-ranlib" \
|
||||
"$OHOS_TOOLCHAIN/llvm-strip" "$OHOS_TOOLCHAIN/llvm-readelf"; do
|
||||
test -e "$path" || { printf 'Missing OHOS toolchain path: %s\n' "$path" >&2; return 1 2>/dev/null || exit 1; }
|
||||
done
|
||||
|
||||
CC=$OHOS_TOOLCHAIN/clang
|
||||
CXX=$OHOS_TOOLCHAIN/clang++
|
||||
AR=$OHOS_TOOLCHAIN/llvm-ar
|
||||
RANLIB=$OHOS_TOOLCHAIN/llvm-ranlib
|
||||
STRIP=$OHOS_TOOLCHAIN/llvm-strip
|
||||
READELF=$OHOS_TOOLCHAIN/llvm-readelf
|
||||
NM=$OHOS_TOOLCHAIN/llvm-nm
|
||||
PKG_CONFIG=$PROJECT_ROOT/scripts/pkg-config-ohos.sh
|
||||
CROSS_FILE=$PROJECT_ROOT/toolchains/ohos-api24-arm64.ini
|
||||
OHOS_COMMON_FLAGS="--target=$TARGET --sysroot=$OHOS_SYSROOT -D__MUSL__"
|
||||
|
||||
PATH=$PROJECT_ROOT/build/host-tools/venv/bin:$OHOS_NATIVE/build-tools/cmake/bin:$PATH
|
||||
PKG_CONFIG_DIR=
|
||||
PKG_CONFIG_PATH=
|
||||
PKG_CONFIG_LIBDIR=$PREFIX/lib/pkgconfig:$PREFIX/share/pkgconfig
|
||||
PKG_CONFIG_SYSROOT_DIR=
|
||||
|
||||
unset CPATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH CMAKE_PREFIX_PATH
|
||||
|
||||
export PROJECT_ROOT OHOS_SDK OHOS_NATIVE OHOS_SYSROOT OHOS_TOOLCHAIN
|
||||
export OHOS_BUILD_ROOT PREFIX TARGET CC CXX AR RANLIB STRIP READELF NM
|
||||
export PKG_CONFIG CROSS_FILE OHOS_COMMON_FLAGS PATH
|
||||
export PKG_CONFIG_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
test "$#" -eq 1 || { printf 'Usage: %s LIBMPV\n' "$0" >&2; exit 2; }
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
LIBMPV=$1
|
||||
SYMBOLS=$($NM -D --defined-only "$LIBMPV")
|
||||
|
||||
for symbol in \
|
||||
mpv_create \
|
||||
mpv_initialize \
|
||||
mpv_command \
|
||||
mpv_set_property \
|
||||
mpv_get_property \
|
||||
mpv_render_context_create \
|
||||
mpv_render_context_render \
|
||||
mpv_render_context_set_update_callback \
|
||||
mpv_render_context_free; do
|
||||
printf '%s\n' "$SYMBOLS" | grep -Eq "[[:space:]]${symbol}$" || {
|
||||
printf 'Missing libmpv symbol: %s\n' "$symbol" >&2
|
||||
exit 1
|
||||
}
|
||||
printf '%s\n' "$symbol"
|
||||
done
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
test "$#" -gt 0 || { printf 'Usage: %s FILE...\n' "$0" >&2; exit 2; }
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
|
||||
for artifact in "$@"; do
|
||||
test -f "$artifact" || { printf 'Missing artifact: %s\n' "$artifact" >&2; exit 1; }
|
||||
description=$(file "$artifact")
|
||||
header=$($READELF -h "$artifact")
|
||||
printf '%s\n%s\n' "$description" "$header"
|
||||
printf '%s\n' "$description" | grep -q 'ELF 64-bit LSB'
|
||||
printf '%s\n' "$header" | grep -q 'Machine:.*AArch64'
|
||||
$READELF -d "$artifact" 2>/dev/null || true
|
||||
done
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
LIBMPV=$PREFIX/lib/libmpv.so.2.5.0
|
||||
test -f "$LIBMPV" || { printf 'Missing libmpv: %s\n' "$LIBMPV" >&2; exit 1; }
|
||||
|
||||
archive_count=0
|
||||
for archive in "$PREFIX"/lib/*.a; do
|
||||
test -f "$archive" || continue
|
||||
archive_count=$((archive_count + 1))
|
||||
temp_dir=$(mktemp -d)
|
||||
(
|
||||
cd "$temp_dir"
|
||||
"$AR" x "$archive"
|
||||
object_count=$(find . -type f | wc -l | tr -d ' ')
|
||||
machine_count=$(find . -type f -exec "$READELF" -h {} + 2>/dev/null | grep -c 'Machine:.*AArch64')
|
||||
test "$object_count" -gt 0
|
||||
test "$object_count" -eq "$machine_count" || {
|
||||
printf 'Non-AArch64 archive member: %s (%s/%s)\n' "$archive" "$machine_count" "$object_count" >&2
|
||||
exit 1
|
||||
}
|
||||
)
|
||||
rm -r "$temp_dir"
|
||||
done
|
||||
test "$archive_count" -gt 0
|
||||
|
||||
if find "$PREFIX" -type f \( -name '*.pc' -o -name '*.cmake' -o -name '*.ninja' \) \
|
||||
-exec grep -El '(^|[[:space:]])-[IL]/(opt/homebrew|usr/local)|\.dylib|[[:space:]]-framework[[:space:]]' {} + | grep -q .; then
|
||||
printf 'Host library path found in target metadata\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
needed=$($READELF -d "$LIBMPV" | sed -n 's/.*Shared library: \[\([^]]*\)\].*/\1/p')
|
||||
for library in $needed; do
|
||||
case "$library" in
|
||||
libc.so|libz.so|libnative_media_vdec.so|libnative_media_venc.so|libnative_media_codecbase.so|libnative_media_core.so|libnative_window.so) ;;
|
||||
*) printf 'Unexpected dynamic dependency: %s\n' "$library" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-binary.sh" "$LIBMPV"
|
||||
"$PROJECT_ROOT/scripts/verify-libmpv-symbols.sh" "$LIBMPV"
|
||||
printf 'verified_archives=%s\n' "$archive_count"
|
||||
printf 'dynamic_dependencies=%s\n' "$(printf '%s' "$needed" | tr '\n' ',')"
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
test "$#" -gt 0 || { printf 'Usage: %s ARCHIVE...\n' "$0" >&2; exit 2; }
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
|
||||
for archive in "$@"; do
|
||||
test -f "$archive" || { printf 'Missing archive: %s\n' "$archive" >&2; exit 1; }
|
||||
members=$($AR t "$archive")
|
||||
member=$(printf '%s\n' "$members" | sed -n '1p')
|
||||
test -n "$member" || { printf 'Empty archive: %s\n' "$archive" >&2; exit 1; }
|
||||
temp_dir=$(mktemp -d)
|
||||
(
|
||||
cd "$temp_dir"
|
||||
"$AR" x "$archive" "$member"
|
||||
header=$($READELF -h "$member")
|
||||
printf '%s: %s\n' "$archive" "$member"
|
||||
printf '%s\n' "$header"
|
||||
printf '%s\n' "$header" | grep -q 'Machine:.*AArch64'
|
||||
)
|
||||
rm -r "$temp_dir"
|
||||
done
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
. "$(dirname -- "$0")/setup-ohos-env.sh"
|
||||
PROBE_DIR=$OHOS_BUILD_ROOT/probes
|
||||
mkdir -p "$PROBE_DIR"
|
||||
|
||||
"$CC" --target="$TARGET" --sysroot="$OHOS_SYSROOT" -D__MUSL__ \
|
||||
"$PROJECT_ROOT/scripts/probes/hello.c" -o "$PROBE_DIR/hello-c"
|
||||
"$CXX" --target="$TARGET" --sysroot="$OHOS_SYSROOT" -D__MUSL__ \
|
||||
"$PROJECT_ROOT/scripts/probes/hello.cpp" -o "$PROBE_DIR/hello-cpp"
|
||||
|
||||
"$PROJECT_ROOT/scripts/verify-ohos-binary.sh" "$PROBE_DIR/hello-c" "$PROBE_DIR/hello-cpp"
|
||||
@@ -0,0 +1,31 @@
|
||||
[constants]
|
||||
sdk = '/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/native'
|
||||
toolchain = sdk / 'llvm/bin'
|
||||
sysroot = sdk / 'sysroot'
|
||||
target_flags = ['--target=aarch64-linux-ohos', '--sysroot=' + sysroot, '-D__MUSL__']
|
||||
|
||||
[binaries]
|
||||
c = toolchain / 'clang'
|
||||
cpp = toolchain / 'clang++'
|
||||
ar = toolchain / 'llvm-ar'
|
||||
strip = toolchain / 'llvm-strip'
|
||||
pkg-config = '@DIRNAME@/../scripts/pkg-config-ohos.sh'
|
||||
cmake = sdk / 'build-tools/cmake/bin/cmake'
|
||||
|
||||
[built-in options]
|
||||
c_args = target_flags
|
||||
cpp_args = target_flags
|
||||
c_link_args = target_flags
|
||||
cpp_link_args = target_flags
|
||||
default_library = 'static'
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = true
|
||||
sys_root = sysroot
|
||||
pkg_config_libdir = ['@DIRNAME@/../build/ohos-arm64/prefix/lib/pkgconfig', '@DIRNAME@/../build/ohos-arm64/prefix/share/pkgconfig']
|
||||
|
||||
[host_machine]
|
||||
system = 'ohos'
|
||||
cpu_family = 'aarch64'
|
||||
cpu = 'armv8-a'
|
||||
endian = 'little'
|
||||
Reference in new issue
Block a user