183a1de1fSlogin# DADK - DragonOS Application Development Kit
283a1de1fSlogin# DragonOS 应用开发工具
3ae10b79aSlongjin
4bb3f6fb8SLoGin[![codecov](https://codecov.io/gh/DragonOS-Community/DADK/graph/badge.svg?token=K3AYCACL8Z)](https://codecov.io/gh/DragonOS-Community/DADK)
5bb3f6fb8SLoGin
6ae10b79aSlongjin## 简介
7ae10b79aSlongjin
8ae10b79aSlongjinDADK是一个用于开发DragonOS应用的工具包,设计目的是为了让开发者能够更加方便的开发DragonOS应用。
9ae10b79aSlongjin
1039c9a9f1SLoGin## 文档
1139c9a9f1SLoGin
1239c9a9f1SLoGinDADK的文档托管在[DADK Docs](https://docs.dragonos.org.cn/p/dadk/)上。
1339c9a9f1SLoGin
14ae10b79aSlongjin### DADK做什么?
15ae10b79aSlongjin
16ae10b79aSlongjin- 自动配置libc等编译用户程序所需的环境
17ae10b79aSlongjin- 自动处理软件库的依赖关系
18ae10b79aSlongjin- 自动处理软件库的编译
19ae10b79aSlongjin- 一键将软件库安装到DragonOS系统中
20ae10b79aSlongjin
21ae10b79aSlongjin### DADK不做什么?
22ae10b79aSlongjin
23ae10b79aSlongjin- DADK不会帮助开发者编写代码
24ae10b79aSlongjin- DADK不提供任何开发DragonOS应用所需的API。这部分工作由libc等库来完成
25ae10b79aSlongjin
26ae10b79aSlongjin## License
27ae10b79aSlongjin
28ae10b79aSlongjinDADK is licensed under the [GPLv2 License](LICENSE).
2983a1de1fSlogin
3083a1de1fSlogin## 快速开始
3183a1de1fSlogin
3283a1de1fSlogin### 安装DADK
3383a1de1fSlogin
3483a1de1fSloginDADK是一个Rust程序,您可以通过Cargo来安装DADK。
3583a1de1fSlogin
3683a1de1fSlogin```shell
3783a1de1fSlogin# 从GitHub安装最新版
3883a1de1fSlogincargo install --git https://github.com/DragonOS-Community/DADK.git
3983a1de1fSlogin
4083a1de1fSlogin# 从crates.io下载
4183a1de1fSlogincargo install dadk
4283a1de1fSlogin
4383a1de1fSlogin```
4483a1de1fSlogin
4583a1de1fSlogin## DADK的工作原理
4683a1de1fSlogin
4783a1de1fSloginDADK使用(任务名,任务版本)来标识每个构建目标。当使用DADK构建DragonOS应用时,DADK会根据用户的配置文件,自动完成以下工作:
4883a1de1fSlogin
4983a1de1fSlogin- 解析配置文件,生成DADK任务列表
5083a1de1fSlogin- 根据DADK任务列表,进行拓扑排序。这一步会自动处理软件库的依赖关系。
5183a1de1fSlogin- 收集环境变量信息,并根据DADK任务列表,设置全局环境变量、任务环境变量。
5283a1de1fSlogin- 根据拓扑排序后的DADK任务列表,自动执行任务。
5383a1de1fSlogin
5483a1de1fSlogin### DADK与环境变量
5583a1de1fSlogin
5683a1de1fSlogin环境变量的设置是DADK能正常工作的关键因素之一,您可以在您的编译脚本中,通过引用环境变量,来获得其他软件库的编译信息。
5783a1de1fSlogin这是使得您的应用能够自动依赖其他软件库的关键一步。
5883a1de1fSlogin
5983a1de1fSlogin只要您的编译脚本能够正确地引用环境变量,DADK就能够自动处理软件库的依赖关系。
6083a1de1fSlogin
6170a5e6c7SLoGin#### 全局环境变量
6270a5e6c7SLoGin
6383a1de1fSloginDADK会设置以下全局环境变量:
6483a1de1fSlogin
6583a1de1fSlogin- `DADK_CACHE_ROOT`:DADK的缓存根目录。您可以在编译脚本中,通过引用该环境变量,来获得DADK的缓存根目录。
6683a1de1fSlogin- `DADK_BUILD_CACHE_DIR_任务名_任务版本`:DADK的任务构建结果缓存目录。当您要引用其他软件库的构建结果时,可以通过该环境变量来获得。
6783a1de1fSlogin同时,您也要在构建您的app时,把构建结果放到您的软件库的构建结果缓存目录(通过对应的环境变量获得)中。
6883a1de1fSlogin- `DADK_SOURCE_CACHE_DIR_任务名_任务版本`:DADK的某个任务的源码目录。当您要引用其他软件库的源码目录时,可以通过该环境变量来获得。
6983a1de1fSlogin
7070a5e6c7SLoGin#### 任务环境变量
7170a5e6c7SLoGin
7270a5e6c7SLoGin- DADK会为每个任务设置其自身在配置文件中指定的环境变量。
7370a5e6c7SLoGin- DADK会设置`DADK_CURRENT_BUILD_DIR`环境变量,其值与`DADK_BUILD_CACHE_DIR_任务名_任务版本`相同。方便您在编译脚本中引用,把构建结果拷贝到这里。
7470a5e6c7SLoGin
7570a5e6c7SLoGin
7683a1de1fSlogin
7783a1de1fSlogin#### 全局环境变量命名格式
7883a1de1fSlogin
7983a1de1fSlogin全局环境变量中的任务名和任务版本,都会被转换为大写字母,并对特殊字符进行替换。替换表如下:
8083a1de1fSlogin
8183a1de1fSlogin| 原字符 | 替换字符 |
8283a1de1fSlogin| ------ | -------- |
8383a1de1fSlogin| `.`    | `_`      |
8483a1de1fSlogin| `-`    | `_`      |
8583a1de1fSlogin| `\t`   | `_`      |
8683a1de1fSlogin| 空格   | `_`      |
8783a1de1fSlogin| `+`    | `_`      |
8883a1de1fSlogin| `*`    | `_`      |
8983a1de1fSlogin
9083a1de1fSlogin**举例**:对于任务`libc-0.1.0`,其构建结果的全局环境变量名为`DADK_BUILD_CACHE_DIR_LIBC_0_1_0`。
9183a1de1fSlogin
9283a1de1fSlogin
9383a1de1fSlogin## TODO
9483a1de1fSlogin
9583a1de1fSlogin- 支持从在线归档文件下载源码、构建好的软件库
9683a1de1fSlogin- 支持自动更新
9783a1de1fSlogin- 完善clean命令的逻辑