当前位置: 首页 > news >正文

OpenHarmony下gn相关使用

     OpenHarmony下gn相关使用



引言

为了提高OpenHarmony下移植vivante gpu的成功率,先得把准备工作做足了,这样后续就好搞了。所以本文档的核心工作介绍GN构建工具在OpenHarmony中的常见使用方法,指导三方库由cmake或者其它的脚本构建到GN构建的转换!




一.GN常用的内置变量

名称描述
current_cpu当前工具链的处理器架构
current_os当前工具链的操作系统类型
current_toolchain表示当前使用的工具链
default_toolchain表示默认使用的工具链
target_cpu表示目标平台的CPU类型
target_os表示目标平台的操作系统类型
root_build_dir表示根目录的构建目录
root_gen_dir表示根目录的生成目录
root_out_dir表示根目录的输出目录
target_out_dir表示目标文件的输出目录
target_gen_dir表示中间文件的生成目录
defines表示当前目标的预定义宏列表
include_dirs表示当前目标的头文件搜索路径列表
cflags表示当前目标的C语言编译选项列表
cxxflags表示当前目标的C++语言编译选项列表
ldflags表示当前目标的连接选项列表
asmflags表示当前目标的汇编语言编译选项列表
libs表示当前目标依赖的库文件列表



二.GN常用的内置函数

名称描述
assert()断言函数,如果条件不成立,则会抛出一个异常
defined()判断变量是否已经定义
exec_script()执行一个Python脚本
get_label_info()获取标签信息,例如标签的名称、路径、类型等等
get_path_info()获取路径信息,例如路径是否存在、是否是目录、是否是文件等等
group()将一组目标文件组合成一个库文件
import()导入其它GN构建文件
read_file()读取文件内容
read_json()读取JSON格式的文件
read_path()读取路径中的内容,返回一个字符串列表
rebase_path()重新定位路径,将路径中的某个部分替换为新的值
write_file()写入文件内容
template()处理字符串模板,将模板中的变量替换为实际的值,其功能类似与函数
action()定义一个自定义的构建动作,通过action调用python脚本完成期望动作
action_foreach()针对每个元素执行一个自定义的构建动作
executable()定义一个可执行文件
shared_library()定义一个动态库
static_library()定义一个静态库



三.如何使用

当使用GN进行相关的构建时,需要了解如何指定动态库、静态库和可执行文件的构建规则。以下是一个简单的指南,介绍如何在GN中指定这些构建规则:


3.1 动态库

在GN中,可以使用shared_library模板来指定动态库的构建规则,创建BUILD.gn文件,内容如下:


# 指定动态库名称
mylib_name = "mylib"# 指定动态库源文件
mylib_sources = ["src/foo.cpp","src/bar.cpp",
]# 指定动态库编译选项和链接选项
mylib_cflags = ["-Wall",
]
mylib_ldflags = ["-L/usr/local/lib",
]# 指定动态库构建规则
shared_library(mylib_name) {sources = mylib_sourcescflags = mylib_cflagsldflags = mylib_ldflags
}

### 3.2 静态库

在GN中,可以使用static_library模板来指定静态库的构建规则,创建BUILD.gn文件,内容如下:

# 指定静态库名称# 指定静态库源文件
mylib_sources = ["src/foo.cpp","src/bar.cpp"
]# 指定静态库编译选项
mylib_cflags = ["-Wall",
]# 指定静态库的构建规则
static_library(mylib_name){sources = mylib_sourcescflags = mylib_cflags
}

### 3.3 可执行文件

在GN中,可以使用executable模板来指定可执行文件的构建规则。例如:

# 指定可执行文件名称
myapp_name = "myapp"# 指定可执行文件源文件
myapp_sources = ["src/main.cpp",
]# 指定可执行文件编译选项和链接选项
myapp_cflags = ["-Wall",
]
myapp_ldflags = ["-L/usr/local/lib",
]# 指定可执行文件构建规则
executable(myapp_name){sources = myapp_sourcescflags = myapp_cflagsldflags = myapp_ldflags
}

3.4 GN在OpenHarmony上的扩展

OpenHarmony在GN原生模板的基础上进行了功能扩展,提供了ohos_shared_library、ohos_static_library、ohos_executable模板,在BUILD.gn中import(“//build/ohos.gni”)即可使用,ohos_shared_library示例如下:

import("//build/ohos.gni")
ohos_shared_library("helloworld") {sources = []include_dirs = []cflags = []cflags_c = []cflags_cc = []ldflags = []configs = []deps = []  # 部件内模块依赖# 跨部件模块依赖定义,# 定义格式为 "部件名:模块名称"# 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块external_deps = ["part_name:module_name",]output_name = ""           # 可选,模块输出名output_extension = ""      # 可选,模块名后缀module_install_dir = ""    # 可选,缺省在/system/lib64或/system/lib下, 模块安装路径,模块安装路径,从system/,vendor/后开始指定relative_install_dir = ""  # 可选,模块安装相对路径,相对于/system/lib64或/system/lib;如果有module_install_dir配置时,该配置不生效install_images = []        # 可选,缺省值system,指定模块安装到那个分区镜像中,可以指定多个part_name = "" # 必选,所属部件名称
}



写在最后

好了今天的博客OpenHarmony下gn相关使用就到这里了。总之,青山不改绿水长流先到这里了。如果本博客对你有所帮助,麻烦关注或者点个赞,如果觉得很烂也可以踩一脚!谢谢各位了!!

友情参考:

1.OpenHarmony下cmake转gn指导
2.OpenHarmony标准系统如何添加一个模块

前面两个文档是官方aosp下Build/doc下面的文档

3.gn语法及在鸿蒙的使用

http://www.lryc.cn/news/303131.html

相关文章:

  • 怎样重置ubuntu mysql8密码
  • SpringBoot+WebSocket实现即时通讯(三)
  • vue3前端项目开发,具备纯天然的防止爬虫采集的特征
  • js 多对象去重(多属性去重)
  • 在 JavaScript 中,Map 与 object 的差别?为什么有 object 还需要 Map?
  • 【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——自我介绍(英文)
  • ACP科普:IDEAL含义及应用
  • 【GO语言卵细胞级别教程】06.GO语言的字符串操作
  • 【笔记】【算法设计与分析 - 北航童咏昕教授】绪论
  • 大语言模型LLM中Transformer模型的调用过程与步骤
  • mysql connect unblock with mysqladmin flush-hosts
  • 每日一练:前端js实现算法之两数之和
  • 17.隐式参数的定义和使用
  • 简单介绍一下WebRTC中NACK机制
  • 05 Flink 的 WordCount
  • 2024云服务器ECS_云主机_服务器托管_e实例-阿里云
  • 掌握这8大工具,自媒体ai写作之路畅通无阻! #经验分享#科技#媒体
  • CTFHub技能树web之文件上传(一)
  • 蔚来面试解答
  • Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
  • Java使用企业邮箱发送预警邮件
  • Unity编辑器扩展之是否勾选Text组件BestFit选项工具(此篇教程也可以操作其他组件的属性)
  • 分布式场景怎么Join | 京东云技术团队
  • 24-k8s的附件组件-Metrics-server组件与hpa资源pod水平伸缩
  • Spring RabbitMQ 配置多个虚拟主机(vhost)
  • 「Qt Widget中文示例指南」如何实现文档查看器?(一)
  • 如何创建WordPress付款表单(简单方法)
  • 虹科方案 | 释放总线潜力:汽车总线离线模拟解决方案
  • 欲速则不达,慢就是快!
  • ubuntu22.04@Jetson OpenCV安装