Files
phs_v1.0.1.0/build/templates/rust/rust_bindgen.py

83 lines
3.1 KiB
Python
Raw Normal View History

2024-09-27 19:16:49 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2023 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
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.append('--size_t-is-usize')
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())