From 666b7904e67b721984c238ee9d0767bb4e01c274 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 22 Oct 2020 20:00:55 -0700 Subject: [PATCH] util: Reorganize the java wrapper for gem5 ops. Rather than use a top level package of jni which is generic, switch to a top level package of "gem5". With that prefix, call the actual class Ops, which is capitalized according to Java tradition and also unambiguous given its package name. Also move the java class definition and c JNI implementation into a java subdir to keep it all together. The java related output will now be in out/java for the same reason. Change-Id: Ia0468d2edbcffe87a62022898f867ae391adc94c Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28176 Reviewed-by: Gabe Black Maintainer: Gabe Black Tested-by: kokoro --- util/m5/README.md | 4 +- util/m5/src/SConscript | 17 +++--- .../{jni/gem5Op.java => java/gem5/Ops.java} | 4 +- util/m5/src/{jni_gem5Op.c => java/gem5/ops.c} | 52 +++++++++---------- 4 files changed, 39 insertions(+), 38 deletions(-) rename util/m5/src/{jni/gem5Op.java => java/gem5/Ops.java} (99%) rename util/m5/src/{jni_gem5Op.c => java/gem5/ops.c} (79%) diff --git a/util/m5/README.md b/util/m5/README.md index 00c0aeb14..9a350e2f3 100644 --- a/util/m5/README.md +++ b/util/m5/README.md @@ -344,14 +344,14 @@ library only if that trigger mechanism is supported for that ABI. To use the gem5 java jar, you will need to load the corresponding .so. ```shell -System.loadLibrary("gem5OpJni"); +System.loadLibrary("gem5Ops"); ``` In your java source, import the gem5Op class which will have methods for calling each of the gem5 operations. ```shell -import jni.gem5Op +import gem5.Ops ``` These methods will all use the magic instruction based trigger mechanism. diff --git a/util/m5/src/SConscript b/util/m5/src/SConscript index 395abb921..70c123a3a 100644 --- a/util/m5/src/SConscript +++ b/util/m5/src/SConscript @@ -37,7 +37,7 @@ m5 = 'm5.cc' m5_mmap = 'm5_mmap.c' usage = 'usage.cc' -jni = 'jni_gem5Op.c' +jni = 'java/gem5/ops.c' lua = 'lua_gem5Op.cc' all_call_types = list(env['CALL_TYPE'].values()) @@ -101,18 +101,19 @@ if env['HAVE_JAVA']: # that the javah tool exists. Java has dropped that tool in favor of a -h # option on javac which the Java builder doesn't know how to use. To get # around this, we set up our own builder which does the "right thing" here. - java_env.Command([ 'jni_gem5Op.h', 'out/gem5OpJni.jar' ], - 'jni/gem5Op.java', + java_env.Command([ Dir('java').File('gem5_Ops.h'), + Dir('out').Dir('java').File('gem5Ops.jar') ], + Dir('java').Dir('gem5').File('Ops.java'), MakeAction([ '${JAVAC} ${JAVACFLAGS} -d ${OUT} ' - '${SOURCES} -h ${CWD}', - '${JAR} cvf ${TARGETS[1]} ${JNI_DIR}/*.class' ], + '${SOURCES} -h ${JAVA_DIR}', + '${JAR} cvf ${TARGETS[1]} ${CLS_DIR}/*.class' ], 'JAVA'), - JNI_DIR=Dir('out').Dir('jni'), - OUT=Dir('out'), CWD=Dir('.')) + CLS_DIR=Dir('out').Dir('java').Dir('gem5'), + OUT=Dir('out').Dir('java'), JAVA_DIR=Dir('java')) # Set include paths to the C headers from the JDK which scons found for us. java_env.Append(CPPPATH='${JAVAINCLUDES}') - java_env.SharedLibrary('out/gem5OpJni', + java_env.SharedLibrary('out/java/gem5Ops', [ jni ] + m5op_shared + m5_mmap_shared) diff --git a/util/m5/src/jni/gem5Op.java b/util/m5/src/java/gem5/Ops.java similarity index 99% rename from util/m5/src/jni/gem5Op.java rename to util/m5/src/java/gem5/Ops.java index 968c4a24a..fea5aaddd 100644 --- a/util/m5/src/jni/gem5Op.java +++ b/util/m5/src/java/gem5/Ops.java @@ -35,13 +35,13 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package jni; +package gem5; /** * Java class to implement JNI for m5Ops */ -public class gem5Op { +public class Ops { public native void arm(long address); public native void quiesce(); public native void quiesce_ns(long ns); diff --git a/util/m5/src/jni_gem5Op.c b/util/m5/src/java/gem5/ops.c similarity index 79% rename from util/m5/src/jni_gem5Op.c rename to util/m5/src/java/gem5/ops.c index fe8d41d9b..c3f93289f 100644 --- a/util/m5/src/jni_gem5Op.c +++ b/util/m5/src/java/gem5/ops.c @@ -38,38 +38,38 @@ #include #include "gem5/m5ops.h" -#include "jni_gem5Op.h" +#include "java/gem5_Ops.h" /* * C library interface for gem5Op JNI */ JNIEXPORT void JNICALL -Java_jni_gem5Op_arm(JNIEnv *env, jobject obj, jlong j_address) +Java_gem5_Ops_arm(JNIEnv *env, jobject obj, jlong j_address) { m5_arm(j_address); } JNIEXPORT void JNICALL -Java_jni_gem5Op_quiesce(JNIEnv *env, jobject obj) +Java_gem5_Ops_quiesce(JNIEnv *env, jobject obj) { m5_quiesce(); } JNIEXPORT void JNICALL -Java_jni_gem5Op_quiesce_1ns(JNIEnv *env, jobject obj, jlong j_ns) +Java_gem5_Ops_quiesce_1ns(JNIEnv *env, jobject obj, jlong j_ns) { m5_quiesce_ns(j_ns); } JNIEXPORT void JNICALL -Java_jni_gem5Op_quiesce_1cycle(JNIEnv *env, jobject obj, jlong j_cycles) +Java_gem5_Ops_quiesce_1cycle(JNIEnv *env, jobject obj, jlong j_cycles) { m5_quiesce_cycle(j_cycles); } JNIEXPORT jlong JNICALL -Java_jni_gem5Op_quiesce_1time(JNIEnv *env, jobject obj) +Java_gem5_Ops_quiesce_1time(JNIEnv *env, jobject obj) { uint64_t time = m5_quiesce_time(); if (time & 0x8000000000000000ULL) @@ -78,7 +78,7 @@ Java_jni_gem5Op_quiesce_1time(JNIEnv *env, jobject obj) } JNIEXPORT jlong JNICALL -Java_jni_gem5Op_rpns(JNIEnv *env, jobject obj) +Java_gem5_Ops_rpns(JNIEnv *env, jobject obj) { uint64_t time = m5_rpns(); if (time & 0x8000000000000000ULL) @@ -87,25 +87,25 @@ Java_jni_gem5Op_rpns(JNIEnv *env, jobject obj) } JNIEXPORT void JNICALL -Java_jni_gem5Op_wake_1cpu(JNIEnv *env, jobject obj, jlong j_cpuid) +Java_gem5_Ops_wake_1cpu(JNIEnv *env, jobject obj, jlong j_cpuid) { m5_wake_cpu(j_cpuid); } JNIEXPORT void JNICALL -Java_jni_gem5Op_exit(JNIEnv *env, jobject obj, jlong j_ns_delay) +Java_gem5_Ops_exit(JNIEnv *env, jobject obj, jlong j_ns_delay) { m5_exit(j_ns_delay); } JNIEXPORT void JNICALL -Java_jni_gem5Op_fail(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_code) +Java_gem5_Ops_fail(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_code) { m5_fail(j_ns_delay, j_code); } JNIEXPORT jlong JNICALL -Java_jni_gem5Op_sum(JNIEnv *env, jobject obj, jlong a, jlong b, jlong c, +Java_gem5_Ops_sum(JNIEnv *env, jobject obj, jlong a, jlong b, jlong c, jlong d, jlong e, jlong f) { uint64_t result = m5_sum(a, b, c, d, e, f); @@ -115,7 +115,7 @@ Java_jni_gem5Op_sum(JNIEnv *env, jobject obj, jlong a, jlong b, jlong c, } JNIEXPORT jlong JNICALL -Java_jni_gem5Op_init_1param(JNIEnv *env, jobject obj, jlong j_key_str1, +Java_gem5_Ops_init_1param(JNIEnv *env, jobject obj, jlong j_key_str1, jlong j_key_str2) { uint64_t param = m5_init_param(j_key_str1, j_key_str2); @@ -125,35 +125,35 @@ Java_jni_gem5Op_init_1param(JNIEnv *env, jobject obj, jlong j_key_str1, } JNIEXPORT void JNICALL -Java_jni_gem5Op_checkpoint(JNIEnv *env, jobject obj, +Java_gem5_Ops_checkpoint(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_ns_period) { m5_checkpoint(j_ns_delay, j_ns_period); } JNIEXPORT void JNICALL -Java_jni_gem5Op_reset_1stats(JNIEnv *env, jobject obj, +Java_gem5_Ops_reset_1stats(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_ns_period) { m5_reset_stats(j_ns_delay, j_ns_period); } JNIEXPORT void JNICALL -Java_jni_gem5Op_dump_1stats(JNIEnv *env, jobject obj, +Java_gem5_Ops_dump_1stats(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_ns_period) { m5_dump_stats(j_ns_delay, j_ns_period); } JNIEXPORT void JNICALL -Java_jni_gem5Op_dump_1reset_1stats(JNIEnv *env, jobject obj, +Java_gem5_Ops_dump_1reset_1stats(JNIEnv *env, jobject obj, jlong j_ns_delay, jlong j_ns_period) { m5_dump_reset_stats(j_ns_delay, j_ns_period); } JNIEXPORT jlong JNICALL -Java_jni_gem5Op_read_1file(JNIEnv *env, jobject obj, +Java_gem5_Ops_read_1file(JNIEnv *env, jobject obj, jbyteArray j_buffer, jlong j_len, jlong j_offset) { jbyte *buffer = (*env)->GetByteArrayElements(env, j_buffer, 0); @@ -165,7 +165,7 @@ Java_jni_gem5Op_read_1file(JNIEnv *env, jobject obj, } JNIEXPORT jlong JNICALL -Java_jni_gem5Op_write_1file(JNIEnv *env, jobject obj, +Java_gem5_Ops_write_1file(JNIEnv *env, jobject obj, jbyteArray j_buffer, jlong j_len, jlong j_offset, jstring j_filename) { @@ -180,25 +180,25 @@ Java_jni_gem5Op_write_1file(JNIEnv *env, jobject obj, } JNIEXPORT void JNICALL -Java_jni_gem5Op_debug_1break(JNIEnv *env, jobject obj) +Java_gem5_Ops_debug_1break(JNIEnv *env, jobject obj) { m5_debug_break(); } JNIEXPORT void JNICALL -Java_jni_gem5Op_switch_1cpu (JNIEnv *env, jobject obj) +Java_gem5_Ops_switch_1cpu (JNIEnv *env, jobject obj) { m5_switch_cpu(); } JNIEXPORT void JNICALL -Java_jni_gem5Op_dist_1toggle_1sync(JNIEnv *env, jobject obj) +Java_gem5_Ops_dist_1toggle_1sync(JNIEnv *env, jobject obj) { m5_dist_toggle_sync(); } JNIEXPORT void JNICALL -Java_jni_gem5Op_add_symbol(JNIEnv *env, jobject obj, +Java_gem5_Ops_add_symbol(JNIEnv *env, jobject obj, jlong j_addr, jstring j_symbol) { const char *symbol = (*env)->GetStringUTFChars(env, j_symbol, NULL); @@ -209,26 +209,26 @@ Java_jni_gem5Op_add_symbol(JNIEnv *env, jobject obj, } JNIEXPORT void JNICALL -Java_jni_gem5Op_load_1symbol(JNIEnv *env, jobject obj) +Java_gem5_Ops_load_1symbol(JNIEnv *env, jobject obj) { m5_load_symbol(); } JNIEXPORT void JNICALL -Java_jni_gem5Op_panic(JNIEnv *env, jobject obj) +Java_gem5_Ops_panic(JNIEnv *env, jobject obj) { m5_panic(); } JNIEXPORT void JNICALL -Java_jni_gem5Op_work_1begin(JNIEnv *env, jobject obj, +Java_gem5_Ops_work_1begin(JNIEnv *env, jobject obj, jlong j_workid, jlong j_threadid) { m5_work_begin(j_workid, j_threadid); } JNIEXPORT void JNICALL -Java_jni_gem5Op_work_1end(JNIEnv *env, jobject obj, +Java_gem5_Ops_work_1end(JNIEnv *env, jobject obj, jlong j_workid, jlong j_threadid) { m5_work_end(j_workid, j_threadid); -- 2.30.2