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_sources
cflags = mylib_cflags
ldflags = 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_sources
cflags = 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_sources
cflags = myapp_cflags
ldflags = 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下面的文档文章来源:https://www.toymoban.com/news/detail-832824.html
3.gn语法及在鸿蒙的使用文章来源地址https://www.toymoban.com/news/detail-832824.html
到了这里,关于OpenHarmony下gn相关使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!