diff options
Diffstat (limited to 'samples/basic')
-rw-r--r-- | samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Library.scala | 8 | ||||
-rw-r--r-- | samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Main.scala | 13 | ||||
-rw-r--r-- | samples/basic/basic-native/src/CMakeLists.txt | 46 | ||||
-rw-r--r-- | samples/basic/basic-native/src/include/ch_jodersky_jni_basic_Library__.h | 21 | ||||
-rw-r--r-- | samples/basic/basic-native/src/library.c | 16 | ||||
-rw-r--r-- | samples/basic/build.sbt | 24 | ||||
-rw-r--r-- | samples/basic/project/build.properties | 1 | ||||
-rw-r--r-- | samples/basic/project/plugins.sbt | 1 |
8 files changed, 130 insertions, 0 deletions
diff --git a/samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Library.scala b/samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Library.scala new file mode 100644 index 0000000..efe3018 --- /dev/null +++ b/samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Library.scala @@ -0,0 +1,8 @@ +package ch.jodersky.jni.basic + +/** A demo object, mapping to a native library. */ +object Library { + + @native def print(message: String): Int + +} diff --git a/samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Main.scala b/samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Main.scala new file mode 100644 index 0000000..b46f0d1 --- /dev/null +++ b/samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Main.scala @@ -0,0 +1,13 @@ +package ch.jodersky.jni.basic + +import ch.jodersky.jni.NativeLoader + +object Main { + + def main(args: Array[String]): Unit = { + NativeLoader.load("/ch/jodersky/jni/basic", "demo1") + val r = Library.print("Hello world!\n") + println("Returned: " + r) + } + +} diff --git a/samples/basic/basic-native/src/CMakeLists.txt b/samples/basic/basic-native/src/CMakeLists.txt new file mode 100644 index 0000000..ec112b3 --- /dev/null +++ b/samples/basic/basic-native/src/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 2.6) + +# Define project and related variables +# +project (demo) + +# Set versions and library name +# Note: major version will be appended to library name +# +set (VERSION_MAJOR 1) +set (VERSION_MINOR 2) +set (VERSION_PATCH 3) +set (LIB_NAME demo${VERSION_MAJOR}) + +# Command-line options +# +# required by sbt-jni to install binaries to correct places +set (LIB_INSTALL_DIR lib CACHE PATH "Path in which to install libraries (Autoconf equivalent to --libdir).") +# required by sbt-jni to disable versioned libraries +set (ENABLE_VERSIONED_LIB ON CACHE BOOLEAN "Generate versioned library files and symlinks.") + +# Setup JNI +find_package(JNI REQUIRED) +if (JNI_FOUND) + message (STATUS "JNI include directories: ${JNI_INCLUDE_DIRS}") +endif() + +# Include directories +include_directories(.) +include_directories(include) +include_directories(${JNI_INCLUDE_DIRS}) + +# Setup main shared library +# Note: major version is appended to library name +add_library(${LIB_NAME} SHARED library.c) +if (ENABLE_VERSIONED_LIB) + set_target_properties( + ${LIB_NAME} + PROPERTIES + VERSION 0.${VERSION_MINOR}.${VERSION_PATCH} # major version always 0, it is included in name + SOVERSION 0 + ) +endif() + +# Installation targets +install(TARGETS ${LIB_NAME} LIBRARY DESTINATION ${LIB_INSTALL_DIR}) diff --git a/samples/basic/basic-native/src/include/ch_jodersky_jni_basic_Library__.h b/samples/basic/basic-native/src/include/ch_jodersky_jni_basic_Library__.h new file mode 100644 index 0000000..60821e4 --- /dev/null +++ b/samples/basic/basic-native/src/include/ch_jodersky_jni_basic_Library__.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class ch_jodersky_jni_basic_Library__ */ + +#ifndef _Included_ch_jodersky_jni_basic_Library__ +#define _Included_ch_jodersky_jni_basic_Library__ +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: ch_jodersky_jni_basic_Library__ + * Method: print + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_ch_jodersky_jni_basic_Library_00024_print + (JNIEnv *, jobject, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/samples/basic/basic-native/src/library.c b/samples/basic/basic-native/src/library.c new file mode 100644 index 0000000..eec05e5 --- /dev/null +++ b/samples/basic/basic-native/src/library.c @@ -0,0 +1,16 @@ +#include <stdio.h> +#include "ch_jodersky_jni_basic_Library__.h" + +/* + * Class: ch_jodersky_jni_basic_Library__ + * Method: print + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_ch_jodersky_jni_basic_Library_00024_print +(JNIEnv *env, jobject clazz, jstring message) { + const char* msg = (*env)->GetStringUTFChars(env, message, 0); + fprintf(stdout, "Printing from native library: %s", msg); + fflush(stdout); + (*env)->ReleaseStringUTFChars(env, message, msg); + return 0; +} diff --git a/samples/basic/build.sbt b/samples/basic/build.sbt new file mode 100644 index 0000000..cceeb16 --- /dev/null +++ b/samples/basic/build.sbt @@ -0,0 +1,24 @@ +val commonSettings = Seq( + scalaVersion := "2.11.7", + organization := "ch.jodersky" +) + +lazy val main = Project( + id = "sample-basic-main", + base = file("basic-main"), + settings = commonSettings ++ Seq( + target in (Compile, javah) := + (sourceDirectory in native).value / "include" + ), + dependencies = Seq( + native % Runtime + ) +).enablePlugins(JniJvm) + +lazy val native = Project( + id = "sample-basic-native", + base = file("basic-native"), + settings = commonSettings ++ Seq( + jniLibraryPath in (Compile, jni) := "/ch/jodersky/jni/basic" + ) +).enablePlugins(JniNative) diff --git a/samples/basic/project/build.properties b/samples/basic/project/build.properties new file mode 100644 index 0000000..817bc38 --- /dev/null +++ b/samples/basic/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.13.9 diff --git a/samples/basic/project/plugins.sbt b/samples/basic/project/plugins.sbt new file mode 100644 index 0000000..08f838a --- /dev/null +++ b/samples/basic/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("ch.jodersky" % "sbt-jni" % "0.2-SNAPSHOT") |