On Wed, Aug 28, 2019 at 10:17:29PM -0400, Lawrence Teo wrote:
> On Tue, Aug 27, 2019 at 10:52:52AM -0000, Christian Weisgerber wrote:
> > On 2019-08-21, Stuart Henderson <[email protected]> wrote:
> >
> > >> > * If you build ghidra on a system where gcc/g++/libstdc++ are
> > >> > available, it does indeed link something against libstdc++ and
> > >> > port-lib-depends-check indicates WANTLIB+=stdc++.
> > >> >
> > >> > * If you build ghidra on a system where gcc/g++/libstdc++ are NOT
> > >> > available, it still builds fine, something is linked against
> > >> > libc++/libc++abi/pthread and port-lib-depends-check consequently
> > >> > indicates WANTLIB+=${COMPILER_LIBCXX}.
> > >
> > > Is this enough? Untested beyond "does it create the right symlink".
> > >
> > > --- Makefile 12 Jul 2019 20:49:02 -0000 1.4
> > > +++ Makefile 21 Aug 2019 08:21:22 -0000
> > > @@ -39,6 +39,7 @@ post-extract:
> > > ${WRKSRC}/ghidraRun
> > > @perl -pi -e 's,#!/bin/bash,#!${LOCALBASE}/bin/bash,' \
> > > ${WRKSRC}/support/launch.sh
> > > + ln -s c++ ${WRKDIR}/bin/g++
> >
> > This actually breaks the build:
> >
> > > Task :Decompiler:compileDecompileOpenbsd64ExecutableDecompileCpp FAILED
> >
> > FAILURE: Build failed with an exception.
> >
> > * What went wrong:
> > Execution failed for task
> > ':Decompiler:compileDecompileOpenbsd64ExecutableDecompileCpp'.
> > > java.lang.NullPointerException (no error message)
>
> I have been testing and tinkering as well but haven't gotten very far.
> Using sthen's diff and passing --stacktrace to gradle I got this output:
[snip]
>
> That looks like something related to Gradle, so I did some digging in
> the *.gradle files in the Ghidra source tree. I believe the file that
> needs to be fixed is
> ghidra-9.0.4/ghidra-Ghidra_9.0.4_build/GPL/nativeBuildProperties.gradle
> but I haven't figured out exactly how yet.
I think I got it. This new diff tells Gradle to build the demangler
with Clang, and I also made it print the compiler and linker
executables to confirm:
C++ compiler is [clang++]
Linker is [clang++]
The resulting demangler_gnu is linked with libc++:
nori$ ldd
/usr/local/share/java/ghidra/GPL/DemanglerGnu/os/openbsd64/demangler_gnu
/usr/local/share/java/ghidra/GPL/DemanglerGnu/os/openbsd64/demangler_gnu:
Start End Type Open Ref GrpRef Name
000005b4d7026000 000005b4d7056000 exe 2 0 0
/usr/local/share/java/ghidra/GPL/DemanglerGnu/os/openbsd64/demangler_gnu
000005b73bfaa000 000005b73c086000 rlib 0 1 0
/usr/lib/libc++.so.3.0
000005b7588a8000 000005b7588ea000 rlib 0 2 0
/usr/lib/libc++abi.so.1.0
000005b6e100b000 000005b6e1018000 rlib 0 1 0
/usr/lib/libpthread.so.26.1
000005b6d8f74000 000005b6d8fa3000 rlib 0 1 0
/usr/lib/libm.so.10.1
000005b75bb5c000 000005b75bc50000 rlib 0 1 0
/usr/lib/libc.so.95.1
000005b79c817000 000005b79c817000 ld.so 0 1 0
/usr/libexec/ld.so
I added --stacktrace to gradle's command line for easier future
debugging.
Tests/feedback welcome!
Index: Makefile
===================================================================
RCS file: /cvs/ports/security/ghidra/Makefile,v
retrieving revision 1.6
diff -u -p -r1.6 Makefile
--- Makefile 23 Jul 2019 02:52:58 -0000 1.6
+++ Makefile 30 Aug 2019 03:27:26 -0000
@@ -7,7 +7,7 @@ COMMENT = software reverse engineering (
VERSION = 9.0.4
GHIDRA_DATE = 20190516
-REVISION = 2
+REVISION = 3
GH_ACCOUNT = NationalSecurityAgency
GH_PROJECT = ghidra
@@ -23,7 +23,7 @@ MAINTAINER = Lawrence Teo <lteo@openbsd.
# Apache v2
PERMIT_PACKAGE = Yes
-WANTLIB += c m stdc++
+WANTLIB += c m ${COMPILER_LIBCXX}
MASTER_SITES0 = ${HOMEPAGE}
MASTER_SITES1 =
https://sourceforge.net/projects/yajsw/files/yajsw/yajsw-stable-${YAJSW_VER}/
@@ -113,11 +113,13 @@ pre-build:
cp ${DISTDIR}/yajsw-stable-${YAJSW_VER}.zip \
${WRKDIR}/ghidra.bin/Ghidra/Features/GhidraServer
cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} gradle -g ${WRKDIR}/gradle \
- --no-daemon --offline -I ${WRKDIR}/repos.gradle yajswDevUnpack
+ --no-daemon --offline --stacktrace -I ${WRKDIR}/repos.gradle \
+ yajswDevUnpack
do-build:
cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} gradle -g ${WRKDIR}/gradle \
- --no-daemon --offline -I ${WRKDIR}/repos.gradle buildGhidra
+ --no-daemon --offline --stacktrace -I ${WRKDIR}/repos.gradle \
+ buildGhidra
do-install:
${INSTALL_DATA_DIR} ${PREFIX}/share/java
Index: patches/patch-GPL_nativeBuildProperties_gradle
===================================================================
RCS file:
/cvs/ports/security/ghidra/patches/patch-GPL_nativeBuildProperties_gradle,v
retrieving revision 1.1
diff -u -p -r1.1 patch-GPL_nativeBuildProperties_gradle
--- patches/patch-GPL_nativeBuildProperties_gradle 23 Jul 2019 02:09:20
-0000 1.1
+++ patches/patch-GPL_nativeBuildProperties_gradle 30 Aug 2019 03:52:01
-0000
@@ -2,10 +2,12 @@ $OpenBSD: patch-GPL_nativeBuildPropertie
Adapted from https://github.com/NationalSecurityAgency/ghidra/pull/490
+Force use of Clang.
+
Index: GPL/nativeBuildProperties.gradle
--- GPL/nativeBuildProperties.gradle.orig
+++ GPL/nativeBuildProperties.gradle
-@@ -75,6 +75,10 @@ model {
+@@ -75,7 +75,21 @@ model {
architecture 'x86_64'
operatingSystem 'osx'
}
@@ -14,5 +16,16 @@ Index: GPL/nativeBuildProperties.gradle
+ operatingSystem 'openbsd'
+ }
}
++
++ toolChains {
++ // Force use of Clang
++ clang(Clang) {
++ eachPlatform { tools ->
++ println "C++ compiler is
[${tools.cppCompiler.executable}]"
++ println "Linker is [${tools.linker.executable}]"
++ }
++ }
++ }
}
+
/*******************************************************************************************