ghidra: Avoid using prebuilt protoc binary

This commit is contained in:
roblabla 2021-12-29 15:58:57 +01:00
parent cc4ee8d27d
commit d5980565d1
2 changed files with 164 additions and 24 deletions

View file

@ -0,0 +1,130 @@
From 913e74b8682f77da94ed7b7d459482b9b23a5d88 Mon Sep 17 00:00:00 2001
From: roblabla <unfiltered@roblab.la>
Date: Tue, 28 Dec 2021 14:20:30 +0100
Subject: [PATCH] Use protobuf gradle plugin
---
Ghidra/Debug/Debugger-gadp/build.gradle | 76 +++----------------------
build.gradle | 6 ++
2 files changed, 15 insertions(+), 67 deletions(-)
diff --git a/Ghidra/Debug/Debugger-gadp/build.gradle b/Ghidra/Debug/Debugger-gadp/build.gradle
index 1b4922f66..3d2ef8856 100644
--- a/Ghidra/Debug/Debugger-gadp/build.gradle
+++ b/Ghidra/Debug/Debugger-gadp/build.gradle
@@ -23,42 +23,19 @@ apply from: "${rootProject.projectDir}/gradle/javaTestProject.gradle"
apply from: "${rootProject.projectDir}/gradle/distributableGhidraModule.gradle"
apply plugin: 'eclipse'
-eclipse.project.name = 'Debug Debugger-gadp'
+apply plugin: 'com.google.protobuf'
-configurations {
- allProtocArtifacts
- protocArtifact
-}
+eclipse.project.name = 'Debug Debugger-gadp'
def platform = getCurrentPlatformName()
-dependencies {
- allProtocArtifacts 'com.google.protobuf:protoc:3.17.3:windows-x86_64@exe'
- allProtocArtifacts 'com.google.protobuf:protoc:3.17.3:linux-x86_64@exe'
- allProtocArtifacts 'com.google.protobuf:protoc:3.17.3:linux-aarch_64@exe'
- allProtocArtifacts 'com.google.protobuf:protoc:3.17.3:osx-x86_64@exe'
- allProtocArtifacts 'com.google.protobuf:protoc:3.17.3:osx-aarch_64@exe'
-
- if (isCurrentWindows()) {
- protocArtifact 'com.google.protobuf:protoc:3.17.3:windows-x86_64@exe'
- }
- if (isCurrentLinux()) {
- if (platform.endsWith("x86_64")) {
- protocArtifact 'com.google.protobuf:protoc:3.17.3:linux-x86_64@exe'
- }
- else {
- protocArtifact 'com.google.protobuf:protoc:3.17.3:linux-aarch_64@exe'
- }
- }
- if (isCurrentMac()) {
- if (platform.endsWith("x86_64")) {
- protocArtifact 'com.google.protobuf:protoc:3.17.3:osx-x86_64@exe'
- }
- else {
- protocArtifact 'com.google.protobuf:protoc:3.17.3:osx-aarch_64@exe'
- }
- }
+buildscript {
+ dependencies {
+ classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
+ }
+}
+dependencies {
api 'com.google.protobuf:protobuf-java:3.17.3'
api project(':Framework-AsyncComm')
api project(':Framework-Debugging')
@@ -68,43 +45,8 @@ dependencies {
testImplementation project(path: ':Framework-Debugging', configuration: 'testArtifacts')
}
-/*protobuf {
+protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.17.3'
}
-}*/
-
-task generateProto {
- ext.srcdir = file("src/main/proto")
- ext.src = fileTree(srcdir) {
- include "**/*.proto"
- }
- ext.outdir = file("build/generated/source/proto/main/java")
- outputs.dir(outdir)
- inputs.files(src)
- dependsOn(configurations.protocArtifact)
- doLast {
- def exe = configurations.protocArtifact.first()
- if (!isCurrentWindows()) {
- exe.setExecutable(true)
- }
- exec {
- commandLine exe, "--java_out=$outdir", "-I$srcdir"
- args src
- }
- }
}
-
-tasks.compileJava.dependsOn(tasks.generateProto)
-tasks.eclipse.dependsOn(tasks.generateProto)
-rootProject.tasks.prepDev.dependsOn(tasks.generateProto)
-
-sourceSets {
- main {
- java {
- srcDir tasks.generateProto.outdir
- }
- }
-}
-zipSourceSubproject.dependsOn generateProto
-
diff --git a/build.gradle b/build.gradle
index dce3a5149..7a2e637ce 100644
--- a/build.gradle
+++ b/build.gradle
@@ -76,6 +76,12 @@ if (flatRepo.isDirectory()) {
jcenter()
flatDir name: "flat", dirs:["$flatRepo"]
}
+ buildscript {
+ repositories {
+ mavenLocal()
+ mavenCentral()
+ }
+ }
}
}
else {
--
2.33.1

View file

@ -12,6 +12,7 @@
, autoPatchelfHook
, icoutils
, xcbuild
, protobuf3_17
, libredirect
}:
@ -36,14 +37,20 @@ let
categories = "Development;";
};
# fake build to pre-download deps into fixed-output derivation
# Taken from mindustry derivation.
deps = stdenv.mkDerivation {
pname = "${pname}-deps";
inherit version src;
# postPatch scripts.
# Tells ghidra to use our own protoc binary instead of the prebuilt one.
fixProtoc = ''
cat >>Ghidra/Debug/Debugger-gadp/build.gradle <<HERE
protobuf {
protoc {
path = '${protobuf3_17}/bin/protoc'
}
}
HERE
'';
nativeBuildInputs = [ gradle perl ] ++ lib.optional stdenv.isDarwin xcbuild;
buildPhase = ''
# Adds a gradle step that downloads all the dependencies to the gradle cache.
addResolveStep = ''
cat >>build.gradle <<HERE
task resolveDependencies {
doLast {
@ -64,6 +71,19 @@ void resolveConfiguration(subProject, configuration, name) {
}
}
HERE
'';
# fake build to pre-download deps into fixed-output derivation
# Taken from mindustry derivation.
deps = stdenv.mkDerivation {
pname = "${pname}-deps";
inherit version src;
patches = [ ./0001-Use-protobuf-gradle-plugin.patch ];
postPatch = fixProtoc + addResolveStep;
nativeBuildInputs = [ gradle perl ] ++ lib.optional stdenv.isDarwin xcbuild;
buildPhase = ''
export GRADLE_USER_HOME=$(mktemp -d)
# First, fetch the static dependencies.
@ -77,25 +97,11 @@ HERE
find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
| perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \
| sh
find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.exe' \
| perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm555 $1 \$out/maven/$x/$3/$4/$5" #e' \
| sh
cp -r dependencies $out/dependencies
'';
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "sha256-tiJpctga2ddPJbO9qvYQBpDmpEn6ncCjfDIxg8YWs5U=";
};
fixedDeps = stdenv.mkDerivation {
pname = "${pname}-fixeddeps";
inherit version;
nativeBuildInputs = [ autoPatchelfHook ];
src = deps;
installPhase = ''
cp -r . $out
'';
outputHash = "sha256-Yxf6g908+fRRUh40PrwNUCTvxzlvSmwzE8R+3ZkRIvs=";
};
in stdenv.mkDerivation rec {
@ -107,6 +113,9 @@ in stdenv.mkDerivation rec {
dontStrip = true;
patches = [ ./0001-Use-protobuf-gradle-plugin.patch ];
postPatch = fixProtoc;
buildPhase = (lib.optionalString stdenv.isDarwin ''
export HOME=$(mktemp -d)
@ -123,9 +132,10 @@ in stdenv.mkDerivation rec {
export GRADLE_USER_HOME=$(mktemp -d)
ln -s ${fixedDeps}/dependencies dependencies
ln -s ${deps}/dependencies dependencies
sed -i "s#mavenLocal()#mavenLocal(); maven { url '${deps}/maven' }#g" build.gradle
sed -ie "s#mavenLocal()#mavenLocal(); maven { url '${fixedDeps}/maven' }#g" build.gradle
gradle --offline --no-daemon --info -Dorg.gradle.java.home=${openjdk11} buildGhidra
'';