14 """Load an extension module from a .so file with RTLD_GLOBAL."""
15 module_name = path.stem.removesuffix(
".abi3")
18 ctypes.CDLL(str(path), mode=ctypes.RTLD_GLOBAL)
20 spec = importlib.util.spec_from_file_location(module_name, path)
21 if spec
is None or spec.loader
is None:
22 sys.exit(f
"Failed to load extension from {path}")
24 module = importlib.util.module_from_spec(spec)
25 sys.modules[module_name] = module
26 spec.loader.exec_module(module)
31 parser = argparse.ArgumentParser()
33 "--module", required=
True, help=
"Module name to generate stubs for"
36 "--deps", required=
True, help=
"Comma-separated .so files to load"
38 parser.add_argument(
"-o",
"--output", required=
True, help=
"Output directory")
39 args = parser.parse_args()
41 for dep_path
in args.deps.split(
","):
44 runfiles = Runfiles.Create()
45 stubgen_path = runfiles.Rlocation(
"+llvm_repos_extension+nanobind/src/stubgen.py")
46 spec = importlib.util.spec_from_file_location(
"stubgen", stubgen_path)
47 stubgen = importlib.util.module_from_spec(spec)
48 sys.modules[
"stubgen"] = stubgen
49 spec.loader.exec_module(stubgen)
50 stubgen.main([
"-m", args.module,
"-r",
"-O", args.output])