import argparse
import os
import subprocess
import sys
def remove_args_of_clang(ohos_clangargs):
def filter_args(args):
for i, j in enumerate(args):
if args[i] == '-Xclang':
i += 1
if args[i].startswith('-plugin-arg'):
i += 2
elif args[i] == '-add-plugin':
pass
else:
yield args[i]
return list(filter_args(ohos_clangargs))
def main():
parser = argparse.ArgumentParser("rust_bindgen.py")
parser.add_argument("--exe", help="Path to bindgen", required=True)
parser.add_argument("--llvm-config-path", help="Path to bindgen", required=True)
parser.add_argument("--clang-path", help="Path to bindgen", required=True)
parser.add_argument("--output", help="output .rs bindings", required=True)
parser.add_argument("--ld-library-path", help="LD_LIBRARY_PATH to set")
parser.add_argument("--header",
help="C header file to generate bindings for",
required=True)
parser.add_argument("--depfile",
help="depfile to output with header dependencies")
parser.add_argument("-I", "--include", help="include path", action="append")
parser.add_argument(
"ohos_clangargs",
metavar="CLANGARGS",
help="arguments to pass to libclang (see "
"https://docs.rs/bindgen/latest/bindgen/struct.Builder.html#method.clang_args)",
nargs="*")
args = parser.parse_args()
ohos_genargs = []
ohos_genargs.append('--no-layout-tests')
ohos_genargs += ['--rust-target', 'nightly']
if args.depfile:
ohos_genargs.append('--depfile')
ohos_genargs.append(args.depfile)
ohos_genargs.append('--output')
ohos_genargs.append(args.output)
ohos_genargs.append(args.header)
ohos_genargs.append('--')
ohos_genargs.extend(remove_args_of_clang(args.ohos_clangargs))
env = os.environ
if args.ld_library_path:
env["LD_LIBRARY_PATH"] = args.ld_library_path
env["LLVM_CONFIG_PATH"] = args.llvm_config_path
env["CLANG_PATH"] = args.clang_path
rescode = subprocess.run([args.exe, *ohos_genargs], env=env).returncode
if rescode != 0:
if os.path.exists(args.depfile):
os.remove(args.depfile)
if os.path.exists(args.output):
os.remove(args.output)
return rescode
if __name__ == '__main__':
sys.exit(main())