util: Automatically load the java .so in the gem5 ops wrapper.
authorGabe Black <gabe.black@gmail.com>
Fri, 23 Oct 2020 03:00:57 +0000 (20:00 -0700)
committerGabe Black <gabe.black@gmail.com>
Fri, 4 Dec 2020 22:57:00 +0000 (22:57 +0000)
The java wrapper which provides access to the gem5 ops is implemented
using JNI in a .so file which needs to be loaded before the class can be
used. Rather than expecting the caller to do that, we can use a static
block in the class definition. We know that will be called at the right
time, and it's one less detail (arguably an implementation detail) that
the caller won't have to worry about.

Change-Id: I2b4b18ebb12030ea6f4e6463c6cd512afed74cfd
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28177
Reviewed-by: Gabe Black <gabe.black@gmail.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
util/m5/README.md
util/m5/src/java/gem5/Ops.java

index 9a350e2f37ca614f46d4fe4cd8607c1f16d4e040..691347816e20af5d156364c97889863c1d0ab8f3 100644 (file)
@@ -341,14 +341,9 @@ library only if that trigger mechanism is supported for that ABI.
 
 # Java jar
 
-To use the gem5 java jar, you will need to load the corresponding .so.
-
-```shell
-System.loadLibrary("gem5Ops");
-```
-
 In your java source, import the gem5Op class which will have methods for
-calling each of the gem5 operations.
+calling each of the gem5 operations. The .so library will be loaded
+automatically.
 
 ```shell
 import gem5.Ops
index fea5aaddd64f82e4065cd71f8f00fe3402a2bab3..cc92505dda5754c775da1c4f73d41fd88524b376 100644 (file)
@@ -42,6 +42,10 @@ package gem5;
  */
 
 public class Ops {
+    static {
+        System.loadLibrary("gem5Ops");
+    }
+
     public native void arm(long address);
     public native void quiesce();
     public native void quiesce_ns(long ns);