This commit is contained in:
nora 2023-01-09 11:01:06 +01:00
parent 59a7ad0af9
commit b083ef958d
4 changed files with 39 additions and 2 deletions

1
.gitignore vendored
View file

@ -2,3 +2,4 @@ minmax-java/build
minmax-java/.gradle minmax-java/.gradle
.idea .idea
target target
*.so

23
README.md Normal file
View file

@ -0,0 +1,23 @@
# Minmax in Rust with JNI
## How to build and run
### Prerequisites
- Gradle
- Rust toolchain
### Compile Rust code
`cargo build`
### Assemble shared library
Copy the shared library in `target/debug/librs_wrapper.so` (or a `.dll` on windows) to a known location like the working directory or the system wide library directory.
### Build the jar
Use `./gradlew jar` or whatever you like I don't know.
### Run the program
Maybe it works now. If you get a link error you might need to set the `LD_LIBRARY_PATH` env var to the path of the shared library (on linux). Or you have to copy it to the systems library directory. Or something else. But it should work.

View file

@ -11,6 +11,12 @@ java {
} }
} }
jar {
manifest {
attributes 'Main-Class': 'ch.bbw.m411.connect4.Connect4ArenaMain'
}
}
repositories { repositories {
mavenCentral() mavenCentral()
} }

View file

@ -3,6 +3,13 @@ package ch.bbw.m411.connect4;
public class RustPlayer extends Connect4ArenaMain.DefaultPlayer { public class RustPlayer extends Connect4ArenaMain.DefaultPlayer {
private static native int rustPlay(byte player, byte[] board); private static native int rustPlay(byte player, byte[] board);
static {
// This actually loads the shared object that we'll be creating.
// The actual location of the .so or .dll may differ based on your
// platform.
System.loadLibrary("rs_wrapper");
}
@Override @Override
protected int play() { protected int play() {
byte player = switch (this.myColor) { byte player = switch (this.myColor) {