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语法及在鸿蒙的使用
相关文章:
OpenHarmony下gn相关使用
OpenHarmony下gn相关使用 引言 为了提高OpenHarmony下移植vivante gpu的成功率,先得把准备工作做足了,这样后续就好搞了。所以本文档的核心工作介绍GN构建工具在OpenHarmony中的常见使用方法,指导三方库由cmake或者其它的脚本构建到GN构建的…...
怎样重置ubuntu mysql8密码
密码很难记住,所以如果您忘记了 MySQL root 密码,幸运的是,有一种方法可以更改它。这篇文章是为您而写的,在这篇文章结束时,您将成功更改 MySQL 的密码。 本博客演示了如何在 Ubuntu 上重置使用包管理器安装的 MySQL …...
SpringBoot+WebSocket实现即时通讯(三)
前言 紧接着上文《SpringBootWebSocket实现即时通讯(二)》 本博客姊妹篇 SpringBootWebSocket实现即时通讯(一)SpringBootWebSocket实现即时通讯(二)SpringBootWebSocket实现即时通讯(三&…...
vue3前端项目开发,具备纯天然的防止爬虫采集的特征
vue3前端项目开发,具备纯天然的防止爬虫采集的特征!众所周知,网络爬虫可以在网上爬取到一些数据,很多公司,为了自己公司的数据安全, 尤其是web端项目,不希望被爬虫采集。那么,您可以使用vue技术…...
js 多对象去重(多属性去重)
需求中发现后端可能没有处理重复数据,这个时候前段可以直接解决。 在 JavaScript 中,可以使用 Set 数据结构来进行多对象的去重。Set 是 ES6 新引入的集合类型,其特点是元素不会重复且无序。 下面是一个示例代码,展示如何通过 S…...
在 JavaScript 中,Map 与 object 的差别?为什么有 object 还需要 Map?
ES6 推出了Map 物件,让开发者可以透过这个特制资料结构进行键值对(key-value pairs) 的操作。然而 JavaScript 原始物件 (plain object) 就可以用来做键值对的操作,为什么还需要 Map 物件呢? Map 物件解决了什么问题? 原始物件的键 (key) 只可以是字串…...
【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——自我介绍(英文)
1、JAVA 2、计算机网络 3、计算机体系结构 4、数据库 5、计算机租场原理 6、软件工程 7、大数据 8、英文 自我介绍 自我介绍 英文 自我介绍 英文 第一段: Good afternoon, dear professors, thank you for the chance to introduce myself. My name is Yan Zhen …...
ACP科普:IDEAL含义及应用
一、IDEAL介绍 IDEAL模型是一种组织改进模型,描述了组织在实施变革过程中可能经历的五个阶段: 启动诊断确立执行学习 这个模型可以应用于各种组织,包括软件开发团队、项目管理团队以及整个组织的变革过程。 二、IDEAL拆解 当应用IDEAL模型…...
【GO语言卵细胞级别教程】06.GO语言的字符串操作
【GO语言卵细胞级别教程】06.GO语言的字符串操作 温馨提示: 本文中使用的项目模块均是 【05.项目创建和函数讲解】 中创建的,具体如何创建项目,请参考 【GO语言卵细胞级别教程】05.项目创建和函数讲解 目录: 【GO语言卵细胞级别…...
【笔记】【算法设计与分析 - 北航童咏昕教授】绪论
算法设计与分析 - 北航童咏昕教授 文章目录 算法的定义定义性质 算法的表示自然语言编程语言伪代码 算法的分析算法分析的原则渐近分析 算法的定义 定义 给定计算问题,算法是一系列良定义的计算步骤,逐一执行计算步骤即可得预期的输出。 性质 有穷性确…...
大语言模型LLM中Transformer模型的调用过程与步骤
在LLM(Language Model)中,Transformer是一种用来处理自然语言任务的模型架构。下面是Transformer模型中的调用过程和步骤的简要介绍: 数据预处理:将原始文本转换为模型可以理解的数字形式。这通常包括分词、编码和填充…...
mysql connect unblock with mysqladmin flush-hosts
原因 同一个ip在短时间内产生太多(超过max_connect_errors的最大值)中断的数据库连接而导致的阻塞。 查看 max_connect_errors show variables like max_connect_errors; 解决 前提:需要换一个IP地址连接 方法一 增大 max_connect_err…...
每日一练:前端js实现算法之两数之和
方法一:暴力法 function twoSum(nums, target) {for (let i 0; i < nums.length; i) {for (let j i 1; j < nums.length; j) {if (nums[i] nums[j] target) {return [i, j];}}}return null; }方法二:哈希表 function twoSum(nums, target) …...
17.隐式参数的定义和使用
目录 概述实践代码执行 结束 概述 实践 代码 package com.fun.scalaobject ImplicitParamsApp {def main(args: Array[String]): Unit {say("天下")implicit val word "spark"// 多个报错 // implicit val word2 "flink"implicit val con…...
简单介绍一下WebRTC中NACK机制
WebRTC中的NACK(Negative Acknowledgement)是一种用于实时通信的网络协议,用于在传输过程中检测和纠正丢包。当接收方检测到数据包丢失时,它会发送一个NACK消息给发送方,请求重新发送丢失的数据包。 NACK的工作原理如…...
05 Flink 的 WordCount
前言 本文对应于 spark 系列的 Spark 的 WordCount 这里主要是 从宏观上面来看一下 flink 这边的几个角色, 以及其调度的整个流程 一个宏观 大局上的任务的处理, 执行 基于 一个本地的 flink 集群 测试用例 /*** com.hx.test.Test01WordCount** author Jerry.X.He* ver…...
2024云服务器ECS_云主机_服务器托管_e实例-阿里云
阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如ECS经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云服务器网al…...
掌握这8大工具,自媒体ai写作之路畅通无阻! #经验分享#科技#媒体
这些宝藏AI 写作神器,我不允许你还不知道~国内外免费付费都有,还有AI写作小程序分享,大幅度提高写文章、写报告的效率,快来一起试试吧! 1.元芳写作 这是一个微信公众号 面向专业写作领域的ai写作工具,写作…...
CTFHub技能树web之文件上传(一)
一.前置知识 文件上传漏洞:文件上传功能是许多Web应用程序的常见功能之一,但在实施不当的情况下,可能会导致安全漏洞。文件上传漏洞的出现可能会使攻击者能够上传恶意文件,执行远程代码,绕过访问控制等。 文件类型验证…...
蔚来面试解答
你的问题包含了多个方面,我会尽力逐一回答: 锁机制及锁膨胀过程: 锁机制是并发编程中用于控制多线程对共享资源访问的一种机制,以避免资源冲突导致的数据不一致问题。锁膨胀是指锁在运行时根据竞争情况可以升级的过程,…...
Phi-4-mini-reasoning从零开始:CSDN GPU实例上免配置Web服务部署
Phi-4-mini-reasoning从零开始:CSDN GPU实例上免配置Web服务部署 1. 模型介绍 Phi-4-mini-reasoning 是一款专注于推理任务的文本生成模型,特别擅长处理需要多步逻辑分析的场景。与通用聊天模型不同,它更专注于"问题输入→推理过程→最…...
OpenClaw自动化测试:Qwen3.5-9B持续集成实践
OpenClaw自动化测试:Qwen3.5-9B持续集成实践 1. 为什么选择OpenClaw做自动化测试 去年我在迭代一个NLP模型时,每次代码提交后都需要手动跑测试用例、截图对比结果、再发邮件给团队——这套流程每周要重复十几次。直到发现OpenClaw这个"能操作电脑…...
终极指南:3分钟完成Axure RP中文界面切换,免费语言包全解析
终极指南:3分钟完成Axure RP中文界面切换,免费语言包全解析 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...
JIT加速不生效?你漏掉了这4个强制启用开关,3.14新增--enable-jit-unsafe-mode正在被92%团队忽略
第一章:JIT加速不生效?你漏掉了这4个强制启用开关,3.14新增--enable-jit-unsafe-mode正在被92%团队忽略Go 3.14 引入了激进的 JIT 编译优化路径,但默认关闭全部 JIT 后端。大量团队在升级后观察到 GOMAXPROCS8 下 CPU 利用率未提升…...
【车辆】插电式混合动力汽车(PHEV)动力系统进行建模与设计MATLAB 代码,含发动机、电机、电池组等组件
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
三步快速配置:极简二维码插件让你的浏览器变身智能跨设备助手
三步快速配置:极简二维码插件让你的浏览器变身智能跨设备助手 【免费下载链接】chrome-qrcode chrome-qrcode - 一个 Chrome 浏览器插件,可以生成当前 URL 或选中文本的二维码,或解码网页上的二维码。 项目地址: https://gitcode.com/gh_mi…...
资源限制工具:解决腾讯游戏ACE-Guard资源占用过高的创新方案
资源限制工具:解决腾讯游戏ACE-Guard资源占用过高的创新方案 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 为什么游戏玩家总是陷入"卡…...
视频超分实战:TDAN网络结构拆解与代码对照指南(附完整流程图)
视频超分实战:TDAN网络结构拆解与代码对照指南(附完整流程图) 在视频超分辨率领域,帧间对齐质量直接决定了最终重建效果的上限。传统光流法虽然成熟,但依赖额外网络且误差累积问题显著。TDAN(Temporally D…...
Open-AutoGLM场景实战:电商购物、出行旅游、内容浏览一键完成
Open-AutoGLM场景实战:电商购物、出行旅游、内容浏览一键完成 1. 引言:手机AI助手的革命性突破 想象一下这样的场景:早上醒来,你对手机说"帮我订一杯星巴克拿铁和一份三明治",手机自动完成打开外卖应用、选…...
MySQL 故障排查与生产环境优化笔记
一、基础信息1. 实验环境数据库版本:MySQL 8.0架构:1 台单实例 2 台主从复制环境用途:模拟生产故障、验证优化方案2. MySQL 逻辑架构(四层)连接层处理客户端连接、授权认证、权限校验提供线程池、SSL 安全连接服务层S…...
