Skip to content

Commit 47987d1

Browse files
committed
rustvmm_gen: Introduce rustvmm_gen.py
`rustvmm_gen.py` integrates kernel version checking, source extraction, compilation and header installation. Header files could be prepared with command: ```command scripts/rustvmm_gen.py --arch <arm64/x86_64/riscv> --version <X.Y/X.Y.Z> prepare ``` Source code required by `seccompiler` could be generated with command: ```command scripts/rustvmm_gen.py --arch <arm64/x86_64/riscv> --version <X.Y/X.Y.Z> generate_seccompiler ``` And for generating kvm-bindings: ```command scripts/rustvmm_gen.py --arch <arm64/x86_64/riscv> --version <X.Y/X.Y.Z> generate_kvm_bindings ``` Signed-off-by: Ruoqing He <[email protected]>
1 parent e4b7633 commit 47987d1

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

scripts/rustvmm_gen.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/usr/bin/env python3
2+
#
3+
# Copyright 2025 © Institute of Software, CAS. All rights reserved.
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
import argparse
7+
import os
8+
from pathlib import Path
9+
from lib.kernel_source import prepare_source
10+
from lib.seccompiler import generate_seccompiler, SECCOMPILER_SYSCALL_DIR
11+
from lib.kvm_bindings import generate_kvm_bindings, KVM_BINDINGS_DIR
12+
13+
14+
def main():
15+
parser = argparse.ArgumentParser(prog="rustvmm_gen")
16+
subparsers = parser.add_subparsers(dest="command", required=True)
17+
parser.add_argument("--arch", help="Target architecture (x86_64, arm64, riscv)")
18+
parser.add_argument("--version", required=True, help="Kernel version (e.g. 6.12.8)")
19+
parser.add_argument(
20+
"--install_path",
21+
default=None,
22+
help="Header installation directory path",
23+
)
24+
parser.add_argument("--keep", help="Keep temporary build files")
25+
26+
# Prepare subcommand
27+
prepare_parser = subparsers.add_parser("prepare", help="Prepare kernel headers")
28+
prepare_parser.set_defaults(func=prepare_source)
29+
30+
# Generate seccompiler subcommand
31+
generate_syscall_parser = subparsers.add_parser(
32+
"generate_seccompiler",
33+
help="Generate syscall for `rust-vmm/seccompiler` from prepared kernel headers",
34+
)
35+
default_seccompiler_syscall_path_prefix = f"{os.getcwd()}/{SECCOMPILER_SYSCALL_DIR}"
36+
generate_syscall_parser.add_argument(
37+
"--output_path",
38+
default=default_seccompiler_syscall_path_prefix,
39+
help=f"Output directory path (default: {default_seccompiler_syscall_path_prefix})",
40+
)
41+
generate_syscall_parser.set_defaults(func=generate_seccompiler)
42+
43+
# Generate kvm-bindings subcommand
44+
generate_kvm_bindings_parser = subparsers.add_parser(
45+
"generate_kvm_bindings",
46+
help="Generate bindings for `rust-vmm/kvm/kvm-bindings` from prepared kernel headers",
47+
)
48+
default_kvm_bindings_path_prefix = f"{os.getcwd()}/{KVM_BINDINGS_DIR}"
49+
generate_kvm_bindings_parser.add_argument(
50+
"--output_path",
51+
default=default_kvm_bindings_path_prefix,
52+
help=f"Output directory path (default: {default_kvm_bindings_path_prefix})",
53+
)
54+
generate_kvm_bindings_parser.add_argument(
55+
"--attribute",
56+
help=f"Custom attribute to be added for structures",
57+
)
58+
generate_kvm_bindings_parser.set_defaults(func=generate_kvm_bindings)
59+
60+
args = parser.parse_args()
61+
args.func(args)
62+
63+
64+
if __name__ == "__main__":
65+
main()

0 commit comments

Comments
 (0)