本页面介绍了 Ghidra 基于 Gradle 的构建系统,该系统负责管理编译、依赖解析、原生代码编译、文档生成和分发包创建。有关从源代码构建 Ghidra 的信息,请参阅 构建 Ghidra。有关创建扩展的信息,请参阅 创建扩展。
Ghidra 的构建系统基于 Gradle,具有分层的任务定义、属性和配置结构。该系统使用一组 Gradle 脚本来管理构建过程的各个方面。
来源:build.gradle16-114 DevGuide.md31-70 gradle/root/distribution.gradle16-57 gradle/support/fetchDependencies.gradle16-34
构建系统包含以下主要组件
| 文件 | 目的 |
|---|---|
build.gradle | 主构建文件,用于配置全局属性并应用其他脚本 |
gradle/root/distribution.gradle | 处理分发包和组件的打包 |
gradle/support/fetchDependencies.gradle | 下载外部依赖项 |
GPL/nativeBuildProperties.gradle | 配置原生代码编译 |
gradle/support/ip.gradle | 管理文件的许可信息 |
gradle/hasPythonPackage.gradle | 处理 Python 包集成 |
来源:build.gradle104-112 DevGuide.md31-68 gradle/root/distribution.gradle642-713 gradle/support/fetchDependencies.gradle16-34
构建过程遵循从依赖解析到最终打包的定义生命周期。
来源:DevGuide.md31-68 gradle/root/distribution.gradle642-713 build.gradle74-91
Ghidra 的构建系统管理来自多个来源的依赖项
fetchDependencies 任务下载该系统处理不同场景下的依赖项解析,包括离线构建。
外部依赖项在 fetchDependencies.gradle 中定义,并在构建准备阶段下载。这些依赖项包括
来源:gradle/support/fetchDependencies.gradle63-345 DevGuide.md32-36 build.gradle74-91
Ghidra 的构建系统支持多平台,包含特定平台的原生组件和分发产物。
构建系统默认使用当前平台来确定要构建的原生组件。通过 -PallPlatforms 标志,它可以构建一个跨平台的分发包。
来源:GPL/nativeBuildProperties.gradle16-203 build.gradle52-56 GPL/vsconfig.gradle12-79 gradle/root/distribution.gradle507-532
原生组件使用特定于平台的工具链进行构建
系统根据当前平台自动检测合适的工具链。为每个支持的平台生成特定于平台的构建任务。
对于 PDB 支持和其他原生组件,构建系统使用特定的项目文件
来源:GPL/nativeBuildProperties.gradle124-171 Ghidra/Features/PDB/buildNatives.gradle26-58 Ghidra/Features/PDB/src/pdb/pdb.vcxproj1-132
Ghidra 在其构建系统中具有深度 Python 集成,支持
来源:gradle/root/venv.gradle16-36 gradle/hasPythonPackage.gradle16-103 Ghidra/Features/PyGhidra/build.gradle22-111 build.gradle155-237
构建过程的最后一步是创建分发包,其中包括
来源: gradle/root/distribution.gradle349-495 gradle/root/distribution.gradle642-720
构建系统提供了各种任务,以满足不同的开发工作流
| 任务 | 描述 |
|---|---|
gradle -I gradle/support/fetchDependencies.gradle | 下载非 Maven Central 依赖项 |
gradle prepdev | 下载 Maven Central 依赖项并为开发进行设置 |
gradle cleanEclipse eclipse | 生成 Eclipse 项目文件 |
gradle buildNatives | 为当前平台构建原生组件 |
gradle sleighCompile | 编译 Sleigh 文件 |
gradle createJavadocs | 构建 Javadoc 文档 |
gradle buildPyPackage | 为 PyGhidra 和 Debugger 构建 Python 包 |
gradle assembleAll | 以未压缩形式构建 Ghidra |
gradle buildGhidra | 构建压缩的 Ghidra 发行版 |
| 任务 | 描述 |
|---|---|
gradle unitTestReport | 运行单元测试并生成报告 |
gradle integrationTest | 运行集成测试 |
gradle combinedTestReport | 运行所有测试并生成报告 |
来源: DevGuide.md31-68 DevGuide.md147-161
构建系统支持扩展的开发和打包
来源: gradle/support/extensionCommon.gradle18-142 gradle/distributableGhidraModule.gradle16-234
构建系统支持在隔离网络环境中进行离线构建
gradle -I gradle/support/fetchDependencies.gradle
gradle -g dependencies/gradle prepdev
# Move ghidra directory to offline system
gradle -g dependencies/gradle buildGhidra