-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathbuild.gradle
More file actions
137 lines (118 loc) · 4.2 KB
/
Copy pathbuild.gradle
File metadata and controls
137 lines (118 loc) · 4.2 KB
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright (C) 2025 The MITRE Corporation All Rights Reserved
// Builds a Ghidra Extension for a given Ghidra installation.
//
// An absolute path to the Ghidra installation directory must be supplied either by setting the
// GHIDRA_INSTALL_DIR environment variable or Gradle project property:
//
// > export GHIDRA_INSTALL_DIR=<Absolute path to Ghidra>
// > gradle
//
// or
//
// > gradle -PGHIDRA_INSTALL_DIR=<Absolute path to Ghidra>
//
// Gradle should be invoked from the directory of the project to build. Please see the
// application.gradle.version property in <GHIDRA_INSTALL_DIR>/Ghidra/application.properties
// for the correction version of Gradle to use for the Ghidra installation you specify.
plugins {
id("java")
id("jacoco")
id("antlr")
}
//----------------------START "DO NOT MODIFY" SECTION------------------------------
def ghidraInstallDir
if (System.env.GHIDRA_INSTALL_DIR) {
ghidraInstallDir = System.env.GHIDRA_INSTALL_DIR
}
else if (project.hasProperty("GHIDRA_INSTALL_DIR")) {
ghidraInstallDir = project.getProperty("GHIDRA_INSTALL_DIR")
}
else {
throw new FileNotFoundException("GHIDRA_INSTALL_DIR is not defined!")
}
task distributeExtension {
group "Ghidra"
apply from: new File(ghidraInstallDir).getCanonicalPath() + "/support/buildExtension.gradle"
dependsOn ':buildExtension'
}
//----------------------END "DO NOT MODIFY" SECTION-------------------------------
repositories {
// Declare dependency repositories here. This is not needed if dependencies are manually
// dropped into the lib/ directory.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html for more info.
// Ex: mavenCentral()
mavenCentral()
// Also reference our local lib directory so builds work offline
flatDir {
dirs 'lib'
}
}
test {
jvmArgs '--add-exports', 'java.desktop/sun.awt=ALL-UNNAMED', '--add-exports', 'java.desktop/sun.swing=ALL-UNNAMED'
useJUnitPlatform()
maxHeapSize='1G'
}
dependencies {
// Any external dependencies added here will automatically be copied to the lib/ directory when
// this extension is built.
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.3'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.0.3'
testCompileOnly 'junit:junit:4.13.1'
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.8.1'
testImplementation 'org.jacoco:org.jacoco.agent:0.8.9'
testImplementation 'org.jacoco:org.jacoco.ant:0.8.9'
// antlr dependencies. We have to specify them all here manually so things
// work offline. Otherwise the antlr gradle plugin tries to download them
// (even when offline)
antlr "org.antlr:antlr4:4.13.1"
antlr "org.antlr:antlr4-runtime:4.13.1"
antlr "org.antlr:ST4:4.3.4"
antlr "org.antlr:antlr-runtime:3.5.3"
}
jacoco {
toolVersion = "0.8.9"
}
jacocoTestReport {
reports {
html.required = true
xml.required = true
csv.required = true
}
dependsOn test // tests are required to run before generating the report
}
// Configure ANTLR source code generator plugin
def antlrOut = "${project.layout.projectDirectory}/generated-src/antlr/main/java"
def antlrPackage = "org.mitre.pickledcanary.patterngenerator.generated"
generateGrammarSource {
arguments += ["-visitor", "-package", antlrPackage]
outputDirectory = new File("${antlrOut}/${antlrPackage.replace(".", File.separator)}".toString())
// Make sure we have our offline specified dependencies available before
// running this task
dependsOn copyDependencies
}
sourceSets {
main {
java {
srcDirs += antlrOut
}
}
}
// Exclude additional files from the built extension
// Ex: buildExtension.exclude '.idea/**'
buildExtension.exclude 'search/**'
buildExtension.exclude 'example_patterns/**'