Move bindgen to build script
This commit is contained in:
parent
089acdbc28
commit
206f7884e3
6 changed files with 41 additions and 1145 deletions
|
@ -15,5 +15,6 @@ links = "luajit"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
bindgen = "0.64.0"
|
||||||
cc = "1.0.40"
|
cc = "1.0.40"
|
||||||
fs_extra = "1.1.0"
|
fs_extra = "1.1.0"
|
||||||
|
|
26
bindgen.sh
26
bindgen.sh
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
BINDGEN_VERSION=$(bindgen --version | grep -v -e '^cargo')
|
|
||||||
|
|
||||||
bindgen -o src/ffi.rs \
|
|
||||||
--raw-line "/// Generated with: ${BINDGEN_VERSION}" \
|
|
||||||
--whitelist-var "LUA.*" \
|
|
||||||
--whitelist-var "LUAJIT.*" \
|
|
||||||
--whitelist-type "lua_.*" \
|
|
||||||
--whitelist-type "luaL_.*" \
|
|
||||||
--whitelist-function "lua_.*" \
|
|
||||||
--whitelist-function "luaL_.*" \
|
|
||||||
--whitelist-function "luaJIT.*" \
|
|
||||||
--ctypes-prefix "libc" \
|
|
||||||
--use-core \
|
|
||||||
--impl-debug \
|
|
||||||
ffi.h -- -I luajit/src
|
|
||||||
|
|
||||||
sed -i -e 's/pub fn \(luaJIT_[^\(]*\)/\/\/\/ <https:\/\/luajit.org\/ext_c_api.html> \n pub fn \1/' src/ffi.rs
|
|
||||||
sed -i -e 's/pub fn \(lua_[^\(]*\)/\/\/\/ <https\:\/\/www.lua.org\/manual\/5.1\/manual.html#\1> \n pub fn \1/' src/ffi.rs
|
|
||||||
sed -i -e 's/pub fn \(luaL_[^\(]*\)/\/\/\/ <https\:\/\/www.lua.org\/manual\/5.1\/manual.html#\1> \n pub fn \1/' src/ffi.rs
|
|
||||||
sed -i -e 's/pub type \(lua_[^\=]*\)/\/\/\/ <https\:\/\/www.lua.org\/manual\/5.1\/manual.html#\1> \n pub type \1/' src/ffi.rs
|
|
||||||
sed -i -e 's/pub struct \(lua_[^\{]*\)/\/\/\/ <https\:\/\/www.lua.org\/manual\/5.1\/manual.html#\1> \n pub struct \1/' src/ffi.rs
|
|
||||||
sed -i -e 's/pub struct \(luaL_[^\{]*\)/\/\/\/ <https\:\/\/www.lua.org\/manual\/5.1\/manual.html#\1> \n pub struct \1/' src/ffi.rs
|
|
||||||
|
|
||||||
cargo +stable fmt
|
|
34
build.rs
34
build.rs
|
@ -1,9 +1,11 @@
|
||||||
use fs_extra::dir;
|
use fs_extra::dir;
|
||||||
use fs_extra::dir::CopyOptions;
|
use fs_extra::dir::CopyOptions;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
|
|
||||||
const LIB_NAME: &str = "luajit";
|
const LIB_NAME: &str = "luajit";
|
||||||
|
const LUAJIT_HEADERS: [&str; 4] = ["lua.h", "lualib.h", "lauxlib.h", "luajit.h"];
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let luajit_dir = format!("{}/luajit", env!("CARGO_MANIFEST_DIR"));
|
let luajit_dir = format!("{}/luajit", env!("CARGO_MANIFEST_DIR"));
|
||||||
|
@ -53,4 +55,36 @@ fn main() {
|
||||||
println!("cargo:include={}", src_dir);
|
println!("cargo:include={}", src_dir);
|
||||||
println!("cargo:rustc-link-search=native={}", src_dir);
|
println!("cargo:rustc-link-search=native={}", src_dir);
|
||||||
println!("cargo:rustc-link-lib=static={}", LIB_NAME);
|
println!("cargo:rustc-link-lib=static={}", LIB_NAME);
|
||||||
|
|
||||||
|
let mut bindings = bindgen::Builder::default();
|
||||||
|
|
||||||
|
for header in LUAJIT_HEADERS {
|
||||||
|
println!("cargo:rerun-if-changed={}/src/{}", luajit_dir, header);
|
||||||
|
bindings = bindings.header(format!("{}/src/{}", luajit_dir, header));
|
||||||
|
}
|
||||||
|
|
||||||
|
let bindings = bindings
|
||||||
|
.allowlist_var("LUA.*")
|
||||||
|
.allowlist_var("LUAJIT.*")
|
||||||
|
.allowlist_type("lua_.*")
|
||||||
|
.allowlist_type("luaL_.*")
|
||||||
|
.allowlist_function("lua_.*")
|
||||||
|
.allowlist_function("luaL_.*")
|
||||||
|
.allowlist_function("luaJIT.*")
|
||||||
|
.ctypes_prefix("libc")
|
||||||
|
.impl_debug(true)
|
||||||
|
.use_core()
|
||||||
|
.clang_arg("-Iluajit/src")
|
||||||
|
// Make it pretty
|
||||||
|
.rustfmt_bindings(true)
|
||||||
|
.sort_semantically(true)
|
||||||
|
.merge_extern_blocks(true)
|
||||||
|
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
|
||||||
|
.generate()
|
||||||
|
.expect("Failed to generate bindings");
|
||||||
|
|
||||||
|
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
|
||||||
|
bindings
|
||||||
|
.write_to_file(out_path.join("bindings.rs"))
|
||||||
|
.expect("Failed to write bindings");
|
||||||
}
|
}
|
||||||
|
|
4
ffi.h
4
ffi.h
|
@ -1,4 +0,0 @@
|
||||||
#include "lua.h"
|
|
||||||
#include "lualib.h"
|
|
||||||
#include "lauxlib.h"
|
|
||||||
#include "luajit.h"
|
|
1113
src/ffi.rs
1113
src/ffi.rs
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,8 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
#![allow(non_camel_case_types)]
|
#![allow(non_camel_case_types)]
|
||||||
|
#![allow(clippy::deprecated_semver)]
|
||||||
|
#![allow(clippy::missing_safety_doc)]
|
||||||
|
|
||||||
//! # LuaJIT 2.1
|
//! # LuaJIT 2.1
|
||||||
//!
|
//!
|
||||||
|
@ -15,7 +17,9 @@
|
||||||
//!
|
//!
|
||||||
//! <http://wiki.luajit.org/NYI>
|
//! <http://wiki.luajit.org/NYI>
|
||||||
|
|
||||||
mod ffi;
|
mod ffi {
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
|
||||||
|
}
|
||||||
pub use ffi::*;
|
pub use ffi::*;
|
||||||
|
|
||||||
use core::ptr;
|
use core::ptr;
|
||||||
|
@ -92,7 +96,7 @@ pub unsafe fn lua_isthread(L: *mut lua_State, idx: libc::c_int) -> libc::c_int {
|
||||||
/// <https://www.lua.org/manual/5.1/manual.html#lua_isnone>
|
/// <https://www.lua.org/manual/5.1/manual.html#lua_isnone>
|
||||||
#[inline]
|
#[inline]
|
||||||
pub unsafe fn lua_isnone(L: *mut lua_State, idx: libc::c_int) -> libc::c_int {
|
pub unsafe fn lua_isnone(L: *mut lua_State, idx: libc::c_int) -> libc::c_int {
|
||||||
(lua_type(L, idx) == LUA_TNONE as i32) as i32
|
(lua_type(L, idx) == LUA_TNONE) as i32
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <https://www.lua.org/manual/5.1/manual.html#lua_isnoneornil>
|
/// <https://www.lua.org/manual/5.1/manual.html#lua_isnoneornil>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue