Miscellaneous changes #266
2 changed files with 80 additions and 64 deletions
|
@ -7,6 +7,7 @@ edition = "2018"
|
||||||
keywords = ["lua", "luajit", "script"]
|
keywords = ["lua", "luajit", "script"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
repository = "https://github.com/aloucks/luajit2-sys"
|
repository = "https://github.com/aloucks/luajit2-sys"
|
||||||
|
links = "luajit"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
|
|
55
build.rs
55
build.rs
|
@ -1,12 +1,9 @@
|
||||||
use cc;
|
|
||||||
use fs_extra::dir;
|
use fs_extra::dir;
|
||||||
use fs_extra::dir::CopyOptions;
|
use fs_extra::dir::CopyOptions;
|
||||||
|
use std::env;
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
use std::{env, fs};
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let target = env::var("TARGET").unwrap();
|
|
||||||
|
|
||||||
let luajit_dir = format!("{}/luajit", env!("CARGO_MANIFEST_DIR"));
|
let luajit_dir = format!("{}/luajit", env!("CARGO_MANIFEST_DIR"));
|
||||||
let out_dir = env::var("OUT_DIR").unwrap();
|
let out_dir = env::var("OUT_DIR").unwrap();
|
||||||
let src_dir = format!("{}/luajit/src", out_dir);
|
let src_dir = format!("{}/luajit/src", out_dir);
|
||||||
|
@ -15,24 +12,44 @@ fn main() {
|
||||||
dbg!(&out_dir);
|
dbg!(&out_dir);
|
||||||
dbg!(&src_dir);
|
dbg!(&src_dir);
|
||||||
|
|
||||||
if cfg!(target_env = "msvc") {
|
// DEP_LUAJIT_INCLUDE
|
||||||
let lib_path = format!("{}/lua51.lib", &src_dir);
|
// DEB_LUAJIT_LIB_NAME
|
||||||
|
|
||||||
|
let lib_name = build_luajit(&luajit_dir, &out_dir, &src_dir);
|
||||||
|
|
||||||
|
println!("cargo:lib-name={}", lib_name);
|
||||||
|
println!("cargo:include={}", src_dir);
|
||||||
|
println!("cargo:rustc-link-search=native={}", src_dir);
|
||||||
|
println!("cargo:rustc-link-lib=static={}", lib_name);
|
||||||
|
|
||||||
|
// if cfg!(target_os = "macos") && cfg!(target_pointer_width = "64") {
|
||||||
|
// // RUSTFLAGS='-C link-args=-pagezero_size 10000 -image_base 100000000'
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_env = "msvc")]
|
||||||
|
fn build_luajit(luajit_dir: &str, out_dir: &str, src_dir: &str) -> &'static str {
|
||||||
|
const LIB_NAME: &'static str = "lua51";
|
||||||
|
let lib_path = format!("{}/{}.lib", &src_dir, LIB_NAME);
|
||||||
dbg!(&lib_path);
|
dbg!(&lib_path);
|
||||||
if !std::fs::metadata(&lib_path).is_ok() {
|
if !std::fs::metadata(&lib_path).is_ok() {
|
||||||
|
let target = env::var("TARGET").unwrap();
|
||||||
let cl_exe: cc::Tool =
|
let cl_exe: cc::Tool =
|
||||||
cc::windows_registry::find_tool(&target, "cl.exe").expect("cl.exe not found");
|
cc::windows_registry::find_tool(&target, "cl.exe").expect("cl.exe not found");
|
||||||
let msvcbuild_bat = format!("{}/msvcbuild.bat", &src_dir);
|
let msvcbuild_bat = format!("{}/msvcbuild.bat", &src_dir);
|
||||||
|
|
||||||
dbg!(&msvcbuild_bat);
|
dbg!(&msvcbuild_bat);
|
||||||
|
|
||||||
let mut copy_options = CopyOptions::new();
|
let mut copy_options = CopyOptions::new();
|
||||||
copy_options.overwrite = true;
|
copy_options.overwrite = true;
|
||||||
dir::copy(&luajit_dir, &out_dir, ©_options).unwrap();
|
dir::copy(&luajit_dir, &out_dir, ©_options)
|
||||||
|
.expect("failed to copy luajit source to out dir");
|
||||||
|
|
||||||
let mut buildcmd = Command::new(msvcbuild_bat);
|
let mut buildcmd = Command::new(msvcbuild_bat);
|
||||||
for (name, value) in cl_exe.env() {
|
for (name, value) in cl_exe.env() {
|
||||||
|
eprintln!("{:?} = {:?}", name, value);
|
||||||
buildcmd.env(name, value);
|
buildcmd.env(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
buildcmd.env("Configuration", "Release");
|
buildcmd.env("Configuration", "Release");
|
||||||
buildcmd.args(&["static"]);
|
buildcmd.args(&["static"]);
|
||||||
buildcmd.current_dir(&src_dir);
|
buildcmd.current_dir(&src_dir);
|
||||||
|
@ -49,16 +66,20 @@ fn main() {
|
||||||
panic!("Failed to build luajit");
|
panic!("Failed to build luajit");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
println!("cargo:rustc-link-search=native={}", src_dir);
|
|
||||||
println!("cargo:rustc-link-lib=static=lua51");
|
LIB_NAME
|
||||||
} else {
|
}
|
||||||
let lib_path = format!("{}/libluajit.a", &src_dir);
|
|
||||||
|
#[cfg(not(target_env = "msvc"))]
|
||||||
|
fn build_luajit(luajit_dir: &str, out_dir: &str, src_dir: &str) -> &'static str {
|
||||||
|
const LIB_NAME: &'static str = "luajit";
|
||||||
|
let lib_path = format!("{}/lib{}.a", &src_dir, LIB_NAME);
|
||||||
dbg!(&lib_path);
|
dbg!(&lib_path);
|
||||||
if !std::fs::metadata(&lib_path).is_ok() {
|
if !std::fs::metadata(&lib_path).is_ok() {
|
||||||
let mut copy_options = CopyOptions::new();
|
let mut copy_options = CopyOptions::new();
|
||||||
copy_options.overwrite = true;
|
copy_options.overwrite = true;
|
||||||
dir::copy(&luajit_dir, &out_dir, ©_options).unwrap();
|
dir::copy(&luajit_dir, &out_dir, ©_options).unwrap();
|
||||||
fs::copy(format!("etc/Makefile"), format!("{}/Makefile", &src_dir)).unwrap();
|
std::fs::copy(format!("etc/Makefile"), format!("{}/Makefile", &src_dir)).unwrap();
|
||||||
|
|
||||||
let mut buildcmd = Command::new("make");
|
let mut buildcmd = Command::new("make");
|
||||||
buildcmd.current_dir(&src_dir);
|
buildcmd.current_dir(&src_dir);
|
||||||
|
@ -80,11 +101,5 @@ fn main() {
|
||||||
panic!("Failed to build luajit");
|
panic!("Failed to build luajit");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
println!("cargo:rustc-link-search=native={}", src_dir);
|
LIB_NAME
|
||||||
println!("cargo:rustc-link-lib=static=luajit");
|
|
||||||
}
|
|
||||||
|
|
||||||
// if cfg!(target_os = "macos") && cfg!(target_pointer_width = "64") {
|
|
||||||
// // RUSTFLAGS='-C link-args=-pagezero_size 10000 -image_base 100000000'
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue