On Fri, Aug 30, 2019 at 12:33:37AM -0400, Lawrence Teo wrote:
> 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 <s...@spacehopper.org> 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!

Here's a new diff that makes the port honor CXX.  I also added
COMPILER="base-clang ports-clang" and confirmed that it builds with both
clangs.

ok?


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    7 Sep 2019 02:18:06 -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}/
@@ -55,6 +55,8 @@ DISTFILES +=          ${JAR_DISTFILES:C/$/:2/}
 
 EXTRACT_ONLY =         ${DISTNAME}.tar.gz
 
+COMPILER =             base-clang ports-clang
+
 MODULES =              java
 MODJAVA_VER =          11+
 
@@ -68,7 +70,7 @@ RUN_DEPENDS =         shells/bash \
 
 NO_TEST =              Yes
 
-SUBST_VARS +=          GHIDRA_DATE VERSION WRKDIR
+SUBST_VARS +=          CXX GHIDRA_DATE VERSION WRKDIR
 
 JAR_DIRS +=            Features-FileFormats
 JAR_DIRS +=            Features-Python
@@ -94,6 +96,7 @@ post-extract:
 pre-build:
        cp ${FILESDIR}/repos.gradle ${WRKDIR}
        ${SUBST_CMD} ${WRKDIR}/repos.gradle \
+               ${WRKSRC}/GPL/nativeBuildProperties.gradle \
                
${WRKSRC}/Ghidra/Framework/Help/src/main/java/help/GHelpBuilder.java
        mkdir ${WRKDIR}/{flatRepo,gradle,home}
 .for dir in ${JAR_DIRS}
@@ -113,11 +116,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      7 Sep 2019 01:40:36 
-0000
@@ -2,10 +2,12 @@ $OpenBSD: patch-GPL_nativeBuildPropertie
 
 Adapted from https://github.com/NationalSecurityAgency/ghidra/pull/490
 
+Force use of Clang and honor CXX.
+
 Index: GPL/nativeBuildProperties.gradle
 --- GPL/nativeBuildProperties.gradle.orig
 +++ GPL/nativeBuildProperties.gradle
-@@ -75,6 +75,10 @@ model {
+@@ -75,7 +75,23 @@ model {
                        architecture 'x86_64'
                        operatingSystem 'osx'
                }
@@ -14,5 +16,18 @@ Index: GPL/nativeBuildProperties.gradle
 +                      operatingSystem 'openbsd'
 +              }
        }       
++
++      toolChains {
++              // Force use of Clang
++              clang(Clang) {
++                      eachPlatform { tools ->
++                              tools.cppCompiler.executable = "${CXX}"
++                              tools.linker.executable = "${CXX}"
++                              println "C++ compiler is 
[${tools.cppCompiler.executable}]"
++                              println "Linker is [${tools.linker.executable}]"
++                      }
++              }
++      }
  }
  
+ 
/*******************************************************************************************

Reply via email to