概述
prebuilts/ 目录存放所有预编译的工具链和依赖 ,总计约 24GB。这些二进制文件不是从源码编译的,而是由 build/prebuilts_download.sh 脚本从远程仓库下载。它们为 OpenHarmony 构建系统提供编译器、链接器、运行时库、SDK 等基础设施。
核心思想:开发者不需要自己编译 Clang、Rust、Node.js 等工具------直接下载预编译版本,保证所有人使用一致的工具链版本。
目录总览
prebuilts/ 总计 ~24GB
├── clang/ (8.2GB) ← LLVM/Clang 交叉编译工具链(核心)
├── cangjie_sdk/ (5.3GB) ← 仓颉语言 SDK
├── ohos-sdk/ (3.6GB) ← OpenHarmony SDK(API 23)
├── ark_tools/ (1.7GB) ← 方舟编译器预编译工具
├── gcc/ (1.4GB) ← GCC 交叉编译器(内核编译用)
├── rustc/ (1.2GB) ← Rust 编译器和标准库
├── build-tools/ (731MB) ← GN、Ninja、Node.js 等构建工具
├── tool/ (629MB) ← hvigor、ohpm、SDK 命令行工具
├── mingw-w64/ (459MB) ← Windows 交叉编译工具链
├── cmake/ (347MB) ← CMake 构建工具
├── python/ (174MB) ← Python 3.11 解释器
├── taihe/ (131MB) ← 泰和(Taihe)跨语言框架
├── python_llvm/ (94MB) ← LLVM 构建专用 Python
├── develop_tools/ (32MB) ← BPF 开发工具
└── packing_tool/ (5.6MB) ← HAP 打包工具(Java)
1. clang/(8.2GB)--- LLVM/Clang 交叉编译工具链
用途:编译 OpenHarmony 用户空间所有 C/C++ 代码的主编译器。
clang/ohos/
├── linux-x86_64/ ← 宿主机为 x86_64 Linux 时使用
│ ├── llvm/ ← 完整的 LLVM 工具链
│ │ ├── bin/ ← clang、clang++、lld、llvm-ar 等
│ │ ├── lib/
│ │ │ ├── arm-linux-ohos/ ← ARM32 标准库(libc++、libunwind)
│ │ │ ├── aarch64-linux-ohos/ ← ARM64 标准库
│ │ │ └── clang/15.0.4/lib/ ← compiler-rt 运行时
│ │ │ ├── arm-linux-ohos/ ← ARM32 runtime(builtins、sanitizers)
│ │ │ └── aarch64-linux-ohos/
│ │ └── include/ ← Clang/LLVM 头文件
│ ├── llvm_ndk/ ← NDK 版本的 LLVM(供应用开发者使用)
│ └── libcxx-ndk/ ← NDK 版本的 libc++
├── ohos-arm64/ ← 宿主机为 ARM64 Linux 时使用(如 M1 Mac 上的 Linux VM)
│ ├── llvm/
│ └── libcxx-ndk/
└── windows-x86_64/ ← 宿主机为 Windows 时使用
└── llvm/
关键版本信息
| 项目 | 版本 |
|---|---|
| Clang | 15.0.4(OHOS 定制版) |
| LLD | 15.0.4 |
| compiler-rt | 15.0.4 |
| libc++ | 与 Clang 同版本 |
为什么有三个宿主平台
linux-x86_64:绝大多数开发者使用(Ubuntu x86_64)ohos-arm64:ARM64 Linux 宿主机(如 ARM 服务器或 M 系列 Mac 上的 Linux VM)windows-x86_64:Windows 开发环境
编译器本身运行在宿主机上,但产出的二进制是目标设备架构(ARM/ARM64/x86_64/RISC-V)。
2. cangjie_sdk/(5.3GB)--- 仓颉语言 SDK
用途:仓颉(Cangjie)是华为自研的编程语言,面向 OpenHarmony 应用开发,定位类似 Kotlin 之于 Android。
cangjie_sdk/
├── linux-x64/ ← Linux 宿主机版本
│ └── cangjie/ ← 仓颉编译器、标准库、工具链
├── linux-x64-hwasan/ ← 带 HWASan 的调试版本
├── windows-x64/ ← Windows 版本
└── build-tools/ ← 仓颉构建辅助工具
说明
- 仓颉是 OpenHarmony 6.x 新增的第一方语言支持
- 与 ArkTS 并列为应用开发语言选项
- SDK 包含编译器前端、标准库、包管理工具
3. ohos-sdk/(3.6GB)--- OpenHarmony SDK
用途:为 HAP 应用编译提供 API 定义、工具链和预览器。hvigor 构建 ArkTS/JS 应用时依赖此 SDK。
ohos-sdk/linux/23/ ← API 版本 23
├── ets/ ← ArkTS/ETS 编译工具和声明文件
├── js/ ← JS 编译工具
├── native/ ← C/C++ NDK(头文件、库)
├── toolchains/ ← 签名工具、hdc 等
└── previewer/ ← UI 预览器(DevEco Studio 用)
说明
- 数字
23是 API 版本号(对应 SDK 6.1.0.31) - HAP 应用编译(hvigor)会检查此目录是否存在
- 如果缺失,需要先编译 ohos-sdk 再部署到此处(见编译指南第 4.2 节)
4. ark_tools/(1.7GB)--- 方舟编译器预编译工具
用途:方舟(Ark)编译器的预编译二进制,用于 ArkTS/JS 的 AOT(Ahead-Of-Time)编译和字节码生成。
ark_tools/
├── ark_js_prebuilts/ ← 方舟 JS 运行时预编译产物
│ ├── llvm_prebuilts/ ← x86_64 Linux 版 LLVM(AOT 后端)
│ ├── llvm_prebuilts_aarch64/ ← ARM64 版 LLVM
│ └── llvm_prebuilts_windows/ ← Windows 版 LLVM
└── llvm_aot/ ← AOT 编译器各平台版本
├── aot_aarch64_debug/
├── aot_aarch64_release/
├── aot_x86_debug/
├── aot_x86_release/
├── aot_ohos_release/
└── aot_gn_ohos/
说明
- 方舟编译器将 ArkTS/JS 代码编译为机器码(AOT),提升运行性能
- 这里的 LLVM 是方舟编译器自己的后端,与
clang/中的 LLVM 是独立的 aot_ohos_release是在设备上运行的 AOT 编译器
5. gcc/(1.4GB)--- GCC 交叉编译器
用途 :仅用于编译 Linux 内核。用户空间代码全部使用 Clang。
gcc/linux-x86/
├── arm/
│ └── gcc-linaro-7.5.0-arm-linux-gnueabi/ ← ARM32 GCC 7.5
└── aarch64/
└── gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/ ← ARM64 GCC 7.5
为什么内核用 GCC 而不是 Clang
- Linux 内核对编译器有严格的版本和行为要求
- 部分内核代码使用 GCC 特有扩展(
__attribute__((naked))、内联汇编语法差异) - Linaro GCC 7.5 是经过长期验证的稳定版本
- 未来版本可能迁移到 Clang 编译内核(上游 Linux 已支持)
版本信息
| 项目 | 版本 |
|---|---|
| GCC | Linaro 7.5.0 |
| ARM32 target | arm-linux-gnueabi |
| ARM64 target | aarch64-linux-gnu |
6. rustc/(1.2GB)--- Rust 编译器
用途:编译 OpenHarmony 中的 Rust 代码(部分系统组件使用 Rust 编写)。
rustc/
├── linux-x86_64/current/ ← Rust 编译器(rustc + cargo)
├── rust-nightly-x86_64-unknown-linux-gnu/ ← nightly 工具链
├── rust-std-nightly-armv7-unknown-linux-ohos/ ← ARM32 标准库
├── rust-std-nightly-aarch64-unknown-linux-ohos/ ← ARM64 标准库
├── rust-std-nightly-x86_64-unknown-linux-ohos/ ← x86_64 标准库
└── rust-std-nightly-x86_64-pc-windows-gnullvm/ ← Windows 标准库
说明
- 使用 nightly 版本(OpenHarmony 依赖部分 unstable 特性)
rust-std-*-ohos是为 OpenHarmony 目标编译的标准库- Rust 代码最终通过 Clang/LLD 链接,复用同一套 musl sysroot
- 目标三元组使用
*-unknown-linux-ohos(自定义 OS 标识)
7. build-tools/(731MB)--- 构建基础工具
用途:GN、Ninja、Node.js 等构建系统直接依赖的工具。
build-tools/
├── linux-x86/ ← Linux 宿主机构建工具
│ └── bin/
│ ├── gn ← GN 元构建系统(版本 2023 d823fd85)
│ └── ninja ← Ninja 构建执行器(版本 1.12.0)
├── common/ ← 跨平台共用工具
│ ├── nodejs/ ← Node.js 运行时(多版本共存)
│ │ ├── node-v14.21.1-linux-x64/ ← 旧版兼容
│ │ ├── node-v16.20.2-linux-x64/
│ │ ├── node-v18.20.1-linux-x64/ ← 主要使用版本
│ │ └── current → node-v14.21.1 ← 默认指向(构建脚本引用)
│ ├── js-framework/ ← JS 框架依赖(node_modules)
│ └── ts2abc/ ← TypeScript → 方舟字节码转换工具依赖
├── ohos/ ← OHOS 设备端构建工具
│ └── bin/
└── windows-x86/ ← Windows 版 GN/Ninja
版本信息
| 工具 | 版本 | 说明 |
|---|---|---|
| GN | 2023 (d823fd85) | 生成 build.ninja 文件 |
| Ninja | 1.12.0 | 执行实际编译 |
| Node.js | 14.21.1 / 16.20.2 / 18.20.1 | JS/TS 编译和 hvigor 运行时 |
为什么有多个 Node.js 版本
v14:部分旧脚本和 npm 包依赖v18:hvigor 和新版工具推荐版本current软链接指向 v14(历史兼容)
8. tool/(629MB)--- SDK 命令行工具和 hvigor
用途:HAP 应用构建工具链(hvigor)、包管理器(ohpm)、SDK 管理工具。
tool/command-line-tools/
├── hvigor/ ← HAP 应用构建工具(类似 Gradle)
├── ohpm/ ← OpenHarmony 包管理器(类似 npm)
├── sdk/ ← SDK 管理工具
├── bin/ ← 命令行入口脚本
├── 6.x/ ← 6.x 版本工具
└── tool/ ← 辅助工具
说明
- hvigor:OpenHarmony 的应用构建系统,基于 Node.js,功能类似 Android 的 Gradle
- ohpm:OpenHarmony Package Manager,管理三方库依赖(类似 npm)
- 编译 HAP 应用时,hvigor 会调用 ohos-sdk 中的编译器和签名工具
9. mingw-w64/(459MB)--- Windows 交叉编译工具链
用途:在 Linux 宿主机上编译 Windows 可执行文件(如 hdc.exe、previewer.exe)。
mingw-w64/ohos/linux-x86_64/
└── clang-mingw/ ← 基于 Clang 的 MinGW 工具链
├── bin/ ← x86_64-w64-mingw32-clang 等
└── lib/ ← Windows 运行时库
说明
- 用于编译 SDK 中需要在 Windows 上运行的工具
- 不是传统的 GCC MinGW,而是基于 Clang 的 MinGW 变体
- 编译
ohos-sdk时会用到(生成 Windows 版 toolchains)
10. cmake/(347MB)--- CMake 构建工具
用途:部分第三方库(如 OpenSSL、protobuf)使用 CMake 构建,需要此工具。
cmake/
├── linux-x86/ ← Linux 版 CMake
├── ohos/ ← OHOS 平台 CMake 配置
└── windows-x86/ ← Windows 版 CMake
说明
- OpenHarmony 主构建系统是 GN,但
third_party/下部分库原生使用 CMake - GN 通过
action()调用 CMake 编译这些第三方库 - 提供预编译版本避免依赖系统安装的 CMake 版本
11. python/(174MB)--- Python 解释器
用途 :构建脚本运行时。build.sh、hb、各种代码生成脚本都依赖 Python。
python/linux-x86/
├── 3.11.4/ ← Python 3.11.4 完整安装
└── current → 3.11.4 ← 软链接
说明
- 版本:Python 3.11.4
- 构建系统的
hb工具、代码生成器、测试框架都用 Python - 使用预编译版本确保所有开发者环境一致,避免系统 Python 版本差异
12. taihe/(131MB)--- 泰和跨语言框架
用途:泰和(Taihe)是 OpenHarmony 的跨语言互操作框架,支持 C/C++、ArkTS、仓颉之间的无缝调用。
taihe/
├── ohos/linux-x86_64/ ← Linux 版工具
└── ohos/windows-x86_64/ ← Windows 版工具
说明
- OpenHarmony 6.x 新增组件
- 生成跨语言绑定代码(类似 SWIG 或 pybind11 的角色)
- 使不同语言编写的模块可以互相调用
13. python_llvm/(94MB)--- LLVM 构建专用 Python
用途:LLVM 工具链自身构建时使用的 Python 环境(与主 Python 隔离)。
python_llvm/
├── linux-x86/ ← Linux 版
├── linux-arm64/ ← ARM64 版
└── windows-x86/ ← Windows 版
说明
- 与
python/目录的区别:这是 LLVM 编译流程专用的,版本和依赖可能不同 - 隔离避免 LLVM 构建脚本与 OpenHarmony 构建脚本的 Python 依赖冲突
14. develop_tools/(32MB)--- BPF 开发工具
用途:Linux 内核 BPF(Berkeley Packet Filter)相关的开发调试工具。
develop_tools/
├── bpftool/ ← BPF 程序管理工具
└── pahole/ ← DWARF 调试信息分析工具(BTF 生成)
说明
- bpftool:加载、查看、调试 BPF 程序
- pahole:分析结构体布局,生成 BTF(BPF Type Format)信息
- 内核编译时需要 pahole 生成 BTF,供 BPF 程序使用
15. packing_tool/(5.6MB)--- HAP 打包工具
用途 :将编译产物打包为 .hap 应用包的 Java 工具。
packing_tool/
├── compress/ ← 压缩工具
├── fastjson/ ← JSON 解析库
├── fastjson2/
├── fastjson2ext/
├── fastjson2mid/
└── io/ ← IO 工具库
说明
- 基于 Java 实现的打包工具
- 将 resources、代码、配置文件打包为 HAP 格式
- 体积最小的预编译组件(仅 5.6MB)
16. .mark 文件的含义
每个目录下都有 .mark 文件,如:
804c5820b5f2c68c14834adf96a66ec23087b247f90d74ac7e44d79355d563c1.llvm.mark
这些是 prebuilts_download.sh 脚本的版本标记文件:
- 文件名中的哈希值是对应压缩包的 SHA-256
- 脚本通过检查
.mark文件是否存在来判断是否需要重新下载 - 如果删除
.mark文件,下次运行prebuilts_download.sh会重新下载对应组件
17. 各工具链的使用场景总结
| 编译对象 | 使用的工具链 | 路径 |
|---|---|---|
| 用户空间 C/C++ | Clang 15.0.4 | clang/ohos/linux-x86_64/llvm/ |
| Linux 内核 | GCC Linaro 7.5 | gcc/linux-x86/arm/ |
| Rust 组件 | rustc nightly | rustc/linux-x86_64/current/ |
| ArkTS/JS 应用 | hvigor + Node.js | build-tools/common/nodejs/ + tool/ |
| 仓颉应用 | Cangjie SDK | cangjie_sdk/linux-x64/ |
| Windows 工具 | Clang-MinGW | mingw-w64/ohos/linux-x86_64/ |
| 第三方 CMake 库 | CMake | cmake/linux-x86/ |
| AOT 编译 | 方舟 LLVM | ark_tools/llvm_aot/ |
18. 如何更新 prebuilts
bash
cd v6.1-release
# 全量下载/更新所有预编译工具
bash build/prebuilts_download.sh
# 该脚本会:
# 1. 读取 build/prebuilts_config.json 中的下载清单
# 2. 对比本地 .mark 文件与远程哈希
# 3. 仅下载有变更的组件
# 4. 解压到对应目录并写入新的 .mark 文件
首次下载约 10GB,后续增量更新通常很快。