aboutsummaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2015-12-06 17:03:08 -0800
committerJakob Odersky <jodersky@gmail.com>2015-12-06 17:09:40 -0800
commite2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63 (patch)
treef4fec79ba707aa9b2dec903d54a164f357961f19 /samples
parent3e90312b3f2d912bf27e91b454a6ef21a81a2fc5 (diff)
downloadsbt-jni-e2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63.tar.gz
sbt-jni-e2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63.tar.bz2
sbt-jni-e2505d1d9e2e49554057a8cd5fb71b0ac0e3ba63.zip
Use separate project for native libraries
Diffstat (limited to 'samples')
-rw-r--r--samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Library.scala8
-rw-r--r--samples/basic/basic-main/src/main/scala/ch/jodersky/jni/basic/Main.scala13
-rw-r--r--samples/basic/basic-native/src/CMakeLists.txt46
-rw-r--r--samples/basic/basic-native/src/include/ch_jodersky_jni_basic_Library__.h21
-rw-r--r--samples/basic/basic-native/src/library.c16
-rw-r--r--samples/basic/build.sbt24
-rw-r--r--samples/basic/project/build.properties1
-rw-r--r--samples/basic/project/plugins.sbt1
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")