mirror of
https://github.com/tribufu/tribufu-java
synced 2026-06-01 09:42:37 +00:00
Make JNI Bindings in Rust
This commit is contained in:
parent
151bdebf43
commit
7583e38f38
11 changed files with 67 additions and 134 deletions
2
.cargo/config.toml
Normal file
2
.cargo/config.toml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
[build]
|
||||||
|
target-dir = "Binaries"
|
||||||
|
|
@ -4,9 +4,6 @@
|
||||||
|
|
||||||
if ($IsWindows)
|
if ($IsWindows)
|
||||||
{
|
{
|
||||||
echo "Generating Visual Studio project..."
|
|
||||||
|
|
||||||
& "./Vendor/Premake/Windows/premake5.exe" "vs2019"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Mac
|
# Mac
|
||||||
|
|
@ -15,11 +12,6 @@ elseif ($IsMacOS)
|
||||||
{
|
{
|
||||||
sudo chmod +x ./gradlew
|
sudo chmod +x ./gradlew
|
||||||
sudo chmod +x ./Scripts/Package.ps1
|
sudo chmod +x ./Scripts/Package.ps1
|
||||||
|
|
||||||
echo "Generating XCode project..."
|
|
||||||
|
|
||||||
sudo chmod +x ./Vendor/Premake/Mac/premake5
|
|
||||||
& "./Vendor/Premake/Mac/premake5" "xcode4"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Linux
|
# Linux
|
||||||
|
|
@ -28,9 +20,4 @@ elseif ($IsLinux)
|
||||||
{
|
{
|
||||||
sudo chmod +x ./gradlew
|
sudo chmod +x ./gradlew
|
||||||
sudo chmod +x ./Scripts/Package.ps1
|
sudo chmod +x ./Scripts/Package.ps1
|
||||||
|
|
||||||
echo "Generating GMake project..."
|
|
||||||
|
|
||||||
sudo chmod +x ./Vendor/Premake/Linux/premake5
|
|
||||||
& "./Vendor/Premake/Linux/premake5" "gmake2"
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,17 +7,10 @@ sudo chmod +x ./Scripts/Package.ps1
|
||||||
|
|
||||||
if [ "$(expr substr $(uname -s) 1 5)" = "Linux" ]
|
if [ "$(expr substr $(uname -s) 1 5)" = "Linux" ]
|
||||||
then
|
then
|
||||||
echo "Generating GMake project..."
|
|
||||||
|
|
||||||
sudo chmod +x ./Vendor/Premake/Linux/premake5
|
|
||||||
./Vendor/Premake/Linux/premake5 gmake2
|
|
||||||
|
|
||||||
# Mac
|
# Mac
|
||||||
|
|
||||||
elif [ "$(uname)" = "Darwin" ]
|
elif [ "$(uname)" = "Darwin" ]
|
||||||
then
|
then
|
||||||
echo "Generating XCode project..."
|
|
||||||
|
|
||||||
sudo chmod +x ./Vendor/Premake/Mac/premake5
|
|
||||||
./Vendor/Premake/Mac/premake5 xcode4
|
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
18
Cargo.toml
Normal file
18
Cargo.toml
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
[package]
|
||||||
|
name = "TribuFu-jvm"
|
||||||
|
version = "0.0.1"
|
||||||
|
description = "Jvm bindings to TribuFu SDK"
|
||||||
|
repository = "https://github.com/TribuFu/SDK"
|
||||||
|
authors = ["TribuFu <contact@tribufu.com>"]
|
||||||
|
license = "Apache-2.0"
|
||||||
|
edition = "2018"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name="TribuFu_jvm"
|
||||||
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
path = "Source/lib.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
TribuFu = { path = "../DevKit.Rs", package = "TribuFu" }
|
||||||
|
jni = "0.19.0"
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
// Copyright (c) TribuFu. All Rights Reserved
|
|
||||||
|
|
||||||
#include <jni.h>
|
|
||||||
#include "TribuFu.h"
|
|
||||||
#include "Library.h"
|
|
||||||
|
|
||||||
JNIEXPORT jstring JNICALL Java_tribufu_TribuFu_Hello(JNIEnv *env, jobject obj, jstring str)
|
|
||||||
{
|
|
||||||
char *result = Hello("C");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
// Copyright (c) TribuFu. All Rights Reserved
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <jni.h>
|
|
||||||
#include "TribuFu.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: tribufu_TribuFu
|
|
||||||
* Method: Hello
|
|
||||||
* Signature: (Ljava/lang/String;)Ljava/lang/String;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jstring JNICALL Java_tribufu_TribuFu_Hello(JNIEnv *, jobject, jstring);
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
// Copyright (c) TribuFu. All Rights Reserved
|
|
||||||
|
|
||||||
package tribufu;
|
|
||||||
|
|
||||||
public class TribuFu {
|
|
||||||
/**
|
|
||||||
* A native method that is implemented by the 'TribuFu' native library.
|
|
||||||
*/
|
|
||||||
public native String Hello(String input);
|
|
||||||
|
|
||||||
// Used to load the 'TribuFu' library on application startup.
|
|
||||||
static {
|
|
||||||
System.loadLibrary("TribuFu_jvm");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
||||||
project "TribuFu_jvm"
|
|
||||||
location "."
|
|
||||||
kind "SharedLib"
|
|
||||||
language "C"
|
|
||||||
|
|
||||||
targetdir ("./Binaries/%{cfg.buildcfg}")
|
|
||||||
objdir ("./Intermediate/")
|
|
||||||
|
|
||||||
files
|
|
||||||
{
|
|
||||||
"./Source/**.h",
|
|
||||||
"./Source/**.c",
|
|
||||||
}
|
|
||||||
|
|
||||||
includedirs
|
|
||||||
{
|
|
||||||
"../Vendor/TribuFu",
|
|
||||||
"D:/Program Files/AdoptOpenJDK/jdk-11.0.10.9-hotspot/include",
|
|
||||||
"D:/Program Files/AdoptOpenJDK/jdk-11.0.10.9-hotspot/include/win32"
|
|
||||||
}
|
|
||||||
|
|
||||||
filter "system:windows"
|
|
||||||
staticruntime "Off"
|
|
||||||
systemversion "latest"
|
|
||||||
|
|
||||||
links
|
|
||||||
{
|
|
||||||
"TribuFu.lib"
|
|
||||||
}
|
|
||||||
|
|
||||||
libdirs
|
|
||||||
{
|
|
||||||
"../Vendor/TribuFu/Windows"
|
|
||||||
}
|
|
||||||
|
|
||||||
filter { "system:windows", "configurations:debug" }
|
|
||||||
runtime "Debug"
|
|
||||||
symbols "on"
|
|
||||||
|
|
||||||
filter { "system:windows", "configurations:release" }
|
|
||||||
runtime "Release"
|
|
||||||
optimize "on"
|
|
||||||
|
|
||||||
filter "system:linux"
|
|
||||||
links
|
|
||||||
{
|
|
||||||
"TribuFu"
|
|
||||||
}
|
|
||||||
|
|
||||||
libdirs
|
|
||||||
{
|
|
||||||
"../Vendor/TribuFu/Linux"
|
|
||||||
}
|
|
||||||
|
|
||||||
filter "system:darwin"
|
|
||||||
links
|
|
||||||
{
|
|
||||||
"TribuFu"
|
|
||||||
}
|
|
||||||
|
|
||||||
libdirs
|
|
||||||
{
|
|
||||||
"../Vendor/TribuFu/Mac"
|
|
||||||
}
|
|
||||||
|
|
@ -4,5 +4,11 @@
|
||||||
./gradlew jar
|
./gradlew jar
|
||||||
|
|
||||||
New-Item -Path "./Release" -ItemType Directory -Force
|
New-Item -Path "./Release" -ItemType Directory -Force
|
||||||
|
New-Item -Path "./Release/Windows" -ItemType Directory -Force
|
||||||
|
New-Item -Path "./Release/Mac" -ItemType Directory -Force
|
||||||
|
New-Item -Path "./Release/Linux" -ItemType Directory -Force
|
||||||
|
New-Item -Path "./Release/Android" -ItemType Directory -Force
|
||||||
|
|
||||||
Copy-Item -Path "./lib/build/libs/lib-0.0.1.jar" -Destination "./Release/TribuFu.jar" -Recurse -Force
|
Copy-Item -Path "./lib/build/libs/lib-0.0.1.jar" -Destination "./Release/TribuFu.jar" -Recurse -Force
|
||||||
|
|
||||||
|
Copy-Item -Path "./Binaries/debug/TribuFu_jvm.dll" -Destination "./Release/Windows/TribuFu_jvm.dll" -Recurse -Force
|
||||||
|
|
|
||||||
41
Source/lib.rs
Normal file
41
Source/lib.rs
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Copyright (c) TribuFu. All Rights Reserved
|
||||||
|
|
||||||
|
//! Jvm bindings to TribuFu SDK.
|
||||||
|
|
||||||
|
#![allow(non_snake_case)]
|
||||||
|
#![allow(unused_variables)]
|
||||||
|
#![allow(unused_imports)]
|
||||||
|
|
||||||
|
#[cfg(not(any(
|
||||||
|
target_os = "windows",
|
||||||
|
target_os = "macos",
|
||||||
|
target_os = "linux",
|
||||||
|
target_os = "android",
|
||||||
|
)))]
|
||||||
|
compile_error!("INVALID_TARGET_PLATFORM");
|
||||||
|
|
||||||
|
use jni::objects::{JClass, JString};
|
||||||
|
use jni::sys::jstring;
|
||||||
|
use jni::JNIEnv;
|
||||||
|
use std::ffi::{CStr, CString};
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
// This is the class that owns our static method. It's not going to be used,
|
||||||
|
// but still must be present to match the expected signature of a static
|
||||||
|
// native method.
|
||||||
|
pub extern "system" fn Java_tribufu_TribuFu_Hello(
|
||||||
|
env: JNIEnv,
|
||||||
|
_: JClass,
|
||||||
|
j_input: JString,
|
||||||
|
) -> jstring {
|
||||||
|
// First, we have to get the string out of Java. Check out the `strings`
|
||||||
|
// module for more info on how this works.
|
||||||
|
let input = CString::from(unsafe { CStr::from_ptr(env.get_string(j_input).unwrap().as_ptr()) });
|
||||||
|
|
||||||
|
// Then we have to create a new Java string to return. Again, more info
|
||||||
|
// in the `strings` module.
|
||||||
|
let res = env.new_string(input.to_str().unwrap()).unwrap();
|
||||||
|
|
||||||
|
// Finally, extract the raw pointer to return.
|
||||||
|
return res.into_inner();
|
||||||
|
}
|
||||||
10
premake5.lua
10
premake5.lua
|
|
@ -1,10 +0,0 @@
|
||||||
workspace "DevKit.Jvm"
|
|
||||||
architecture "x64"
|
|
||||||
|
|
||||||
configurations
|
|
||||||
{
|
|
||||||
"debug",
|
|
||||||
"release"
|
|
||||||
}
|
|
||||||
|
|
||||||
include "Native"
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue