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:

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

Reply via email to