1# DADK - DragonOS Application Development Kit 2# DragonOS 应用开发工具 3 4[![codecov](https://codecov.io/gh/DragonOS-Community/DADK/graph/badge.svg?token=K3AYCACL8Z)](https://codecov.io/gh/DragonOS-Community/DADK) 5 6## 简介 7 8DADK是一个用于开发DragonOS应用的工具包,设计目的是为了让开发者能够更加方便的开发DragonOS应用。 9 10## 文档 11 12DADK的文档托管在[DADK Docs](https://docs.dragonos.org.cn/p/dadk/)上。 13 14### DADK做什么? 15 16- 自动配置libc等编译用户程序所需的环境 17- 自动处理软件库的依赖关系 18- 自动处理软件库的编译 19- 一键将软件库安装到DragonOS系统中 20 21### DADK不做什么? 22 23- DADK不会帮助开发者编写代码 24- DADK不提供任何开发DragonOS应用所需的API。这部分工作由libc等库来完成 25 26## License 27 28DADK is licensed under the [GPLv2 License](LICENSE). 29 30## 快速开始 31 32### 安装DADK 33 34DADK是一个Rust程序,您可以通过Cargo来安装DADK。 35 36```shell 37# 从GitHub安装最新版 38cargo install --git https://github.com/DragonOS-Community/DADK.git 39 40# 从crates.io下载 41cargo install dadk 42 43``` 44 45## DADK的工作原理 46 47DADK使用(任务名,任务版本)来标识每个构建目标。当使用DADK构建DragonOS应用时,DADK会根据用户的配置文件,自动完成以下工作: 48 49- 解析配置文件,生成DADK任务列表 50- 根据DADK任务列表,进行拓扑排序。这一步会自动处理软件库的依赖关系。 51- 收集环境变量信息,并根据DADK任务列表,设置全局环境变量、任务环境变量。 52- 根据拓扑排序后的DADK任务列表,自动执行任务。 53 54### DADK与环境变量 55 56环境变量的设置是DADK能正常工作的关键因素之一,您可以在您的编译脚本中,通过引用环境变量,来获得其他软件库的编译信息。 57这是使得您的应用能够自动依赖其他软件库的关键一步。 58 59只要您的编译脚本能够正确地引用环境变量,DADK就能够自动处理软件库的依赖关系。 60 61#### 全局环境变量 62 63DADK会设置以下全局环境变量: 64 65- `DADK_CACHE_ROOT`:DADK的缓存根目录。您可以在编译脚本中,通过引用该环境变量,来获得DADK的缓存根目录。 66- `DADK_BUILD_CACHE_DIR_任务名_任务版本`:DADK的任务构建结果缓存目录。当您要引用其他软件库的构建结果时,可以通过该环境变量来获得。 67同时,您也要在构建您的app时,把构建结果放到您的软件库的构建结果缓存目录(通过对应的环境变量获得)中。 68- `DADK_SOURCE_CACHE_DIR_任务名_任务版本`:DADK的某个任务的源码目录。当您要引用其他软件库的源码目录时,可以通过该环境变量来获得。 69 70#### 任务环境变量 71 72- DADK会为每个任务设置其自身在配置文件中指定的环境变量。 73- DADK会设置`DADK_CURRENT_BUILD_DIR`环境变量,其值与`DADK_BUILD_CACHE_DIR_任务名_任务版本`相同。方便您在编译脚本中引用,把构建结果拷贝到这里。 74 75 76 77#### 全局环境变量命名格式 78 79全局环境变量中的任务名和任务版本,都会被转换为大写字母,并对特殊字符进行替换。替换表如下: 80 81| 原字符 | 替换字符 | 82| ------ | -------- | 83| `.` | `_` | 84| `-` | `_` | 85| `\t` | `_` | 86| 空格 | `_` | 87| `+` | `_` | 88| `*` | `_` | 89 90**举例**:对于任务`libc-0.1.0`,其构建结果的全局环境变量名为`DADK_BUILD_CACHE_DIR_LIBC_0_1_0`。 91 92 93## TODO 94 95- 支持从在线归档文件下载源码、构建好的软件库 96- 支持自动更新 97- 完善clean命令的逻辑