plugins { id 'com.github.hauner.jarTest' version '1.0.1' } apply plugin: 'cpp' sourceSets.test.java.srcDirs = ['harness-src/java'] dependencies { testCompile 'junit:junit:4.11' testCompile project(':com.ibm.wala.cast') testCompile project(':com.ibm.wala.core') testCompile project(':com.ibm.wala.util') testCompile project(configuration: 'testArchives', path: ':com.ibm.wala.core.tests') } // TODO: build following targets for "test"-only, not "main" def currentJvm = org.gradle.internal.jvm.Jvm.current() task generateJniHeaders(type: Exec, dependsOn: [testClasses, ':com.ibm.wala.cast:classes']) { // classes for which we need headers def nativePackage = 'com.ibm.wala.cast.test' def nativeClasses = ['TestNativeTranslator'] def qualifiedClasses = nativeClasses.collect { "$nativePackage.$it" } // inputs and outputs, suitable for use with rule-based model configuration ext { sourceDir = null headerDir = "$buildDir/include" } inputs.files files(qualifiedClasses.collect { "$buildDir/${it.replace('.', '/')}.class" }) outputs.files files(qualifiedClasses.collect { "$headerDir/${it.replace('.', '_')}.h" }) // javah command to generate headers def sourceSets = [sourceSets.test, project(':com.ibm.wala.cast').sourceSets.main] def classesDirs = sourceSets.inject(files()) { acc, val -> acc.plus(val.output.classesDirs) } def classpath = classesDirs.asPath def javah = currentJvm.getExecutable('javah') commandLine(javah, '-d', "$headerDir", '-classpath', classpath) args(qualifiedClasses) } model { components { xlator_test(NativeLibrarySpec) { sources.cpp { source { srcDirs = ['harness-src/c'] include 'smoke.cpp' } generatedBy tasks.generateJniHeaders ['cast', 'jdk'].each { lib project: ':com.ibm.wala.cast', library: it } } binaries { withType(StaticLibraryBinarySpec) { buildable = false } all { // TODO: compute path on following line from 'cast' library properties somehow linker.args '-Wl,-rpath', "${project(':com.ibm.wala.cast').buildDir}/libs/cast/shared" // TODO: compute path on following line from 'jdk' library properties somehow linker.args '-Wl,-rpath', "${currentJvm.javaHome}/jre/lib/amd64/server" } } } smoke_main(NativeExecutableSpec) { sources.cpp { source { srcDirs = ['harness-src/c'] include 'smoke_main.cpp' } ['cast', 'jdk'].each { lib project: ':com.ibm.wala.cast', library: it } } binaries.all { // TODO: compute path on following line from 'cast' library properties somehow linker.args '-Wl,-rpath', "${project(':com.ibm.wala.cast').buildDir}/libs/cast/shared" // TODO: compute path on following line from 'jdk' library properties somehow linker.args '-Wl,-rpath', "${currentJvm.javaHome}/jre/lib/amd64/server" } } } } // TODO: Java tests in this subproject should depend on the xlator_test library at run time test { // TODO: compute path on following line from 'xlator_test' library properties somehow systemProperty "java.library.path", "$buildDir/libs/xlator_test/shared" }