Skip to content

Commit

Permalink
Automatically create a hard dependency on runtimeClasspath of the jni…
Browse files Browse the repository at this point in the history
…gen target.

* Later gradle versions don't seem to do this automatically anymore.
  • Loading branch information
PokeMMO committed Dec 7, 2021
1 parent 00516ab commit db40f40
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.badlogic.gdx.jnigen.BuildTarget;
import com.badlogic.gdx.jnigen.BuildTarget.TargetOs;
Expand All @@ -23,6 +25,8 @@
* @author Desu
*/
public class JnigenExtension {
private static final Logger log = LoggerFactory.getLogger(JnigenExtension.class);

public static final boolean x32 = false;
public static final boolean x64 = true;
public static final boolean ARM = true;
Expand Down Expand Up @@ -52,7 +56,7 @@ public class JnigenExtension {
boolean release = true;

NativeCodeGeneratorConfig nativeCodeGeneratorConfig;
ArrayList<BuildTarget> targets = new ArrayList<BuildTarget>();
List<BuildTarget> targets = new ArrayList<>();
Action<BuildTarget> all = null;

Task jarAndroidNatives = null;
Expand Down Expand Up @@ -197,38 +201,47 @@ public void each(Predicate<BuildTarget> condition, Action<BuildTarget> container
}

class NativeCodeGeneratorConfig {
String sourceDir;
String classpath;
SourceSet sourceSet;
private String sourceDir;
String jniDir = "jni";
String[] includes = null;
String[] excludes = null;

/**
* If we detected multiple source dirs and should ask the user to manually define sourceDir.
*/
boolean multipleSourceSetDirs = false;

public NativeCodeGeneratorConfig(Project project, String subProjectDir) {
JavaPluginConvention javaPlugin = project.getConvention().getPlugin(JavaPluginConvention.class);
SourceSetContainer sourceSets = javaPlugin.getSourceSets();
SourceSet main = sourceSets.findByName("main");
classpath = main.getRuntimeClasspath().getAsPath();
sourceSet = sourceSets.findByName("main");
}

@Override
public String toString() {
return "NativeCodeGeneratorConfig[sourceDir=`" + sourceDir + "`, sourceSet=`" + sourceSet + "`, jniDir=`"
+ jniDir + "`, includes=`" + Arrays.toString(includes)
+ "`, excludes=`" + Arrays.toString(excludes) + "`]";
}

Set<File> javaSrcDirs = main.getJava().getSrcDirs();
public void setSourceDir(String sourceDir) {
this.sourceDir = sourceDir;
}

public String getSourceDir()
{
//If already set, use provided value
if(sourceDir != null) {
return sourceDir;
}

Set<File> javaSrcDirs = sourceSet.getJava().getSrcDirs();
if (javaSrcDirs.size() == 1) {
for (File srcDir : javaSrcDirs) {
sourceDir = srcDir.getPath();
}
} else {
multipleSourceSetDirs = true;
log.error("Multiple java SrcDirs detected. Please manually specify nativeCodeGenerator { sourceDir = \"\"}");
throw new RuntimeException( "Multiple java SrcDirs detected. Please manually specify nativeCodeGenerator { sourceDir = \"\"}");
}
return sourceDir;
}

@Override
public String toString() {
return "NativeCodeGeneratorConfig[sourceDir=`" + sourceDir + "`, classpath=`" + classpath + "`, jniDir=`"
+ jniDir + "`, includes=`" + (includes == null ? "null" : Arrays.toString(includes))
+ "`, excludes=`" + (includes == null ? "null" : Arrays.toString(excludes)) + "`]";
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public JnigenTask(JnigenExtension ext) {

setGroup("jnigen");
setDescription("Generates jnigen native code files and build scripts.");
dependsOn(ext.nativeCodeGeneratorConfig.sourceSet.getRuntimeClasspath());
}

@TaskAction
Expand All @@ -40,17 +41,12 @@ public void run() {
log.debug("nativeCodeGeneratorConfig " + ext.nativeCodeGeneratorConfig);

try {
if (ext.nativeCodeGeneratorConfig.multipleSourceSetDirs && ext.nativeCodeGeneratorConfig.sourceDir == null) {
log.error("Multiple java SrcDirs detected. Please manually specify nativeCodeGenerator { sourceDir = \"\"}");
throw new RuntimeException( "Multiple java SrcDirs detected. Please manually specify nativeCodeGenerator { sourceDir = \"\"}");
}

String absoluteSourceDir = ext.nativeCodeGeneratorConfig.sourceDir;
String absoluteSourceDir = ext.nativeCodeGeneratorConfig.getSourceDir();
if(!absoluteSourceDir.startsWith(ext.subProjectDir))
absoluteSourceDir = ext.subProjectDir + ext.nativeCodeGeneratorConfig.sourceDir;
absoluteSourceDir = ext.subProjectDir + ext.nativeCodeGeneratorConfig.getSourceDir();

new NativeCodeGenerator().generate(absoluteSourceDir,
ext.nativeCodeGeneratorConfig.classpath, ext.subProjectDir + ext.nativeCodeGeneratorConfig.jniDir,
ext.nativeCodeGeneratorConfig.sourceSet.getRuntimeClasspath().getAsPath(), ext.subProjectDir + ext.nativeCodeGeneratorConfig.jniDir,
ext.nativeCodeGeneratorConfig.includes, ext.nativeCodeGeneratorConfig.excludes);
} catch (Exception e) {
throw new RuntimeException("NativeCodeGenerator threw exception", e);
Expand Down

0 comments on commit db40f40

Please sign in to comment.