mirror of
https://github.com/varun-r-mallya/Python-BPF.git
synced 2025-12-31 21:06:25 +00:00
add compile command
This commit is contained in:
@ -1,25 +1,25 @@
|
|||||||
from pythonbpf.decorators import bpf, map, section, bpfglobal
|
import pythonbpf as pb
|
||||||
from ctypes import c_void_p, c_int64, c_int32, c_uint64
|
|
||||||
from pythonbpf.helpers import bpf_ktime_get_ns
|
from pythonbpf.helpers import bpf_ktime_get_ns
|
||||||
from pythonbpf.maps import HashMap
|
from pythonbpf.maps import HashMap
|
||||||
|
|
||||||
|
from ctypes import c_void_p, c_int64, c_int32, c_uint64
|
||||||
|
|
||||||
@bpf
|
@pb.bpf
|
||||||
@map
|
@pb.map
|
||||||
def last() -> HashMap:
|
def last() -> HashMap:
|
||||||
return HashMap(key_type=c_uint64, value_type=c_uint64, max_entries=1)
|
return HashMap(key_type=c_uint64, value_type=c_uint64, max_entries=1)
|
||||||
|
|
||||||
|
|
||||||
@bpf
|
@pb.bpf
|
||||||
@section("tracepoint/syscalls/sys_enter_execve")
|
@pb.section("tracepoint/syscalls/sys_enter_execve")
|
||||||
def hello(ctx: c_void_p) -> c_int32:
|
def hello(ctx: c_void_p) -> c_int32:
|
||||||
print("entered")
|
print("entered")
|
||||||
print("multi constant support")
|
print("multi constant support")
|
||||||
return c_int32(0)
|
return c_int32(0)
|
||||||
|
|
||||||
|
|
||||||
@bpf
|
@pb.bpf
|
||||||
@section("tracepoint/syscalls/sys_exit_execve")
|
@pb.section("tracepoint/syscalls/sys_exit_execve")
|
||||||
def hello_again(ctx: c_void_p) -> c_int64:
|
def hello_again(ctx: c_void_p) -> c_int64:
|
||||||
print("exited")
|
print("exited")
|
||||||
key = 0
|
key = 0
|
||||||
@ -34,7 +34,9 @@ def hello_again(ctx: c_void_p) -> c_int64:
|
|||||||
return c_int64(0)
|
return c_int64(0)
|
||||||
|
|
||||||
|
|
||||||
@bpf
|
@pb.bpf
|
||||||
@bpfglobal
|
@pb.bpfglobal
|
||||||
def LICENSE() -> str:
|
def LICENSE() -> str:
|
||||||
return "GPL"
|
return "GPL"
|
||||||
|
|
||||||
|
pb.compile()
|
||||||
|
|||||||
@ -0,0 +1,2 @@
|
|||||||
|
from .decorators import bpf, map, section, bpfglobal
|
||||||
|
from .codegen import compile_to_ir, compile
|
||||||
|
|||||||
@ -5,7 +5,9 @@ from .functions_pass import func_proc
|
|||||||
from .maps_pass import maps_proc
|
from .maps_pass import maps_proc
|
||||||
from .globals_pass import globals_processing
|
from .globals_pass import globals_processing
|
||||||
import os
|
import os
|
||||||
|
import subprocess
|
||||||
|
import pathlib
|
||||||
|
import __main__
|
||||||
|
|
||||||
def find_bpf_chunks(tree):
|
def find_bpf_chunks(tree):
|
||||||
"""Find all functions decorated with @bpf in the AST."""
|
"""Find all functions decorated with @bpf in the AST."""
|
||||||
@ -92,3 +94,18 @@ def compile_to_ir(filename: str, output: str):
|
|||||||
f.write("\n")
|
f.write("\n")
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
def compile():
|
||||||
|
main_file = pathlib.Path(__main__.__file__).resolve()
|
||||||
|
|
||||||
|
ll_file = pathlib.Path("/tmp") / main_file.with_suffix(".ll").name
|
||||||
|
o_file = main_file.with_suffix(".o")
|
||||||
|
|
||||||
|
compile_to_ir(str(main_file), str(ll_file))
|
||||||
|
|
||||||
|
subprocess.run([
|
||||||
|
"llc", "-march=bpf", "-filetype=obj", "-O2",
|
||||||
|
str(ll_file), "-o", str(o_file)
|
||||||
|
], check=True)
|
||||||
|
|
||||||
|
print(f"Object written to {o_file}")
|
||||||
|
|||||||
Reference in New Issue
Block a user