Install this version:
emerge -a =dev-util/ghidra-9999
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =dev-util/ghidra-9999
Or alternatively:
emerge --autounmask-write -a =dev-util/ghidra-9999
| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 9999 | 8 | 0 |
# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{11..14} )
GRADLE_SLOT="9.7.0"
inherit desktop git-r3 gradle java-pkg-2 python-single-r1 xdg-utils
DESCRIPTION="A software reverse engineering (SRE) framework"
HOMEPAGE="https://ghidra-sre.org/ https://github.com/NationalSecurityAgency/ghidra"
EGIT_REPO_URI="https://github.com/NationalSecurityAgency/ghidra.git"
LICENSE="Apache-2.0 GPL-2+ GPL-3+"
SLOT="0"
KEYWORDS=""
IUSE="bsim +debugger doc eclipse +fidb +gui ida +jython lisa machine-learning +python +sarif server +z3"
RESTRICT="test"
REQUIRED_USE="
python? ( ${PYTHON_REQUIRED_USE} )
debugger? ( sarif python )
lisa? ( sarif )
"
BDEPEND="
app-arch/unzip
dev-java/gradle-bin:${GRADLE_SLOT}
dev-java/jflex
sys-devel/bison
python? (
${PYTHON_DEPS}
$(python_gen_cond_dep '
dev-python/pip[${PYTHON_USEDEP}]
dev-python/setuptools[${PYTHON_USEDEP}]
dev-python/wheel[${PYTHON_USEDEP}]
')
)
"
RDEPEND="
>=virtual/jre-21:*
python? (
${PYTHON_DEPS}
$(python_gen_cond_dep '
dev-python/jpype[${PYTHON_USEDEP}]
dev-python/protobuf[${PYTHON_USEDEP}]
dev-python/psutil[${PYTHON_USEDEP}]
')
)
z3? ( sci-mathematics/z3 )
"
DEPEND="
${RDEPEND}
>=virtual/jdk-21:*
"
QA_PREBUILT="
usr/share/ghidra/GPL/DemanglerGnu/os/*/demangler_gnu_*
usr/share/ghidra/Ghidra/Features/Decompiler/os/*/decompile
usr/share/ghidra/Ghidra/Features/Decompiler/os/*/sleigh
usr/share/ghidra/Ghidra/Features/FileFormats/os/*/lzfse
usr/share/ghidra/Ghidra/Features/FileFormats/data/sevenzipnativelibs/*/*.so
usr/share/ghidra/Ghidra/Extensions/SymbolicSummaryZ3/os/*/*.so
"
ghidra_extensions() {
use bsim && echo BSimElasticPlugin
use jython && echo Jython
use lisa && echo Lisa
use machine-learning && echo MachineLearning
use z3 && echo SymbolicSummaryZ3
return 0
}
pkg_postinst() {
use gui || return
xdg_desktop_database_update
xdg_icon_cache_update
}
pkg_postrm() {
use gui || return
xdg_desktop_database_update
xdg_icon_cache_update
}
pkg_setup() {
java-pkg-2_pkg_setup
use python && python-single-r1_pkg_setup
}
src_unpack() {
git-r3_src_unpack
# src_unpack is the only phase a live ebuild may use the network in
gradle_setup_offline_repo
# not upstream's "init": that task cannot configure an existing build
cd "${S}" || die
egradle -I gradle/support/fetchDependencies.gradle help
gradle_resolve_online
}
src_prepare() {
default
# Windows only, and wants a prebuilt type library
rm -rf Ghidra/Debug/Debugger-agent-dbgeng || die
use fidb || rm -rf dependencies/fidb || die
# Python configuration
if use python; then
sed -i "s/findPython3(true)/\"${EPYTHON}\"/" build.gradle || die
else
rm -rf Ghidra/Features/PyGhidra || die
fi
# Optional modules controlled by USE flags
if ! use bsim; then
rm -rf Ghidra/Features/BSim \
Ghidra/Features/BSimFeatureVisualizer \
Ghidra/Features/VersionTrackingBSim \
Ghidra/Extensions/BSimElasticPlugin || die
fi
if ! use debugger; then
sed -i "/includeProjects('Ghidra\/Debug')/d" settings.gradle || die
fi
if ! use eclipse; then
sed -i "/includeProjects('GhidraBuild\/EclipsePlugins/d" settings.gradle || die
fi
if ! use ida; then
sed -i "/includeProject('IDAPro'/d" settings.gradle || die
fi
if ! use jython; then
rm -rf Ghidra/Extensions/Jython || die
fi
if ! use lisa; then
rm -rf Ghidra/Extensions/Lisa || die
fi
if ! use machine-learning; then
rm -rf Ghidra/Extensions/MachineLearning || die
fi
if ! use sarif; then
rm -rf Ghidra/Features/Sarif || die
fi
if ! use server; then
rm -rf Ghidra/Features/GhidraServer || die
fi
if ! use z3; then
rm -rf Ghidra/Extensions/SymbolicSummaryZ3 || die
fi
}
src_compile() {
# the offline repository replaces every flatDir the build declares
local GRADLE_FLATDIRS="
${S}/dependencies/flatRepo
${S}/GPL/DMG/data/lib
"
local gradle_args=( -x test -x check -x ip )
use doc || gradle_args+=( -x createJavadocs -x createJsondocs )
use python || gradle_args+=( -x createGhidraStubsWheel -x createPythonTypeStubs )
egradle "${gradle_args[@]}" prepDev
egradle "${gradle_args[@]}" assembleAll
# assembleAll leaves Ghidra/Extensions empty
local ext
for ext in $(ghidra_extensions); do
egradle "${gradle_args[@]}" ":${ext}:zipExtensions"
done
}
src_install() {
local dist_dirs=( "${S}"/build/dist/ghidra_* )
local dist_dir="${dist_dirs[0]}"
[[ -d "${dist_dir}" ]] || die "Build distribution directory not found: ${dist_dir}"
local ext
for ext in $(ghidra_extensions); do
# the archive name carries the build date
local zips=( "${S}"/build/dist/*_"${ext}".zip )
[[ -f ${zips[0]} ]] || die "no extension archive built for ${ext}"
unzip -q -o "${zips[0]}" -d "${dist_dir}/Ghidra/Extensions" || die
done
# Remove zip archives not needed for runtime
find "${dist_dir}" -type f -name '*.zip' -exec rm -f {} +
if ! use doc; then
rm -rf "${dist_dir}/docs" || die
fi
insinto /usr/share/ghidra
doins -r "${dist_dir}"/*
# Fix executable permissions on launchers and native binaries
fperms +x /usr/share/ghidra/ghidraRun
fperms +x /usr/share/ghidra/support/launch.sh
fperms +x /usr/share/ghidra/support/analyzeHeadless
if use python; then
[[ -f "${ED}/usr/share/ghidra/support/pyghidraRun" ]] && \
fperms +x /usr/share/ghidra/support/pyghidraRun
fi
# Native executables
local exe
while IFS= read -r -d '' exe; do
fperms +x "${exe#${ED}}"
done < <(find "${ED}/usr/share/ghidra" -type f \
\( -name "decompile" -o -name "sleigh" -o -name "demangler_gnu_*" \
-o -name "lzfse" \) -print0)
# Debugger scripts
if use debugger; then
local dbg_script
while IFS= read -r -d '' dbg_script; do
fperms +x "${dbg_script#${ED}}"
done < <(find "${ED}/usr/share/ghidra/Ghidra/Debug" -type f -name "*.sh" -print0 2>/dev/null)
fi
# Symlinks in /usr/bin
dosym -r /usr/share/ghidra/ghidraRun /usr/bin/ghidra
dosym -r /usr/share/ghidra/support/analyzeHeadless /usr/bin/ghidra-headless
# not /usr/bin/pyghidra: that is dev-python/pyghidra's
if use python && [[ -f "${ED}/usr/share/ghidra/support/pyghidraRun" ]]; then
dosym -r /usr/share/ghidra/support/pyghidraRun /usr/bin/ghidra-pyghidra
fi
if use server && [[ -f "${ED}/usr/share/ghidra/server/svrAdmin" ]]; then
fperms +x /usr/share/ghidra/server/svrAdmin
dosym -r /usr/share/ghidra/server/svrAdmin /usr/bin/ghidra-svrAdmin
fi
# Desktop integration
if use gui; then
local icon_path="${S}/GhidraDocs/GhidraClass/Beginner/Images/GhidraLogo64.png"
if [[ -f "${icon_path}" ]]; then
newicon -s 64 "${icon_path}" ghidra.png
fi
make_desktop_entry ghidra "Ghidra" ghidra "Development;Utility;"
fi
}
Manage flags for this package:
euse -i <flag> -p dev-util/ghidra |
euse -E <flag> -p dev-util/ghidra |
euse -D <flag> -p dev-util/ghidra
>=virtual/jre-21:* python? ( ${PYTHON_DEPS} $(python_gen_cond_dep ' dev-python/jpype[${PYTHON_USEDEP}] dev-python/protobuf[${PYTHON_USEDEP}] dev-python/psutil[${PYTHON_USEDEP}] ') ) z3? ( sci-mathematics/z3 ) >=virtual/jdk-21:*
>=virtual/jre-21:* python? ( ${PYTHON_DEPS} $(python_gen_cond_dep ' dev-python/jpype[${PYTHON_USEDEP}] dev-python/protobuf[${PYTHON_USEDEP}] dev-python/psutil[${PYTHON_USEDEP}] ') ) z3? ( sci-mathematics/z3 )
app-arch/unzip dev-java/gradle-bin:${GRADLE_SLOT} dev-java/jflex sys-devel/bison python? ( ${PYTHON_DEPS} $(python_gen_cond_dep ' dev-python/pip[${PYTHON_USEDEP}] dev-python/setuptools[${PYTHON_USEDEP}] dev-python/wheel[${PYTHON_USEDEP}] ') )