Refactor library loading logic and add IntelliJ run configurations
This commit is contained in:
parent
025e6633be
commit
70d3d94d65
20
.idea/runConfigurations/Build.xml
generated
Normal file
20
.idea/runConfigurations/Build.xml
generated
Normal file
@ -0,0 +1,20 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Build" type="CargoCommandRunConfiguration" factoryName="Cargo Command" nameIsGenerated="true">
|
||||
<option name="buildProfileId" value="Custom:dev-opt" />
|
||||
<option name="command" value="build" />
|
||||
<option name="workingDirectory" value="file://$PROJECT_DIR$" />
|
||||
<envs />
|
||||
<option name="emulateTerminal" value="true" />
|
||||
<option name="channel" value="DEFAULT" />
|
||||
<option name="requiredFeatures" value="true" />
|
||||
<option name="allFeatures" value="false" />
|
||||
<option name="withSudo" value="false" />
|
||||
<option name="buildTarget" value="REMOTE" />
|
||||
<option name="backtrace" value="SHORT" />
|
||||
<option name="isRedirectInput" value="false" />
|
||||
<option name="redirectInputPath" value="" />
|
||||
<method v="2">
|
||||
<option name="CARGO.BUILD_TASK_PROVIDER" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
||||
20
.idea/runConfigurations/Run_roast.xml
generated
Normal file
20
.idea/runConfigurations/Run_roast.xml
generated
Normal file
@ -0,0 +1,20 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Run roast" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
|
||||
<option name="buildProfileId" value="Custom:dev-opt" />
|
||||
<option name="command" value="run --bin roast" />
|
||||
<option name="workingDirectory" value="file://$PROJECT_DIR$" />
|
||||
<envs />
|
||||
<option name="emulateTerminal" value="true" />
|
||||
<option name="channel" value="DEFAULT" />
|
||||
<option name="requiredFeatures" value="true" />
|
||||
<option name="allFeatures" value="false" />
|
||||
<option name="withSudo" value="false" />
|
||||
<option name="buildTarget" value="REMOTE" />
|
||||
<option name="backtrace" value="SHORT" />
|
||||
<option name="isRedirectInput" value="false" />
|
||||
<option name="redirectInputPath" value="" />
|
||||
<method v="2">
|
||||
<option name="RunConfigurationTask" enabled="false" run_configuration_name="Build" run_configuration_type="CargoCommandRunConfiguration" run_configuration_target="RsBuildProfile:Custom:dev-opt" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
||||
@ -4,6 +4,7 @@ use log::{LevelFilter, error};
|
||||
use roast_vm_core::error::VmError;
|
||||
use roast_vm_core::stack_used;
|
||||
use roast_vm_core::vm::Vm;
|
||||
use std::path::PathBuf;
|
||||
use std::time::Instant;
|
||||
|
||||
fn main() {
|
||||
@ -25,9 +26,7 @@ fn run() {
|
||||
// .init();
|
||||
stack_used();
|
||||
let mut vm = Vm::new();
|
||||
vm.load_native_library("roast_vm.dll", load("roast_vm.dll").into());
|
||||
vm.load_native_library("jvm.dll", load("jvm.dll").into());
|
||||
vm.load_native_library("java.dll", load("java.dll").into());
|
||||
fetch_libs(&vm);
|
||||
let start = Instant::now();
|
||||
match vm.run("org/example/Main") {
|
||||
Ok(_) => {
|
||||
@ -69,12 +68,62 @@ fn run() {
|
||||
}
|
||||
}
|
||||
|
||||
fn load(filename: &str) -> Library {
|
||||
#[cfg(debug_assertions)]
|
||||
fn lib_folder() -> PathBuf {
|
||||
let exe_path = std::env::current_exe().expect("get exe path");
|
||||
let dll_path = exe_path.parent().unwrap().join(filename);
|
||||
exe_path
|
||||
.parent()
|
||||
.unwrap()
|
||||
.parent()
|
||||
.unwrap()
|
||||
.parent()
|
||||
.unwrap()
|
||||
.join("lib")
|
||||
}
|
||||
|
||||
let leeb = unsafe { libloading::os::windows::Library::new(&dll_path) }.expect("load dll");
|
||||
#[cfg(not(debug_assertions))]
|
||||
fn lib_folder() -> PathBuf {
|
||||
let exe_path = std::env::current_exe().expect("get exe path");
|
||||
exe_path.parent().unwrap().join("lib")
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn os_lib_name(name: &str) -> String {
|
||||
format!("{name}.dll")
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
fn os_lib_name(name: &str) -> String {
|
||||
format!("lib{name}.so")
|
||||
}
|
||||
|
||||
fn fetch_libs(mut vm: &Vm) {
|
||||
let exe_path = std::env::current_exe().expect("get exe path");
|
||||
let roast_name = os_lib_name("roast_vm");
|
||||
let roast_path = exe_path.parent().unwrap().join(roast_name.clone());
|
||||
let jvm_name = os_lib_name("jvm");
|
||||
let jvm_path = lib_folder().join(jvm_name.clone());
|
||||
let java_name = os_lib_name("java");
|
||||
let java_path = lib_folder().join(java_name.clone());
|
||||
|
||||
println!(
|
||||
"Loading library: {} from path: {:?}",
|
||||
roast_name, roast_path
|
||||
);
|
||||
vm.load_native_library(&roast_name, load(roast_path).into());
|
||||
println!("Loading library: {} from path: {:?}", jvm_name, jvm_path);
|
||||
vm.load_native_library(&jvm_name, load(jvm_path).into());
|
||||
println!("Loading library: {} from path: {:?}", java_name, java_path);
|
||||
vm.load_native_library(&java_name, load(java_path).into());
|
||||
}
|
||||
|
||||
fn load(path: PathBuf) -> Library {
|
||||
let leeb = unsafe { Library::new(&path) }.expect("load dll");
|
||||
Library::from(leeb)
|
||||
}
|
||||
|
||||
fn linux_load(path: PathBuf) -> Library {
|
||||
let leeb = unsafe { Library::new(&path) }.expect("load dll");
|
||||
Library::from(leeb)
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user