diff options
Diffstat (limited to 'plugin/src/sbt-test/sbt-jni')
27 files changed, 332 insertions, 0 deletions
diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/README.md b/plugin/src/sbt-test/sbt-jni/multiclasses/README.md new file mode 100644 index 0000000..b039e7a --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/README.md @@ -0,0 +1 @@ +Tests multiple native projects and native loading for classes. diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/build.sbt b/plugin/src/sbt-test/sbt-jni/multiclasses/build.sbt new file mode 100644 index 0000000..d12a711 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/build.sbt @@ -0,0 +1,16 @@ +ivyLoggingLevel := UpdateLogging.Quiet + +lazy val root = (project in file(".")). + aggregate(core, native1, native2) + +lazy val core = (project in file("core")). + dependsOn(native1 % Runtime). + dependsOn(native2 % Runtime) + +lazy val native1 = (project in file("native1")). + settings(sourceDirectory in nativeCompile := sourceDirectory.value). + enablePlugins(JniNative) + +lazy val native2 = (project in file("native2")). + settings(sourceDirectory in nativeCompile := sourceDirectory.value). + enablePlugins(JniNative) diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Adder.scala b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Adder.scala new file mode 100644 index 0000000..91d5683 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Adder.scala @@ -0,0 +1,18 @@ +package multiclasses + +import ch.jodersky.jni.nativeLoader + +@nativeLoader("demo0") +class Adder(base0: Int) { + + final private val base = base0 + + @native def plus(term: Int): Int + +} + +object Adder { + + @native def sum(term1: Int, term2: Int): Int + +} diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Main.scala b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Main.scala new file mode 100644 index 0000000..6734ae9 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Main.scala @@ -0,0 +1,30 @@ +package multiclasses + +object Main { + + def addition(): Unit = { + val zero = new Adder(0) + val one = new Adder(1) + assert((zero plus 1) == 1) + assert((one plus 1) == 2) + assert(Adder.sum(0,1) == 1) + } + + def multiplication(): Unit = { + val zero = new Multiplier { + override def base = 0 + } + + val one = new Multiplier { + override def base = 1 + } + assert((zero times 1) == 0) + assert((one times 1) == 1) + } + + def main(args: Array[String]): Unit = { + addition() + multiplication() + } + +} diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Multiplier.scala b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Multiplier.scala new file mode 100644 index 0000000..19cd25f --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Multiplier.scala @@ -0,0 +1,12 @@ +package multiclasses + +import ch.jodersky.jni.nativeLoader + +@nativeLoader("multiplier1") +abstract class Multiplier { + + def base: Int = 1 + + @native def times(factor: Int): Int + +} diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/CMakeLists.txt b/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/CMakeLists.txt new file mode 100644 index 0000000..1539ec2 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/CMakeLists.txt @@ -0,0 +1,61 @@ +################################################################ +# A minimal CMake file that is compatible with sbt-jni # +# # +# All settings required by sbt-jni have been marked so, please # +# add/modify/remove settings to build your specific library. # +################################################################ + +cmake_minimum_required(VERSION 2.6) + +# Define project and related variables +# +project (demo) + +# Set versions and library name +# (required by sbt-jni) please use semantic versioning +# +set (VERSION_MAJOR 0) +set (VERSION_MINOR 0) +set (VERSION_PATCH 0) +# (required by sbt-jni) major version will always be appended to library name +set (LIB_NAME ${CMAKE_PROJECT_NAME}${VERSION_MAJOR}) + +# Command-line options +# +# (set by sbt-jni) +set (LIB_INSTALL_DIR lib CACHE PATH "Path in which to install libraries (equivalent to Autoconf --libdir).") +# (set by sbt-jni) +set (LIB_ENABLE_MINOR_VERSIONS ON CACHE BOOLEAN "Build libraries with minor and patch versions appended.") + +# Setup JNI +find_package(JNI REQUIRED) +if (JNI_FOUND) + message (STATUS "JNI include directories: ${JNI_INCLUDE_DIRS}") +endif() + +# Include directories +include_directories(.) +include_directories(../../core/target/native/include) +include_directories(${JNI_INCLUDE_DIRS}) + +# Setup main shared library +file(GLOB LIB_SRC + "*.c" + "*.cpp" +) +add_library(${LIB_NAME} SHARED ${LIB_SRC}) + +# By default, in a regular build, minor and patch versions are added to the generated files. +# When built through sbt-jni however, LIB_ENABLE_MINOR_VERSIONS is deactivated and only a +# major-versioned library file is built. +if (LIB_ENABLE_MINOR_VERSIONS) + set_target_properties( + ${LIB_NAME} + PROPERTIES + VERSION 0.${VERSION_MINOR}.${VERSION_PATCH} # major version always 0, it is included in library name + SOVERSION 0 + ) +endif() + +# Installation targets +install(TARGETS ${LIB_NAME} LIBRARY DESTINATION ${LIB_INSTALL_DIR}) diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c b/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c new file mode 100644 index 0000000..8b45660 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c @@ -0,0 +1,28 @@ +#include <jni.h> +#include "multiclasses_Adder.h" +#include "multiclasses_Adder__.h" + +/* + * Class: multiclasses_Adder + * Method: plus + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_multiclasses_Adder_plus + (JNIEnv* env, jobject instance, jint term) +{ + jclass clazz = (*env)->GetObjectClass(env, instance); + jfieldID field = (*env)->GetFieldID(env, clazz, "base", "I"); + jint base = (*env)->GetIntField(env, instance, field); + return base + term; +} + +/* + * Class: multiclasses_Adder__ + * Method: sum + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_multiclasses_Adder_00024_sum + (JNIEnv* env, jobject instance, jint term1, jint term2) +{ + return term1 + term2; +} diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/native2/src/CMakeLists.txt b/plugin/src/sbt-test/sbt-jni/multiclasses/native2/src/CMakeLists.txt new file mode 100644 index 0000000..feeab89 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/native2/src/CMakeLists.txt @@ -0,0 +1,61 @@ +################################################################ +# A minimal CMake file that is compatible with sbt-jni # +# # +# All settings required by sbt-jni have been marked so, please # +# add/modify/remove settings to build your specific library. # +################################################################ + +cmake_minimum_required(VERSION 2.6) + +# Define project and related variables +# +project (multiplier) + +# Set versions and library name +# (required by sbt-jni) please use semantic versioning +# +set (VERSION_MAJOR 1) +set (VERSION_MINOR 2) +set (VERSION_PATCH 3) +# (required by sbt-jni) major version will always be appended to library name +set (LIB_NAME ${CMAKE_PROJECT_NAME}${VERSION_MAJOR}) + +# Command-line options +# +# (set by sbt-jni) +set (LIB_INSTALL_DIR lib CACHE PATH "Path in which to install libraries (equivalent to Autoconf --libdir).") +# (set by sbt-jni) +set (LIB_ENABLE_MINOR_VERSIONS ON CACHE BOOLEAN "Build libraries with minor and patch versions appended.") + +# Setup JNI +find_package(JNI REQUIRED) +if (JNI_FOUND) + message (STATUS "JNI include directories: ${JNI_INCLUDE_DIRS}") +endif() + +# Include directories +include_directories(.) +include_directories(../../core/target/native/include) +include_directories(${JNI_INCLUDE_DIRS}) + +# Setup main shared library +file(GLOB LIB_SRC + "*.c" + "*.cpp" +) +add_library(${LIB_NAME} SHARED ${LIB_SRC}) + +# By default, in a regular build, minor and patch versions are added to the generated files. +# When built through sbt-jni however, LIB_ENABLE_MINOR_VERSIONS is deactivated and only a +# major-versioned library file is built. +if (LIB_ENABLE_MINOR_VERSIONS) + set_target_properties( + ${LIB_NAME} + PROPERTIES + VERSION 0.${VERSION_MINOR}.${VERSION_PATCH} # major version always 0, it is included in library name + SOVERSION 0 + ) +endif() + +# Installation targets +install(TARGETS ${LIB_NAME} LIBRARY DESTINATION ${LIB_INSTALL_DIR}) diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/native2/src/library.c b/plugin/src/sbt-test/sbt-jni/multiclasses/native2/src/library.c new file mode 100644 index 0000000..5fe817e --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/native2/src/library.c @@ -0,0 +1,16 @@ +#include <jni.h> +#include "multiclasses_Multiplier.h" + +/* + * Class: multiclasses_Multiplier + * Method: times + * Signature: (I)I + */ +JNIEXPORT jint JNICALL Java_multiclasses_Multiplier_times + (JNIEnv* env, jobject instance, jint factor) +{ + jclass clazz = (*env)->GetObjectClass(env, instance); + jmethodID method = (*env)->GetMethodID(env, clazz, "base", "()I"); + jint base = (*env)->CallIntMethod(env, instance, method); + return base * factor; +} diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/project/ScriptedHelper.scala b/plugin/src/sbt-test/sbt-jni/multiclasses/project/ScriptedHelper.scala new file mode 120000 index 0000000..aeaba9d --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/project/ScriptedHelper.scala @@ -0,0 +1 @@ +../../simple/project/ScriptedHelper.scala
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/project/plugins.sbt b/plugin/src/sbt-test/sbt-jni/multiclasses/project/plugins.sbt new file mode 120000 index 0000000..1c60ea7 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/project/plugins.sbt @@ -0,0 +1 @@ +../../simple/project/plugins.sbt
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/test b/plugin/src/sbt-test/sbt-jni/multiclasses/test new file mode 100644 index 0000000..e9e0d97 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/test @@ -0,0 +1,2 @@ +> javah +> core/run
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/README.md b/plugin/src/sbt-test/sbt-jni/oneproject/README.md new file mode 100644 index 0000000..9d78fef --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/README.md @@ -0,0 +1 @@ +Tests the combination of native and scala sources in a single project. diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/build.sbt b/plugin/src/sbt-test/sbt-jni/oneproject/build.sbt new file mode 100644 index 0000000..3b95d55 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/build.sbt @@ -0,0 +1,6 @@ +ivyLoggingLevel := UpdateLogging.Quiet + +enablePlugins(JniNative) + +target in javah := (sourceDirectory in nativeCompile).value / "include" + diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/project/ScriptedHelper.scala b/plugin/src/sbt-test/sbt-jni/oneproject/project/ScriptedHelper.scala new file mode 120000 index 0000000..aeaba9d --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/project/ScriptedHelper.scala @@ -0,0 +1 @@ +../../simple/project/ScriptedHelper.scala
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/project/plugins.sbt b/plugin/src/sbt-test/sbt-jni/oneproject/project/plugins.sbt new file mode 120000 index 0000000..1c60ea7 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/project/plugins.sbt @@ -0,0 +1 @@ +../../simple/project/plugins.sbt
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/src/main b/plugin/src/sbt-test/sbt-jni/oneproject/src/main new file mode 120000 index 0000000..1b483d7 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/src/main @@ -0,0 +1 @@ +../../simple/core/src/main/
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/src/native b/plugin/src/sbt-test/sbt-jni/oneproject/src/native new file mode 120000 index 0000000..ebbac72 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/src/native @@ -0,0 +1 @@ +../../simple/native/src/
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/test b/plugin/src/sbt-test/sbt-jni/oneproject/test new file mode 100644 index 0000000..2c485fa --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/test @@ -0,0 +1,4 @@ +> javah +$ exists src/native/include/simple_Library__.h +> nativeInit cmake demo +> run
\ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/simple/README.md b/plugin/src/sbt-test/sbt-jni/simple/README.md new file mode 100644 index 0000000..54179b2 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/README.md @@ -0,0 +1 @@ +Very basic test. diff --git a/plugin/src/sbt-test/sbt-jni/simple/build.sbt b/plugin/src/sbt-test/sbt-jni/simple/build.sbt new file mode 100644 index 0000000..e324d5a --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/build.sbt @@ -0,0 +1,12 @@ +ivyLoggingLevel := UpdateLogging.Quiet + +lazy val root = (project in file(".")). + aggregate(core, native) + +lazy val core = (project in file("core")). + settings(target in javah := (sourceDirectory in nativeCompile in native).value / "include"). + dependsOn(native % Runtime) + +lazy val native = (project in file("native")). + settings(sourceDirectory in nativeCompile := sourceDirectory.value). + enablePlugins(JniNative) diff --git a/plugin/src/sbt-test/sbt-jni/simple/core/src/main/scala/simple/Library.scala b/plugin/src/sbt-test/sbt-jni/simple/core/src/main/scala/simple/Library.scala new file mode 100644 index 0000000..785f8dd --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/core/src/main/scala/simple/Library.scala @@ -0,0 +1,10 @@ +package simple + +import ch.jodersky.jni.nativeLoader + +@nativeLoader("demo0") +object Library { + + @native def say(message: String): Int + +} diff --git a/plugin/src/sbt-test/sbt-jni/simple/core/src/main/scala/simple/Main.scala b/plugin/src/sbt-test/sbt-jni/simple/core/src/main/scala/simple/Main.scala new file mode 100644 index 0000000..c54d6e0 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/core/src/main/scala/simple/Main.scala @@ -0,0 +1,10 @@ +package simple + +object Main { + + def main(args: Array[String]): Unit = { + val result = Library.say("hello world") + assert(result == 42) + } + +} diff --git a/plugin/src/sbt-test/sbt-jni/simple/native/src/library.c b/plugin/src/sbt-test/sbt-jni/simple/native/src/library.c new file mode 100644 index 0000000..4fa15b1 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/native/src/library.c @@ -0,0 +1,16 @@ +#include <stdio.h> +#include "simple_Library__.h" + +/* + * Class: simple_Library__ + * Method: say + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_simple_Library_00024_say +(JNIEnv *env, jobject clazz, jstring message) { + const char* msg = (*env)->GetStringUTFChars(env, message, 0); + fprintf(stdout, "Printing from native library: %s\n", msg); + fflush(stdout); + (*env)->ReleaseStringUTFChars(env, message, msg); + return 42; +} diff --git a/plugin/src/sbt-test/sbt-jni/simple/project/ScriptedHelper.scala b/plugin/src/sbt-test/sbt-jni/simple/project/ScriptedHelper.scala new file mode 100644 index 0000000..cd63c89 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/project/ScriptedHelper.scala @@ -0,0 +1,14 @@ +import sbt._ +import sbt.Keys._ + +object ScriptedHelper extends AutoPlugin { + + override def requires = empty + override def trigger = allRequirements + + override def projectSettings = Seq( + crossScalaVersions := Seq("2.11.8", "2.12.0-M4"), + scalaVersion := crossScalaVersions.value.head + ) + +} diff --git a/plugin/src/sbt-test/sbt-jni/simple/project/plugins.sbt b/plugin/src/sbt-test/sbt-jni/simple/project/plugins.sbt new file mode 100644 index 0000000..b8fc7ed --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/project/plugins.sbt @@ -0,0 +1,3 @@ +ivyLoggingLevel := UpdateLogging.Quiet + +addSbtPlugin("ch.jodersky" % "sbt-jni" % System.getProperty("plugin.version")) diff --git a/plugin/src/sbt-test/sbt-jni/simple/test b/plugin/src/sbt-test/sbt-jni/simple/test new file mode 100644 index 0000000..dd9e5bf --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/test @@ -0,0 +1,4 @@ +> javah +$ exists native/src/include/simple_Library__.h +> nativeInit cmake demo +> core/run
\ No newline at end of file |