[DEV] add a basic wrapper for jvm
This commit is contained in:
commit
02fd07ac3f
12
jvm-basics/debug.cpp
Normal file
12
jvm-basics/debug.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2015, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <jvm-basics/debug.h>
|
||||||
|
|
||||||
|
int32_t jvm_basics::getLogId() {
|
||||||
|
static int32_t g_val = etk::log::registerInstance("jvm-basics");
|
||||||
|
return g_val;
|
||||||
|
}
|
42
jvm-basics/debug.h
Normal file
42
jvm-basics/debug.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2015, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __JVM_BASICS_DEBUG_H__
|
||||||
|
#define __JVM_BASICS_DEBUG_H__
|
||||||
|
|
||||||
|
#include <etk/log.h>
|
||||||
|
|
||||||
|
namespace jvm_basics {
|
||||||
|
int32_t getLogId();
|
||||||
|
}
|
||||||
|
#define JVMB_BASE(info,data) TK_LOG_BASE(jvm_basics::getLogId(),info,data)
|
||||||
|
|
||||||
|
#define JVMB_PRINT(data) JVMB_BASE(-1, data)
|
||||||
|
#define JVMB_CRITICAL(data) JVMB_BASE(1, data)
|
||||||
|
#define JVMB_ERROR(data) JVMB_BASE(2, data)
|
||||||
|
#define JVMB_WARNING(data) JVMB_BASE(3, data)
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define JVMB_INFO(data) JVMB_BASE(4, data)
|
||||||
|
#define JVMB_DEBUG(data) JVMB_BASE(5, data)
|
||||||
|
#define JVMB_VERBOSE(data) JVMB_BASE(6, data)
|
||||||
|
#define JVMB_TODO(data) JVMB_BASE(4, "TODO : " << data)
|
||||||
|
#else
|
||||||
|
#define JVMB_INFO(data) do { } while(false)
|
||||||
|
#define JVMB_DEBUG(data) do { } while(false)
|
||||||
|
#define JVMB_VERBOSE(data) do { } while(false)
|
||||||
|
#define JVMB_TODO(data) do { } while(false)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define JVMB_ASSERT(cond,data) \
|
||||||
|
do { \
|
||||||
|
if (!(cond)) { \
|
||||||
|
JVMB_CRITICAL(data); \
|
||||||
|
assert(!#cond); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
49
jvm-basics/jvm-basics.cpp
Normal file
49
jvm-basics/jvm-basics.cpp
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2015, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <jni.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <mutex>
|
||||||
|
#include <jvm-basics/debug.h>
|
||||||
|
#include <jvm-basics/jvm-basics.h>
|
||||||
|
|
||||||
|
// jni doc : /usr/lib/jvm/java-1.6.0-openjdk/include
|
||||||
|
|
||||||
|
// Global JVM (can only have 1)
|
||||||
|
JavaVM*& jvm_basics::getJavaVM() {
|
||||||
|
static JavaVM* g_JavaVM=nullptr; // global acces on the unique JVM !!!
|
||||||
|
return g_JavaVM;
|
||||||
|
}
|
||||||
|
std::mutex& jvm_basics::getMutexJavaVM() {
|
||||||
|
static std::mutex g_jvmMutex;
|
||||||
|
return g_jvmMutex;
|
||||||
|
}
|
||||||
|
|
||||||
|
void jvm_basics::checkExceptionJavaVM(JNIEnv* _env) {
|
||||||
|
if (_env->ExceptionOccurred()) {
|
||||||
|
JVMB_ERROR("C->java : EXEPTION ...");
|
||||||
|
_env->ExceptionDescribe();
|
||||||
|
_env->ExceptionClear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
// JNI onLoad
|
||||||
|
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* _jvm, void* _reserved) {
|
||||||
|
// get the java virtual machine handle ...
|
||||||
|
std::unique_lock<std::mutex> lock(jvm_basics::getMutexJavaVM());
|
||||||
|
jvm_basics::getJavaVM() = _jvm;
|
||||||
|
JVMB_INFO("JNI-> load the jvm ..." );
|
||||||
|
return JNI_VERSION_1_6;
|
||||||
|
}
|
||||||
|
// JNI onUnLoad
|
||||||
|
JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* _vm, void *_reserved) {
|
||||||
|
std::unique_lock<std::mutex> lock(jvm_basics::getMutexJavaVM());
|
||||||
|
jvm_basics::getJavaVM() = nullptr;
|
||||||
|
JVMB_INFO("JNI-> Un-load the jvm ..." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
16
jvm-basics/jvm-basics.h
Normal file
16
jvm-basics/jvm-basics.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2015, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __JVM_BASICS_H__
|
||||||
|
#define __JVM_BASICS_H__
|
||||||
|
|
||||||
|
namespace jvm_basics {
|
||||||
|
JavaVM*& getJavaVM();
|
||||||
|
std::mutex& getMutexJavaVM();
|
||||||
|
void checkExceptionJavaVM(JNIEnv* _env);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
23
lutin_jvm-basics.py
Normal file
23
lutin_jvm-basics.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import lutin.module as module
|
||||||
|
import lutin.tools as tools
|
||||||
|
|
||||||
|
def get_desc():
|
||||||
|
return "jvm basis call for all element who have jvm access"
|
||||||
|
|
||||||
|
def create(target):
|
||||||
|
# module name is 'edn' and type binary.
|
||||||
|
myModule = module.Module(__file__, 'jvm-basics', 'LIBRARY')
|
||||||
|
myModule.add_module_depend(['etk'])
|
||||||
|
# add extra compilation flags :
|
||||||
|
myModule.add_extra_compile_flags()
|
||||||
|
# add the file to compile:
|
||||||
|
myModule.add_src_file([
|
||||||
|
'jvm-basics/debug.cpp',
|
||||||
|
'jvm-basics/jvm-basics.cpp'
|
||||||
|
])
|
||||||
|
myModule.compile_version_XX(2011)
|
||||||
|
myModule.add_export_path(tools.get_current_path(__file__))
|
||||||
|
return myModule
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user