# How to Build Ghidra from Source: Complete Guide to the Gradle Build System

> Learn how to build Ghidra from source using the Gradle build system. Compile Java, C++ and docs into a distributable zip with the ./gradlew buildGhidra command.

- Repository: [National Security Agency/ghidra](https://github.com/NationalSecurityAgency/ghidra)
- Tags: how-to-guide
- Published: 2026-03-04

---

**Ghidra uses a multi-module Gradle 8.5+ build system to compile Java source, C/C++ native libraries, and documentation into a platform-specific distributable zip file via the `./gradlew buildGhidra` command.**

The NationalSecurityAgency/ghidra repository provides the complete source code for the NSA’s open-source reverse engineering suite. Understanding the Ghidra build system is essential for developers who need to compile from source, customize distributions, or contribute to the project. This guide explains the core Gradle architecture and the exact commands to produce a working Ghidra installation.

## Prerequisites for Compiling Ghidra

Before invoking the build system, ensure your environment meets the requirements documented in [`README.md`](https://github.com/NationalSecurityAgency/ghidra/blob/main/README.md) and [`DevGuide.md`](https://github.com/NationalSecurityAgency/ghidra/blob/main/DevGuide.md):

- **JDK 21** (64-bit)
- **Python 3.9–3.13**
- **Native tool chain**: GCC or Clang on Linux/macOS; Visual Studio 2017+ on Windows
- **Internet connection** for the initial dependency fetch (or a pre-populated `dependencies/` directory)

## Gradle Build System Architecture

Ghidra’s build is organized as a multi-module Gradle project. The root configuration aggregates sub-projects located under `Ghidra/` and orchestrates their compilation.

### Root Project Configuration

The file `gradle/root/build.gradle` declares the main Gradle project, configures Maven Central repositories, defines Java toolchains, and applies common plugin settings to all sub-projects. This root script ensures every module—from the decompiler to the debugger—uses consistent compiler settings.

### Distribution Assembly Logic

The core packaging logic resides in `gradle/root/distribution.gradle`. This script defines the `buildGhidra` task, which internally calls:

- `assembleDistribution` – Copies core Java artifacts, GPL resources, and licenses into a staging directory
- `updateSlaFilesTimestamp` – Stamps SLA files to avoid unnecessary sleigh recompilation on startup
- `createJavadocs` / `createJsondocs` – Generates API documentation and Python type stubs
- `assembleDistribution_<platform>` – Copies platform-specific native binaries
- `createInstallationZip` – Compresses the staged tree into `build/dist/<prefix>_<platform>.zip`

### Public Task Interface

Developer-facing commands are exposed in `gradle/root/usage.gradle`. This file lists the high-level tasks users normally invoke, such as `prepdev`, `buildNatives`, and `buildGhidra`.

### Dependency Fetching

External binaries not available on Maven Central are retrieved via `gradle/support/fetchDependencies.gradle`. This script populates the local `dependencies/` directory with items like debug adapters and native libraries required for the build.

## Step-by-Step Compilation Guide

Follow these steps to compile Ghidra from source on any supported platform.

### 1. Fetch External Dependencies

Run the initialization script once per repository checkout to download non-Maven dependencies:

```bash
./gradlew -I gradle/support/fetchDependencies.gradle

```

The Gradle wrapper (`gradlew` or `gradlew.bat` on Windows) automatically downloads Gradle 8.5+ if it is not already present.

### 2. Build the Full Distribution

Execute the primary build task to compile Java, C/C++ natives, and documentation:

```bash
./gradlew buildGhidra

```

Under the hood, this triggers the full pipeline defined in `distribution.gradle`, including `assembleDistribution`, native binary copying, SLA timestamp updates, and `createInstallationZip`.

### 3. Locate the Output

After successful completion, the final zip appears in:

```

build/dist/<DISTRO_PREFIX>_<platform>.zip

```

For example: `ghidra_10.2_PUBLIC_20240304_linux_x86_64.zip`. Extract this archive to run Ghidra.

## Essential Gradle Tasks for Ghidra Development

The build system provides granular tasks for specific development workflows:

- **`prepdev`** – Resolves Maven Central dependencies, cleans caches, and generates Eclipse project metadata for IDE import.
- **`buildNatives`** – Compiles C/C++ components for the host platform only (useful for iterative native development).
- **`assembleDistribution`** – Stages all files for distribution without creating the final zip.
- **`createInstallationZip`** – Produces the final distributable zip (called automatically by `buildGhidra`).
- **`assembleAll`** – Assembles core and all platform-specific targets without zipping.
- **`unitTestReport`** – Runs the unit test suite and generates HTML reports.
- **`clean`** – Removes the `build/` directory and all generated artifacts.

## Optimizing Build Workflows

For faster iteration during development, skip unnecessary steps using the `-x` (exclude) flag:

```bash

# Skip native compilation if binaries are already present

./gradlew buildGhidra -x buildNatives

```

To prepare an Eclipse development environment with resolved dependencies and generated project files:

```bash
./gradlew prepdev eclipse buildNatives

```

This command sequence ensures the IDE can index all Java sources while keeping native libraries synchronized with the host platform.

## Summary

- Ghidra requires **Gradle 8.5+**, **JDK 21**, **Python 3.9–3.13**, and platform-specific native toolchains to compile from source.
- The build system is defined in `gradle/root/build.gradle` and `gradle/root/distribution.gradle`, using a multi-module structure where each feature lives under `Ghidra/`.
- Run `./gradlew -I gradle/support/fetchDependencies.gradle` once to fetch external binaries, then `./gradlew buildGhidra` to generate the final zip in `build/dist/`.
- Key tasks include `prepdev` for IDE setup, `buildNatives` for C/C++ compilation, and `buildGhidra` for the complete assembly pipeline.

## Frequently Asked Questions

### What version of Gradle is required to build Ghidra?

Ghidra requires **Gradle 8.5 or newer**. The repository includes a Gradle wrapper (`gradlew`/`gradlew.bat`) that automatically downloads the correct version when you run commands. Alternatively, you may use a locally installed Gradle distribution if you prefer.

### How do I compile Ghidra without building the native C/C++ components?

Execute `./gradlew buildGhidra -x buildNatives` to skip native compilation entirely, or run `./gradlew assembleDistribution -x buildNatives` to stage the Java-only distribution. This is useful when native binaries are already present in `Ghidra/Features/*/os/` or when working exclusively on Java code.

### Where is the final Ghidra distribution located after compilation?

The completed zip file is written to `build/dist/<DISTRO_PREFIX>_<platform>.zip`, where `<DISTRO_PREFIX>` combines the repository name and build date (for example, `ghidra_10.2_PUBLIC_20240304`). This path is generated by the `createInstallationZip` task defined in `gradle/root/distribution.gradle`.

### Can I use Eclipse for Ghidra development?

Yes. Run `./gradlew prepdev eclipse` to generate Eclipse project metadata and resolve all Maven Central dependencies. This command also prepares the native build environment, allowing you to import the multi-module project directly into Eclipse IDE for development and debugging.