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}]" ++ } ++ } ++ } } + /*******************************************************************************************