blob: 99b52bd9ee9ba94b21187495b32197e1540bc8c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit gradle java-pkg-2 desktop
EGRADLE_BUNDLED_VER="7.3"
GRADLE_DEP_VER="20221104"
DESCRIPTION="A software reverse engineering framework"
HOMEPAGE="https://ghidra-sre.org/"
SRC_URI="
https://github.com/NationalSecurityAgency/${PN}/archive/Ghidra_${PV}_build.tar.gz
https://dev.pentoo.ch/~blshkv/distfiles/${PN}-dependencies-${GRADLE_DEP_VER}.tar.gz
https://github.com/pxb1988/dex2jar/releases/download/2.0/dex-tools-2.0.zip
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android4me/AXMLPrinter2.jar
https://sourceforge.net/projects/catacombae/files/HFSExplorer/0.21/hfsexplorer-0_21-bin.zip
mirror://sourceforge/yajsw/yajsw/yajsw-stable-13.05.zip
https://dev.pentoo.ch/~blshkv/distfiles/cdt-8.6.0.zip
mirror://sourceforge/project/pydev/pydev/PyDev%206.3.1/PyDev%206.3.1.zip -> PyDev-6.3.1.zip
$(gradle-src_uri)
"
# run: "pentoo/scripts/gradle_dependencies.py buildGhidra" from "${S}" directory to generate dependencies
# https://www.eclipse.org/downloads/download.php?r=1&protocol=https&file=/tools/cdt/releases/8.6/cdt-8.6.0.zip
# https://sourceforge.net/projects/yajsw/files/yajsw/yajsw-stable-13.05/yajsw-stable-13.05.zip/download
LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="amd64"
#FIXME:
# * QA Notice: Files built without respecting LDFLAGS have been detected
# * Please include the following list of files in your report:
# * /usr/share/ghidra/GPL/DemanglerGnu/os/linux_x86_64/demangler_gnu_v2_24
# * /usr/share/ghidra/GPL/DemanglerGnu/os/linux_x86_64/demangler_gnu_v2_33_1
# * /usr/share/ghidra/Ghidra/Features/Decompiler/os/linux_x86_64/decompile
# * /usr/share/ghidra/Ghidra/Features/Decompiler/os/linux_x86_64/sleigh
#java-pkg-2 sets java based on RDEPEND so the java slot in rdepend is used to build
RDEPEND="virtual/jre:17"
DEPEND="
virtual/jdk:17
sys-devel/bison
dev-java/jflex
app-arch/unzip
"
S="${WORKDIR}/ghidra-Ghidra_${PV}_build"
src_unpack() {
# https://github.com/NationalSecurityAgency/ghidra/blob/master/DevGuide.md
unpack ${A}
mkdir -p "${S}/.gradle/flatRepo" || die "(1) mkdir failed"
cd "${S}/.gradle"
unpack dex-tools-2.0.zip
cp dex2jar-2.0/lib/dex-*.jar ./flatRepo || die "(3) cp failed"
cp "${DISTDIR}/AXMLPrinter2.jar" ./flatRepo || die "(4) cp failed"
unpack hfsexplorer-0_21-bin.zip
cp lib/*.jar ./flatRepo || die "(5) cp failed"
mkdir -p "${WORKDIR}"/ghidra.bin/Ghidra/Features/GhidraServer/ || die "(6) mkdir failed"
# cp "${DISTDIR}"/yajsw-stable-12.12.zip "${WORKDIR}"/ghidra.bin/Ghidra/Features/GhidraServer/ || die "(7) cp failed"
cp "${DISTDIR}"/yajsw-stable-13.05.zip "${WORKDIR}"/ghidra.bin/Ghidra/Features/GhidraServer/ || die "(7) cp failed"
mkdir -p "${WORKDIR}"/ghidra.bin/GhidraBuild/EclipsePlugins/GhidraDev/buildDependencies/ || die "(8) mkdir failed"
cp "${DISTDIR}"/PyDev-6.3.1.zip "${WORKDIR}/ghidra.bin/GhidraBuild/EclipsePlugins/GhidraDev/buildDependencies/PyDev 6.3.1.zip" || die "(9) cp failed"
cp "${DISTDIR}"/cdt-8.6.0.zip "${WORKDIR}"/ghidra.bin/GhidraBuild/EclipsePlugins/GhidraDev/buildDependencies/ || die "(10) cp failed"
cd "${S}"
mv ../dependencies .
}
src_prepare() {
default
local repos_gradle="${EGRADLE_USER_HOME}/init.d/repos.gradle"
install -D "${FILESDIR}"/repos.gradle "${repos_gradle}" || die
sed -i "s|S_DIR|${S}|g" "${repos_gradle}" || die
#remove build date so we can unpack dist.zip later
sed -i "s|_\${rootProject.BUILD_DATE_SHORT}||g" gradle/root/distribution.gradle || die "(13) sed failed"
#10.0 workaround
ln -s ../.gradle/flatRepo ./dependencies/flatRepo
}
src_compile() {
egradle prepDev -x check -x test
egradle buildGhidra -x check -x test --parallel
#build without eclipse plugin
# ${GRADLE} yajswDevUnpack -x check -x test || die
# ${GRADLE} buildNatives_linux64 -x check -x test || die
# ${GRADLE} sleighCompile -x check -x test || die
}
src_install() {
#FIXME: it is easier to unpack existing archive for now
dodir /usr/share
unzip build/dist/ghidra_"${PV}"_DEV_linux_x86_64.zip -d "${ED}"/usr/share/ || die "unable to unpack dist zip"
mv "${ED}"/usr/share/ghidra_"${PV}"_DEV "${ED}"/usr/share/ghidra || die "mv failed"
# remove zip files which aren't needed at runtime
find "${ED}"/usr/share/ghidra -type f -name '*.zip' -exec rm -f {} +
#fixme: add doc flag
rm -r "${ED}"/usr/share/ghidra/docs/ || die "rm failed"
dosym "${EPREFIX}"/usr/share/ghidra/ghidraRun usr/bin/ghidra
# icon
doicon GhidraDocs/GhidraClass/Beginner/Images/GhidraLogo64.png
# desktop entry
make_desktop_entry ${PN} "Ghidra" /usr/share/pixmaps/GhidraLogo64.png "Utility"
}
|