From: Mathieu Baudier Date: Sat, 12 Feb 2022 05:22:55 +0000 (+0100) Subject: Move JNI to a standalone subdirectory. X-Git-Tag: argeo-commons-2.3.5~29 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=e4e950d98cadf27008f3fb7e59aa769eb9242505;hp=380e5ab9620d7c48e6131afd38f307fffcd848f6;p=lgpl%2Fargeo-commons.git Move JNI to a standalone subdirectory. --- diff --git a/Makefile b/Makefile index 82dcf494b..85473c29c 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ include sdk.mk -.PHONY: clean all osgi +.PHONY: clean all osgi jni -all: osgi jni +all: osgi BUNDLE_PREFIX = org.argeo A2_CATEGORY = org.argeo @@ -12,7 +12,6 @@ org.argeo.util \ org.argeo.api.uuid \ org.argeo.api.acr \ org.argeo.api.cms \ -org.argeo.cms.tp \ org.argeo.cms \ org.argeo.cms.pgsql \ eclipse/org.argeo.cms.servlet \ @@ -21,9 +20,6 @@ rcp/org.argeo.swt.specific.rcp \ eclipse/org.argeo.cms.swt \ rcp/org.argeo.cms.ui.rcp \ -NATIVE_PROJECTS = \ -org.argeo.api.uuid/jni \ - BUILD_CLASSPATH = \ /usr/share/java/osgi-core/osgi.core.jar:$\ /usr/share/java/osgi-compendium/osgi.cmpn.jar:$\ @@ -60,7 +56,7 @@ org.argeo.api.cms jni: - $(foreach dir, $(NATIVE_PROJECTS), $(MAKE) -C $(dir);) + $(MAKE) -C jni # TODO relativize from SDK_SRC_BASE BUILD_BASE = $(SDK_BUILD_BASE) @@ -96,7 +92,7 @@ clean: rm -rf $(BUILD_BASE)/*-compiled rm -rf $(BUILD_BASE)/{cnf,a2} rm -rf $(BUILD_BASE)/$(BUNDLE_PREFIX).* $(BUILD_BASE)/eclipse $(BUILD_BASE)/rcp - $(foreach dir, $(NATIVE_PROJECTS), $(MAKE) -C $(dir) clean;) + $(MAKE) -C jni clean # SDK level $(SDK_BUILD_BASE)/cnf/%.bnd: cnf/%.bnd diff --git a/configure b/configure index 4587bf45e..90c0e9953 100644 --- a/configure +++ b/configure @@ -21,6 +21,12 @@ exit 1 else +if [ -z "$JAVA_HOME" ] +then +echo "Environment variable JAVA_HOME must be set" +exit 1 +fi + # Create build directory, so that it can be used right away # and we check whether we have the rights mkdir -p $SDK_BUILD_BASE @@ -34,6 +40,7 @@ fi cat > "$SDK_MK" < + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + make + + ide + true + true + true + + + + \ No newline at end of file diff --git a/jni/.project b/jni/.project new file mode 100644 index 000000000..492a807be --- /dev/null +++ b/jni/.project @@ -0,0 +1,26 @@ + + + jni-commons + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/jni/.settings/language.settings.xml b/jni/.settings/language.settings.xml new file mode 100644 index 000000000..e30ee1672 --- /dev/null +++ b/jni/.settings/language.settings.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/jni/.settings/org.eclipse.cdt.core.prefs b/jni/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 000000000..c8ec5df2d --- /dev/null +++ b/jni/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,6 @@ +doxygen/doxygen_new_line_after_brief=true +doxygen/doxygen_use_brief_tag=false +doxygen/doxygen_use_javadoc_tags=true +doxygen/doxygen_use_pre_tag=false +doxygen/doxygen_use_structural_commands=false +eclipse.preferences.version=1 diff --git a/jni/Makefile b/jni/Makefile new file mode 100644 index 000000000..8944d5ce7 --- /dev/null +++ b/jni/Makefile @@ -0,0 +1,10 @@ +JNIDIRS = org_argeo_api_uuid_libuuid + +.PHONY: clean all + +all: + $(foreach dir, $(JNIDIRS), $(MAKE) -C $(dir);) + +clean: + $(foreach dir, $(JNIDIRS), $(MAKE) -C $(dir) clean;) + diff --git a/jni/jni.mk b/jni/jni.mk new file mode 100644 index 000000000..46f06749c --- /dev/null +++ b/jni/jni.mk @@ -0,0 +1,61 @@ +TARGET_EXEC := libJava_$(NATIVE_PACKAGE).so + +LDFLAGS = -shared -fPIC -Wl,-soname,$(TARGET_EXEC).$(MAJOR).$(MINOR) $(ADDITIONAL_LIBS) +CFLAGS = -O3 -fPIC + +SRC_DIRS := . + +# +# Generic Argeo +# +BUILD_DIR := $(SDK_BUILD_BASE)/jni/$(NATIVE_PACKAGE) + +# Every folder in ./src will need to be passed to GCC so that it can find header files +INC_DIRS := $(shell find $(SRC_DIRS) -type d) $(JAVA_HOME)/include $(JAVA_HOME)/include/linux $(ADDITIONAL_INCLUDES) + + +.PHONY: clean all ide +all: $(SDK_BUILD_BASE)/jni/$(TARGET_EXEC) + +# Find all the C and C++ files we want to compile +# Note the single quotes around the * expressions. Make will incorrectly expand these otherwise. +SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s') + +# String substitution for every C/C++ file. +# As an example, hello.cpp turns into ./build/hello.cpp.o +OBJS := $(SRCS:%=$(BUILD_DIR)/%.o) + +# String substitution (suffix version without %). +# As an example, ./build/hello.cpp.o turns into ./build/hello.cpp.d +DEPS := $(OBJS:.o=.d) + +# Add a prefix to INC_DIRS. So moduleA would become -ImoduleA. GCC understands this -I flag +INC_FLAGS := $(addprefix -I,$(INC_DIRS)) + +# The -MMD and -MP flags together generate Makefiles for us! +# These files will have .d instead of .o as the output. +CPPFLAGS := $(INC_FLAGS) -MMD -MP + +# The final build step. +$(SDK_BUILD_BASE)/jni/$(TARGET_EXEC): $(OBJS) + $(CC) $(OBJS) -o $@ $(LDFLAGS) + +# Build step for C source +$(BUILD_DIR)/%.c.o: %.c + mkdir -p $(dir $@) + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ + +# Build step for C++ source +$(BUILD_DIR)/%.cpp.o: %.cpp + mkdir -p $(dir $@) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ + +clean: + rm -r $(BUILD_DIR) $(SDK_BUILD_BASE)/$(TARGET_EXEC) + +# Include the .d makefiles. The - at the front suppresses the errors of missing +# Makefiles. Initially, all the .d files will be missing, and we don't want those +# errors to show up. +-include $(DEPS) + +# MAKEFILE_DIR := $(dir $(firstword $(MAKEFILE_LIST))) diff --git a/jni/org_argeo_api_uuid_libuuid/.gitignore b/jni/org_argeo_api_uuid_libuuid/.gitignore new file mode 100644 index 000000000..84c048a73 --- /dev/null +++ b/jni/org_argeo_api_uuid_libuuid/.gitignore @@ -0,0 +1 @@ +/build/ diff --git a/jni/org_argeo_api_uuid_libuuid/Makefile b/jni/org_argeo_api_uuid_libuuid/Makefile new file mode 100644 index 000000000..cfeb1db55 --- /dev/null +++ b/jni/org_argeo_api_uuid_libuuid/Makefile @@ -0,0 +1,8 @@ +NATIVE_PACKAGE := org_argeo_api_uuid_libuuid + +ADDITIONAL_INCLUDES = /usr/include/uuid +ADDITIONAL_LIBS = -luuid + +include ../../sdk.mk +include ../jni.mk + diff --git a/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.c b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.c new file mode 100644 index 000000000..a5aeed009 --- /dev/null +++ b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.c @@ -0,0 +1,8 @@ +#include +#include +#include "org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h" + +JNIEXPORT void JNICALL Java_org_argeo_api_uuid_libuuid_DirectLibuuidFactory_timeUUID( + JNIEnv *env, jobject uuidFactory, jobject uuidBuf) { + uuid_generate_time((*env)->GetDirectBufferAddress(env, uuidBuf)); +} diff --git a/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h new file mode 100644 index 000000000..5f18bf7f1 --- /dev/null +++ b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_argeo_api_uuid_libuuid_DirectLibuuidFactory */ + +#ifndef _Included_org_argeo_api_uuid_libuuid_DirectLibuuidFactory +#define _Included_org_argeo_api_uuid_libuuid_DirectLibuuidFactory +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_argeo_api_uuid_libuuid_DirectLibuuidFactory + * Method: timeUUID + * Signature: (Ljava/nio/ByteBuffer;)V + */ +JNIEXPORT void JNICALL Java_org_argeo_api_uuid_libuuid_DirectLibuuidFactory_timeUUID + (JNIEnv *, jobject, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.c b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.c new file mode 100644 index 000000000..f97b1f452 --- /dev/null +++ b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.c @@ -0,0 +1,91 @@ +#include +#include +#include "org_argeo_api_uuid_libuuid_LibuuidFactory.h" + +/* + * UTILITIES + */ + +static inline jobject fromBytes(JNIEnv *env, uuid_t out) { + jlong msb = 0; + jlong lsb = 0; + + for (int i = 0; i < 8; i++) + msb = (msb << 8) | (out[i] & 0xff); + for (int i = 8; i < 16; i++) + lsb = (lsb << 8) | (out[i] & 0xff); + + jclass uuidClass = (*env)->FindClass(env, "java/util/UUID"); + jmethodID uuidConstructor = (*env)->GetMethodID(env, uuidClass, "", + "(JJ)V"); + + jobject jUUID = (*env)->AllocObject(env, uuidClass); + (*env)->CallVoidMethod(env, jUUID, uuidConstructor, msb, lsb); + + return jUUID; +} + +static inline void toBytes(JNIEnv *env, jobject jUUID, uuid_t result) { + + jclass uuidClass = (*env)->FindClass(env, "java/util/UUID"); + jmethodID getMostSignificantBits = (*env)->GetMethodID(env, uuidClass, + "getMostSignificantBits", "()J"); + jmethodID getLeastSignificantBits = (*env)->GetMethodID(env, uuidClass, + "getLeastSignificantBits", "()J"); + + jlong msb = (*env)->CallLongMethod(env, jUUID, getMostSignificantBits); + jlong lsb = (*env)->CallLongMethod(env, jUUID, getLeastSignificantBits); + + for (int i = 0; i < 8; i++) + result[i] = (unsigned char) ((msb >> ((7 - i) * 8)) & 0xff); + for (int i = 8; i < 16; i++) + result[i] = (unsigned char) ((lsb >> ((15 - i) * 8)) & 0xff); +} + +/* + * JNI IMPLEMENTATION + */ + +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_timeUUID( + JNIEnv *env, jobject uuidFactory) { + uuid_t out; + + uuid_generate_time(out); + return fromBytes(env, out); +} + +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv5( + JNIEnv *env, jobject uuidFactory, jobject namespaceUuid, + jbyteArray name) { + uuid_t ns; + uuid_t out; + + toBytes(env, namespaceUuid, ns); + jsize length = (*env)->GetArrayLength(env, name); + jbyte *bytes = (*env)->GetByteArrayElements(env, name, 0); + + uuid_generate_sha1(out, ns, bytes, length); + return fromBytes(env, out); +} + +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv3( + JNIEnv *env, jobject uuidFactory, jobject namespaceUuid, + jbyteArray name) { + uuid_t ns; + uuid_t out; + + toBytes(env, namespaceUuid, ns); + jsize length = (*env)->GetArrayLength(env, name); + jbyte *bytes = (*env)->GetByteArrayElements(env, name, 0); + + uuid_generate_md5(out, ns, bytes, length); + return fromBytes(env, out); +} + +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_randomUUIDStrong( + JNIEnv *env, jobject uuidFactory) { + uuid_t out; + + uuid_generate_random(out); + return fromBytes(env, out); +} diff --git a/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.h b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.h new file mode 100644 index 000000000..ad0ac5e76 --- /dev/null +++ b/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.h @@ -0,0 +1,45 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_argeo_api_uuid_libuuid_LibuuidFactory */ + +#ifndef _Included_org_argeo_api_uuid_libuuid_LibuuidFactory +#define _Included_org_argeo_api_uuid_libuuid_LibuuidFactory +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_argeo_api_uuid_libuuid_LibuuidFactory + * Method: timeUUID + * Signature: ()Ljava/util/UUID; + */ +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_timeUUID + (JNIEnv *, jobject); + +/* + * Class: org_argeo_api_uuid_libuuid_LibuuidFactory + * Method: nameUUIDv5 + * Signature: (Ljava/util/UUID;[B)Ljava/util/UUID; + */ +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv5 + (JNIEnv *, jobject, jobject, jbyteArray); + +/* + * Class: org_argeo_api_uuid_libuuid_LibuuidFactory + * Method: nameUUIDv3 + * Signature: (Ljava/util/UUID;[B)Ljava/util/UUID; + */ +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv3 + (JNIEnv *, jobject, jobject, jbyteArray); + +/* + * Class: org_argeo_api_uuid_libuuid_LibuuidFactory + * Method: randomUUIDStrong + * Signature: ()Ljava/util/UUID; + */ +JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_randomUUIDStrong + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/org.argeo.api.uuid/jni/.cproject b/org.argeo.api.uuid/jni/.cproject deleted file mode 100644 index cf5a27a23..000000000 --- a/org.argeo.api.uuid/jni/.cproject +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - make - - - - ide - - true - - true - - true - - - - - - - - diff --git a/org.argeo.api.uuid/jni/.project b/org.argeo.api.uuid/jni/.project deleted file mode 100644 index 74fde08ce..000000000 --- a/org.argeo.api.uuid/jni/.project +++ /dev/null @@ -1,26 +0,0 @@ - - - Java_org_argeo_api_uuid - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/org.argeo.api.uuid/jni/.settings/language.settings.xml b/org.argeo.api.uuid/jni/.settings/language.settings.xml deleted file mode 100644 index 7e8a04bfc..000000000 --- a/org.argeo.api.uuid/jni/.settings/language.settings.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/org.argeo.api.uuid/jni/.settings/org.eclipse.cdt.core.prefs b/org.argeo.api.uuid/jni/.settings/org.eclipse.cdt.core.prefs deleted file mode 100644 index c8ec5df2d..000000000 --- a/org.argeo.api.uuid/jni/.settings/org.eclipse.cdt.core.prefs +++ /dev/null @@ -1,6 +0,0 @@ -doxygen/doxygen_new_line_after_brief=true -doxygen/doxygen_use_brief_tag=false -doxygen/doxygen_use_javadoc_tags=true -doxygen/doxygen_use_pre_tag=false -doxygen/doxygen_use_structural_commands=false -eclipse.preferences.version=1 diff --git a/org.argeo.api.uuid/jni/Makefile b/org.argeo.api.uuid/jni/Makefile deleted file mode 100644 index df673b532..000000000 --- a/org.argeo.api.uuid/jni/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -JNIDIRS = org_argeo_api_uuid_libuuid - -.PHONY: clean all jni - -all: jni - -jni: - $(foreach dir, $(JNIDIRS), $(MAKE) -C $(dir);) - -clean: - $(foreach dir, $(JNIDIRS), $(MAKE) -C $(dir) clean;) - -#ide: $(META_INF_DIR)/$(ARCH)/$(TARGET_EXEC) - -#$(META_INF_DIR)/$(ARCH)/$(TARGET_EXEC): $(BUILD_DIR)/$(TARGET_EXEC) -# mkdir -p $(dir $@) -# cp $(BUILD_DIR)/$(TARGET_EXEC) $(dir $@) - - -%: - @echo Making '$@' $(if $^,from '$^') - @echo 'OBJ=$(OBJ)' - @echo 'DEP=$(DEP)' diff --git a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/.gitignore b/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/.gitignore deleted file mode 100644 index 84c048a73..000000000 --- a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build/ diff --git a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/Makefile b/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/Makefile deleted file mode 100644 index 492f59f8c..000000000 --- a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -NATIVE_PACKAGE := org_argeo_api_uuid_libuuid - -include ../../../sdk.mk -include $(SDK_SRC_BASE)/sdk/jni.mk - diff --git a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.c b/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.c deleted file mode 100644 index 71c265671..000000000 --- a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include "org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h" - -JNIEXPORT void JNICALL Java_org_argeo_api_uuid_libuuid_DirectLibuuidFactory_timeUUID( - JNIEnv *env, jobject, jobject uuidBuf) { - uuid_generate_time((*env)->GetDirectBufferAddress(env, uuidBuf)); -} diff --git a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h b/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h deleted file mode 100644 index 5f18bf7f1..000000000 --- a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_DirectLibuuidFactory.h +++ /dev/null @@ -1,21 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class org_argeo_api_uuid_libuuid_DirectLibuuidFactory */ - -#ifndef _Included_org_argeo_api_uuid_libuuid_DirectLibuuidFactory -#define _Included_org_argeo_api_uuid_libuuid_DirectLibuuidFactory -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_argeo_api_uuid_libuuid_DirectLibuuidFactory - * Method: timeUUID - * Signature: (Ljava/nio/ByteBuffer;)V - */ -JNIEXPORT void JNICALL Java_org_argeo_api_uuid_libuuid_DirectLibuuidFactory_timeUUID - (JNIEnv *, jobject, jobject); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.c b/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.c deleted file mode 100644 index cff3cc581..000000000 --- a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include "org_argeo_api_uuid_libuuid_LibuuidFactory.h" - -/* - * UTILITIES - */ - -static inline jobject fromBytes(JNIEnv *env, uuid_t out) { - jlong msb = 0; - jlong lsb = 0; - - for (int i = 0; i < 8; i++) - msb = (msb << 8) | (out[i] & 0xff); - for (int i = 8; i < 16; i++) - lsb = (lsb << 8) | (out[i] & 0xff); - - jclass uuidClass = (*env)->FindClass(env, "java/util/UUID"); - jmethodID uuidConstructor = (*env)->GetMethodID(env, uuidClass, "", - "(JJ)V"); - - jobject jUUID = (*env)->AllocObject(env, uuidClass); - (*env)->CallVoidMethod(env, jUUID, uuidConstructor, msb, lsb); - - return jUUID; -} - -static inline void toBytes(JNIEnv *env, jobject jUUID, uuid_t result) { - - jclass uuidClass = (*env)->FindClass(env, "java/util/UUID"); - jmethodID getMostSignificantBits = (*env)->GetMethodID(env, uuidClass, - "getMostSignificantBits", "()J"); - jmethodID getLeastSignificantBits = (*env)->GetMethodID(env, uuidClass, - "getLeastSignificantBits", "()J"); - - jlong msb = (*env)->CallLongMethod(env, jUUID, getMostSignificantBits); - jlong lsb = (*env)->CallLongMethod(env, jUUID, getLeastSignificantBits); - - for (int i = 0; i < 8; i++) - result[i] = (unsigned char) ((msb >> ((7 - i) * 8)) & 0xff); - for (int i = 8; i < 16; i++) - result[i] = (unsigned char) ((lsb >> ((15 - i) * 8)) & 0xff); -} - -/* - * JNI IMPLEMENTATION - */ - -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_timeUUID( - JNIEnv *env, jobject) { - uuid_t out; - - uuid_generate_time(out); - return fromBytes(env, out); -} - -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv5( - JNIEnv *env, jobject, jobject namespaceUuid, jbyteArray name) { - uuid_t ns; - uuid_t out; - - toBytes(env, namespaceUuid, ns); - jsize length = (*env)->GetArrayLength(env, name); - jbyte *bytes = (*env)->GetByteArrayElements(env, name, 0); - - uuid_generate_sha1(out, ns, bytes, length); - return fromBytes(env, out); -} - -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv3( - JNIEnv *env, jobject, jobject namespaceUuid, jbyteArray name) { - uuid_t ns; - uuid_t out; - - toBytes(env, namespaceUuid, ns); - jsize length = (*env)->GetArrayLength(env, name); - jbyte *bytes = (*env)->GetByteArrayElements(env, name, 0); - - uuid_generate_md5(out, ns, bytes, length); - return fromBytes(env, out); -} - -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_randomUUIDStrong( - JNIEnv *env, jobject) { - uuid_t out; - - uuid_generate_random(out); - return fromBytes(env, out); -} diff --git a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.h b/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.h deleted file mode 100644 index ad0ac5e76..000000000 --- a/org.argeo.api.uuid/jni/org_argeo_api_uuid_libuuid/org_argeo_api_uuid_libuuid_LibuuidFactory.h +++ /dev/null @@ -1,45 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class org_argeo_api_uuid_libuuid_LibuuidFactory */ - -#ifndef _Included_org_argeo_api_uuid_libuuid_LibuuidFactory -#define _Included_org_argeo_api_uuid_libuuid_LibuuidFactory -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_argeo_api_uuid_libuuid_LibuuidFactory - * Method: timeUUID - * Signature: ()Ljava/util/UUID; - */ -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_timeUUID - (JNIEnv *, jobject); - -/* - * Class: org_argeo_api_uuid_libuuid_LibuuidFactory - * Method: nameUUIDv5 - * Signature: (Ljava/util/UUID;[B)Ljava/util/UUID; - */ -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv5 - (JNIEnv *, jobject, jobject, jbyteArray); - -/* - * Class: org_argeo_api_uuid_libuuid_LibuuidFactory - * Method: nameUUIDv3 - * Signature: (Ljava/util/UUID;[B)Ljava/util/UUID; - */ -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_nameUUIDv3 - (JNIEnv *, jobject, jobject, jbyteArray); - -/* - * Class: org_argeo_api_uuid_libuuid_LibuuidFactory - * Method: randomUUIDStrong - * Signature: ()Ljava/util/UUID; - */ -JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_libuuid_LibuuidFactory_randomUUIDStrong - (JNIEnv *, jobject); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/sdk.mk.old b/sdk.mk.old new file mode 100644 index 000000000..d9e68e9d6 --- /dev/null +++ b/sdk.mk.old @@ -0,0 +1,5 @@ +SDK_SRC_BASE := /home/mbaudier/dev/git/unstable/argeo-commons +SDK_BUILD_BASE := /home/mbaudier/dev/git/unstable/argeo-commons/output + +include $(SDK_SRC_BASE)/branch.properties +include $(SDK_SRC_BASE)/sdk/includes.mk diff --git a/sdk/jni.mk b/sdk/jni.mk deleted file mode 100644 index 448ad8f2b..000000000 --- a/sdk/jni.mk +++ /dev/null @@ -1,71 +0,0 @@ -TARGET_EXEC := libJava_$(NATIVE_PACKAGE).so - -LDFLAGS = -shared -fPIC -Wl,-soname,$(TARGET_EXEC).$(MAJOR).$(MINOR) -luuid -CFLAGS = -O3 -fPIC - -SRC_DIRS := . -%: - @echo Making '$@' $(if $^,from '$^') -# @echo 'MAJOR=$(MAJOR)' -# @echo 'MINOR=$(MINOR)' - @echo 'SRC_DIRS=$(SRC_DIRS)' - @echo 'BUILD_DIR=$(BUILD_DIR)' - - -# -# Generic Argeo -# -BUILD_DIR := $(SDK_BUILD_BASE)/$(NATIVE_PACKAGE) -#BUILD_DIR := ./build -#META_INF_DIR := ./../META-INF -#ARCH := $(shell uname -p) - -# Every folder in ./src will need to be passed to GCC so that it can find header files -INC_DIRS := $(shell find $(SRC_DIRS) -type d) /usr/lib/jvm/java/include /usr/lib/jvm/java/include/linux /usr/include/uuid - - -.PHONY: clean all ide -all: $(SDK_BUILD_BASE)/$(TARGET_EXEC) - -# Find all the C and C++ files we want to compile -# Note the single quotes around the * expressions. Make will incorrectly expand these otherwise. -SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s') - -# String substitution for every C/C++ file. -# As an example, hello.cpp turns into ./build/hello.cpp.o -OBJS := $(SRCS:%=$(BUILD_DIR)/%.o) - -# String substitution (suffix version without %). -# As an example, ./build/hello.cpp.o turns into ./build/hello.cpp.d -DEPS := $(OBJS:.o=.d) - -# Add a prefix to INC_DIRS. So moduleA would become -ImoduleA. GCC understands this -I flag -INC_FLAGS := $(addprefix -I,$(INC_DIRS)) - -# The -MMD and -MP flags together generate Makefiles for us! -# These files will have .d instead of .o as the output. -CPPFLAGS := $(INC_FLAGS) -MMD -MP - -# The final build step. -$(SDK_BUILD_BASE)/$(TARGET_EXEC): $(OBJS) - $(CC) $(OBJS) -o $@ $(LDFLAGS) - -# Build step for C source -$(BUILD_DIR)/%.c.o: %.c - mkdir -p $(dir $@) - $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ - -# Build step for C++ source -$(BUILD_DIR)/%.cpp.o: %.cpp - mkdir -p $(dir $@) - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ - -clean: - rm -r $(BUILD_DIR) $(SDK_BUILD_BASE)/$(TARGET_EXEC) - -# Include the .d makefiles. The - at the front suppresses the errors of missing -# Makefiles. Initially, all the .d files will be missing, and we don't want those -# errors to show up. --include $(DEPS) - -# MAKEFILE_DIR := $(dir $(firstword $(MAKEFILE_LIST)))