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:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task
':Decompiler:compileDecompileOpenbsd64ExecutableDecompileCpp'.
> java.lang.NullPointerException (no error message)
* Try:
Run with --info or --debug option to get more log output. Run with --scan to
get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task
':Decompiler:compileDecompileOpenbsd64ExecutableDecompileCpp'.
at
org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)
at
org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at
org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at
org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at
org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at
org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at
org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at
org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at
org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at
org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at
org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at
org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at
org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at
org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at
org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at
org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at
org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at
org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at
org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at
org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at
org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at
org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at
org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at
org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at
org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.NullPointerException
at
org.gradle.nativeplatform.toolchain.internal.gcc.GccPlatformToolProvider.versionAwareCompiler(GccPlatformToolProvider.java:119)
at
org.gradle.nativeplatform.toolchain.internal.gcc.GccPlatformToolProvider.createCppCompiler(GccPlatformToolProvider.java:104)
at
org.gradle.nativeplatform.toolchain.internal.AbstractPlatformToolProvider.newCompiler(AbstractPlatformToolProvider.java:119)
at
org.gradle.language.nativeplatform.tasks.AbstractNativeSourceCompileTask.getCompilerVersion(AbstractNativeSourceCompileTask.java:98)
at
org.gradle.language.cpp.tasks.CppCompile_Decorated.getCompilerVersion(Unknown
Source)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at
org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue$1$1.create(AbstractNestedRuntimeBeanNode.java:80)
at
org.gradle.util.SingleMessageLogger.whileDisabled(SingleMessageLogger.java:467)
at
org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue$1.get(AbstractNestedRuntimeBeanNode.java:76)
at
com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:167)
at
org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue.call(AbstractNestedRuntimeBeanNode.java:148)
at
org.gradle.api.internal.tasks.properties.annotations.NestedBeanAnnotationHandler.visitPropertyValue(NestedBeanAnnotationHandler.java:64)
at
org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode.visitProperties(AbstractNestedRuntimeBeanNode.java:59)
at
org.gradle.api.internal.tasks.properties.bean.RootRuntimeBeanNode.visitNode(RootRuntimeBeanNode.java:32)
at
org.gradle.api.internal.tasks.properties.DefaultPropertyWalker.visitProperties(DefaultPropertyWalker.java:41)
at
org.gradle.api.internal.tasks.TaskPropertyUtils.visitProperties(TaskPropertyUtils.java:42)
at
org.gradle.api.internal.tasks.properties.DefaultTaskProperties.resolve(DefaultTaskProperties.java:63)
at
org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:65)
at
org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at
org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at
org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
... 24 more
* Get more help at https://help.gradle.org
BUILD FAILED in 15m 51s
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.
Some seemingly-related resources I've been looking at are:
https://discuss.gradle.org/t/having-gradle-compile-with-g-and-not-gcc/8625
https://docs.gradle.org/current/dsl/org.gradle.nativeplatform.NativeExecutableBinarySpec.html
I tried the attached diff but it failed with a
java.lang.NullPointerException as well where the stack trace looks
similar to the one above. I'll keep trying.
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 29 Aug 2019 01:32:19 -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
@@ -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 29 Aug 2019 01:05:06
-0000
@@ -5,7 +5,7 @@ Adapted from https://github.com/National
Index: GPL/nativeBuildProperties.gradle
--- GPL/nativeBuildProperties.gradle.orig
+++ GPL/nativeBuildProperties.gradle
-@@ -75,6 +75,10 @@ model {
+@@ -75,7 +75,19 @@ model {
architecture 'x86_64'
operatingSystem 'osx'
}
@@ -14,5 +14,14 @@ Index: GPL/nativeBuildProperties.gradle
+ operatingSystem 'openbsd'
+ }
}
++
++ toolChains {
++ gcc(Gcc) {
++ eachPlatform { tools ->
++ tools.cppCompiler.executable = "c++"
++ }
++ }
++ }
}
+
/*******************************************************************************************