mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-01-09 14:08:03 -05:00
changed build system to generate all external jar files used file.
This commit is contained in:
@@ -30,6 +30,9 @@ dependencies {
|
|||||||
// Must specify the specific antlr implementation to use or it will default to trying to find
|
// Must specify the specific antlr implementation to use or it will default to trying to find
|
||||||
// version 2.7.7 (which we don't have)
|
// version 2.7.7 (which we don't have)
|
||||||
antlr "org.antlr:antlr:3.5.2"
|
antlr "org.antlr:antlr:3.5.2"
|
||||||
|
// need to add in the antlr dependencies for when we build from flat jar dirs
|
||||||
|
antlr "org.antlr:antlr-runtime:3.5.2"
|
||||||
|
antlr "org.antlr:ST4:4.0.8"
|
||||||
}
|
}
|
||||||
|
|
||||||
def genSrcDir = 'generated-src/antlr/main'
|
def genSrcDir = 'generated-src/antlr/main'
|
||||||
|
|||||||
72
build.gradle
72
build.gradle
@@ -292,28 +292,49 @@ String getCurrentPlatformName() {
|
|||||||
* given project
|
* given project
|
||||||
*
|
*
|
||||||
*********************************************************************************/
|
*********************************************************************************/
|
||||||
List<String> getExternalDependencies(Project project) {
|
List<String> getExternalRuntimeDependencies(Project project) {
|
||||||
List<String> list = new ArrayList<String>()
|
List<String> list = new ArrayList<String>()
|
||||||
|
|
||||||
// for each dependency in the compile configuration
|
list.addAll(getExternalDependencies(project.configurations.compile));
|
||||||
Configuration runtimeConfig = project.configurations.runtime
|
list.addAll(getExternalDependencies(project.configurations.runtime));
|
||||||
runtimeConfig.allDependencies.each { dep ->
|
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> getExternalDependencies(Configuration configuration) {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
configuration.dependencies.each { dep ->
|
||||||
|
|
||||||
// if the dependency is an external jar
|
// if the dependency is an external jar
|
||||||
if (dep.class.toString().contains("DefaultExternalModuleDependency")) {
|
if (dep instanceof ExternalDependency) {
|
||||||
|
|
||||||
// loop back through all the dependency files, looking for one that contains the dependency name.
|
// loop back through all the dependency files, looking for one that contains the dependency name.
|
||||||
String depPath = runtimeConfig.find {
|
String depPath = configuration.find {
|
||||||
it.name.contains(dep.name)
|
it.name.contains(dep.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we found the path, then add it to the list
|
// if we found the path, then add it to the list
|
||||||
if (depPath && !depPath.contains("libsForBuild")) {
|
if (depPath) {
|
||||||
list.add(depPath)
|
list.add(depPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return list
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* Returns a list of all the external library paths declared as dependencies for the
|
||||||
|
* given project
|
||||||
|
*
|
||||||
|
*********************************************************************************/
|
||||||
|
Set<String> getAllExternalDependencies(Project project) {
|
||||||
|
Set<String> set = new HashSet<String>()
|
||||||
|
|
||||||
|
project.getConfigurations().each { config ->
|
||||||
|
set.addAll(getExternalDependencies(config))
|
||||||
|
}
|
||||||
|
|
||||||
|
return set
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************************
|
/******************************************************************************************
|
||||||
@@ -334,7 +355,7 @@ String generateLibraryDependencyMapping() {
|
|||||||
libsFile.withWriter { out ->
|
libsFile.withWriter { out ->
|
||||||
subprojects { p ->
|
subprojects { p ->
|
||||||
p.plugins.withType(JavaPlugin) {
|
p.plugins.withType(JavaPlugin) {
|
||||||
List<String> libs = getExternalDependencies(p);
|
List<String> libs = getExternalRuntimeDependencies(p);
|
||||||
if (libs != null) {
|
if (libs != null) {
|
||||||
out.println "Module: $p.name"
|
out.println "Module: $p.name"
|
||||||
libs.each { path ->
|
libs.each { path ->
|
||||||
@@ -346,6 +367,37 @@ String generateLibraryDependencyMapping() {
|
|||||||
}
|
}
|
||||||
return libsFile.absolutePath
|
return libsFile.absolutePath
|
||||||
}
|
}
|
||||||
|
/******************************************************************************************
|
||||||
|
*
|
||||||
|
* Creates a file that lists all external jars used to build and run Ghidra
|
||||||
|
*
|
||||||
|
******************************************************************************************/
|
||||||
|
String generateAllExternalLibsFile() {
|
||||||
|
File libsFile = file("$buildDir/AllExternalLibs.txt")
|
||||||
|
|
||||||
|
// Check to make sure the build folder exists - if it doesn't, the 'libsFile.withWriter'
|
||||||
|
// call (below) will fail miserably.
|
||||||
|
def buildFolder = file ("$buildDir")
|
||||||
|
if (!buildFolder.exists()) {
|
||||||
|
buildFolder.mkdirs()
|
||||||
|
}
|
||||||
|
Set<String> allLibs = new HashSet<>();
|
||||||
|
subprojects { p ->
|
||||||
|
p.plugins.withType(JavaPlugin) {
|
||||||
|
Set<String> libs = getAllExternalDependencies(p);
|
||||||
|
if (libs != null) {
|
||||||
|
allLibs.addAll(libs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
libsFile.withWriter { out ->
|
||||||
|
allLibs.each { path ->
|
||||||
|
out.println "$path"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return libsFile.absolutePath
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
task allSleighCompile {
|
task allSleighCompile {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ plugins.withType(JavaPlugin) {
|
|||||||
|
|
||||||
// External Libraries
|
// External Libraries
|
||||||
gradle.taskGraph.whenReady { taskGraph ->
|
gradle.taskGraph.whenReady { taskGraph ->
|
||||||
List<String> externalPaths = getExternalDependencies(p)
|
List<String> externalPaths = getExternalRuntimeDependencies(p)
|
||||||
externalPaths.each { path ->
|
externalPaths.each { path ->
|
||||||
from (path) {
|
from (path) {
|
||||||
into {zipPath + "/lib" }
|
into {zipPath + "/lib" }
|
||||||
|
|||||||
@@ -12,8 +12,22 @@ task prepDev {
|
|||||||
|
|
||||||
// the GhidraLauncher depends on this file to build the classpath in dev mode
|
// the GhidraLauncher depends on this file to build the classpath in dev mode
|
||||||
dependsOn { generateLibraryDependencyMapping }
|
dependsOn { generateLibraryDependencyMapping }
|
||||||
|
|
||||||
|
// generate list of all library files used to build and run ghidra. (not strictly necessary here, but nice to have)
|
||||||
|
dependsOn { generateAllExternalLibsFile }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************************
|
||||||
|
* TASK generateAllExternalLibsFile
|
||||||
|
*
|
||||||
|
* Summary: Creates a file that lists all libraries used to build and run Ghidra
|
||||||
|
******************************************************************************************/
|
||||||
|
task generateAllExternalLibsFile {
|
||||||
|
doFirst{
|
||||||
|
generateAllExternalLibsFile()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************************
|
/******************************************************************************************
|
||||||
* TASK generateLibraryDependencyMapping
|
* TASK generateLibraryDependencyMapping
|
||||||
@@ -24,4 +38,5 @@ task generateLibraryDependencyMapping {
|
|||||||
doFirst{
|
doFirst{
|
||||||
generateLibraryDependencyMapping()
|
generateLibraryDependencyMapping()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ task zipExtensions (type: Zip) {
|
|||||||
/////////////////
|
/////////////////
|
||||||
gradle.taskGraph.whenReady { taskGraph ->
|
gradle.taskGraph.whenReady { taskGraph ->
|
||||||
if (project.plugins.withType(JavaPlugin)) {
|
if (project.plugins.withType(JavaPlugin)) {
|
||||||
List<String> externalPaths = getExternalDependencies(p)
|
List<String> externalPaths = getExternalRuntimeDependencies(p)
|
||||||
externalPaths.each { path ->
|
externalPaths.each { path ->
|
||||||
from (path) {
|
from (path) {
|
||||||
into { getBaseProjectName(p) + "/lib" }
|
into { getBaseProjectName(p) + "/lib" }
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ def Map<String, String> getModuleManifestIp(Project project) {
|
|||||||
*********************************************************************************/
|
*********************************************************************************/
|
||||||
def checkExternalLibsInMap(Map<String, String> map, Project project) {
|
def checkExternalLibsInMap(Map<String, String> map, Project project) {
|
||||||
if (project.plugins.withType(JavaPlugin)) {
|
if (project.plugins.withType(JavaPlugin)) {
|
||||||
List<String> libs = getExternalDependencies(project)
|
List<String> libs = getExternalRuntimeDependencies(project)
|
||||||
libs.each { lib ->
|
libs.each { lib ->
|
||||||
String libName = new File(lib).getName() // get just the filename without the path
|
String libName = new File(lib).getName() // get just the filename without the path
|
||||||
String relativePath = "lib/"+libName;
|
String relativePath = "lib/"+libName;
|
||||||
|
|||||||
Reference in New Issue
Block a user