diff options
author | Jakob Odersky <jakob@odersky.com> | 2016-05-02 05:19:07 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2016-05-11 11:17:09 -0700 |
commit | 791cb363b77332e3abdf4039102dfcdb863ce6c3 (patch) | |
tree | 09ff5d807a1407abedade57b692204ceac3f3280 /plugin/src/sbt-test/sbt-jni/multiclasses/native1/src | |
parent | 49563ee13599b0cb1add27b24446677a13b1f563 (diff) | |
download | sbt-jni-791cb363b77332e3abdf4039102dfcdb863ce6c3.tar.gz sbt-jni-791cb363b77332e3abdf4039102dfcdb863ce6c3.tar.bz2 sbt-jni-791cb363b77332e3abdf4039102dfcdb863ce6c3.zip |
Use macro annotation to load native library
This also removes the need for third projects to depend on a "loader library".
Diffstat (limited to 'plugin/src/sbt-test/sbt-jni/multiclasses/native1/src')
-rw-r--r-- | plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/CMakeLists.txt | 61 | ||||
-rw-r--r-- | plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c | 28 |
2 files changed, 89 insertions, 0 deletions
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; +} |