import subprocess
import os
import shutil
path_cwd = os.path.abspath(os.getcwd())
path_header = f"{path_cwd}/../header"
path_temp = f"{path_cwd}/tmp"
path_out = f"{path_cwd}/.."
shutil.copytree(path_header, path_temp, dirs_exist_ok=True)
os.chdir(path_temp)
with open("dlpack.h", "r") as f:
token = f.read()
subprocess.run([
"bindgen",
"dlpack.h", "-o", "dlpack.rs",
"--allowlist-file", "dlpack.h",
"--default-enum-style", "rust",
"--no-layout-tests",
"--use-core",
"--merge-extern-blocks",
])
with open("dlpack.rs") as f:
token = f.read()
token = token.replace("::core::ffi::", "").replace("::core::option::", "")
token = """
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
use core::ffi::*;
""" + token
with open("dlpack_ffi.rs", "w") as f:
f.write(token)
shutil.copy(f"{path_temp}/dlpack_ffi.rs", f"{path_out}/src/lib.rs")
subprocess.run(["cargo", "fmt", "-p", "rstsr-dlpack-ffi"])