summaryrefslogtreecommitdiffstats
path: root/code/ohos/ohos_compile.md
diff options
context:
space:
mode:
Diffstat (limited to 'code/ohos/ohos_compile.md')
-rw-r--r--code/ohos/ohos_compile.md106
1 files changed, 89 insertions, 17 deletions
diff --git a/code/ohos/ohos_compile.md b/code/ohos/ohos_compile.md
index e7d2359..150ee25 100644
--- a/code/ohos/ohos_compile.md
+++ b/code/ohos/ohos_compile.md
@@ -22,6 +22,7 @@
22 - 源码大小就 36G 左右了 22 - 源码大小就 36G 左右了
23 - 大量的依赖会占据数十 G 的空间 23 - 大量的依赖会占据数十 G 的空间
24 - 我用的是 160G 磁盘,编译成功,但基本不剩什么空间了 24 - 我用的是 160G 磁盘,编译成功,但基本不剩什么空间了
25- 注意所需要的**ohos 的版本、cpu 版本、位数等信息**
25 26
26这里我用的是 VMWare+Ubuntu22.04 虚拟机。 27这里我用的是 VMWare+Ubuntu22.04 虚拟机。
27 28
@@ -31,15 +32,6 @@
31 32
32```bash 33```bash
33#!/bin/bash 34#!/bin/bash
34
35##########################################################################
36# File Name : harmony.sh
37# Encoding : utf-8
38# Author : We-unite
39# Email : weunite1848@gmail.com
40# Created Time : 2024-02-07 12:32:50
41##########################################################################
42
43set -e # 一旦出错立刻停止执行,不会执行后续指令 35set -e # 一旦出错立刻停止执行,不会执行后续指令
44 36
45# 更新软件源 37# 更新软件源
@@ -107,14 +99,18 @@ ssh-keygen -t rsa -C "your-email-address"
107 99
108此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。 100此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。
109 101
110# 配置 repo 工具 102# 系统源码编译
103
104## 配置 repo 工具
111 105
112**注意:前两条命令需要以 root 身份执行!!!** 106**注意:前两条命令需要以 root 身份执行!!!**
113 107
114```bash 108```bash
115# 以下两条命令需要以root身份执行 109# 以下两条命令需要以root身份执行
110sudo -s
116curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo 111curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
117chmod a+x /usr/local/bin/repo 112chmod a+x /usr/local/bin/repo
113exit
118 114
119# 这条普通身份也可以 115# 这条普通身份也可以
120pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests 116pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
@@ -122,17 +118,20 @@ pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
122 118
123之所以前两条命令需要以 root 身份而不能是 sudo,是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**) 119之所以前两条命令需要以 root 身份而不能是 sudo,是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**)
124 120
125# 系统源码编译
126
127## 获取源码 121## 获取源码
128 122
129通过 repo + https/ssh 下载: 123通过 repo + https/ssh 下载:
130 124
131```bash 125```bash
132# 通过http下载 126# 通过http下载,这里需要注意你需要的ohos的版本
133repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify 127repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
134# 或者也可以通过ssh下载 128# 如果需要的是特定分支,-b后边改成对应分支名
129# 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字,
130# 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下:
131# repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v3.2-Release --no-repo-verify
132# 除使用https外,也可以通过ssh下载
135# repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify 133# repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify
134
136repo sync -c 135repo sync -c
137repo forall -c 'git lfs pull' 136repo forall -c 'git lfs pull'
138``` 137```
@@ -143,12 +142,15 @@ repo forall -c 'git lfs pull'
143# 先在源码根目录下执行脚本,安装编译器及二进制工具 142# 先在源码根目录下执行脚本,安装编译器及二进制工具
144bash build/prebuilts_download.sh 143bash build/prebuilts_download.sh
145# 再执行如下命令进行版本编译 144# 再执行如下命令进行版本编译
145# 注意:默认编译的时候,目标cpu是32位,即使为64位cpu也无法使用64位功能
146sudo ./build.sh --product-name rk3568 --ccache 146sudo ./build.sh --product-name rk3568 --ccache
147# 如果是64位cpu,需要加上--target-cpu=arm64
148sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64
147``` 149```
148 150
149## 编译完成 151## 编译完成
150 152
151编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的 out/rk3568/packages/phone/images 目录下。 153编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的`out/rk3568/packages/phone/images`目录下。
152 154
153自此源码编译成功,即可进行镜像烧录。 155自此源码编译成功,即可进行镜像烧录。
154 156
@@ -336,7 +338,77 @@ targets := vmlinux
336 338
337总而言之,言而总之,在`VMware->虚拟机->设置->硬件->内存`中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。 339总而言之,言而总之,在`VMware->虚拟机->设置->硬件->内存`中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。
338 340
339# 完结撒花 ❀ 341# ohos 的 NDK
342
343NDK 编译方式比较简单,在源码根目录下执行如下命令:
344
345```bash
346# 安装依赖
347./build/build_scripts/env_setup.sh
348
349# 执行完上述命令后记得执行source ~/.bashrc或者重启终端
350source ~/.bashrc
351
352# 安装编译SDK需要的依赖包(编译镜像的时候是不依赖这些包的)
353sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev
354
355./build.sh --product-name ohos-sdk --ccache --build-target ohos_ndk
356```
357
358编译出来的 NDK 在`out/sdk/packages/ohos-sdk/linux/native`下。当然同时也有 windows 版本的 NDK,你猜在哪里?
359
360将编译出来的 NDK 的 zip 解压到你想要的目录下,然后将该目录添加到环境变量中,即可使用。
361
362注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK 还未我们提供编译所需的全套服务,如编译工具链配置文件`ohos.toolchain.cmake`、头文件、库文件等。快说,谢谢 ohos~
363
364为了更方便地使用NDK,鄙人不才,写了两个脚本,分别用于cmake编译和单文件编译:
365
366```bash
367#!/bin/bash
368
369##########################################################################
370# File Name : compile.sh
371# Encoding : utf-8
372# Author : We-unite
373# Email : weunite1848@gmail.com
374# Created Time : 2024-02-29 15:19:15
375##########################################################################
376
377set -e
378
379if [ $UID -eq 0 ]; then
380 echo "Please do not run this script as root"
381 exit 1
382fi
383
384if [ $# -ne 2 ]; then
385 echo "Usage: $0 <static|shared> <v7|v8>"
386 exit 1
387fi
388
389if [ $2 == "v8" ]; then
390 arch=arm64-v8a
391elif [ $2 == "v7" ]; then
392 arch=armeabi-v7a
393else
394 echo "Invalid architecture: $2"
395 exit 1
396fi
397
398link=$1 # static or shared
399native_path=~/app/native
400
401export PATH=$native_path/build-tools/cmake/bin:$PATH
402
403# 使用cmake编译,编译生成的文件运行在rk3568上
404cmake -B build -D OHOS_STL=c++_$link -D OHOS_ARCH=$arch -D OHOS_PLATFORM=OHOS -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake)
405cmake --build build
406```
407
408```bash
409```
410
411# 完结撒花
340 412
341本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢: 413本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢:
342 414
@@ -345,4 +417,4 @@ targets := vmlinux
345 - 内存 10G+ 417 - 内存 10G+
346 - 磁盘 160G+ 418 - 磁盘 160G+
347 419
348不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… 420不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… \ No newline at end of file