-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
112 lines (85 loc) · 3.46 KB
/
Makefile
File metadata and controls
112 lines (85 loc) · 3.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
CC = gcc
CLANG = clang
BPFTOOL = bpftool
BPF_TARGET_ARCH = bpf
COMMON_BPF_DEPS = vmlinux.h tracing_utils.h Makefile
LIBBPF_CFLAGS = $(shell pkg-config --cflags libbpf)
LIBBPF_LIBS = $(shell pkg-config --libs libbpf)
CFLAGS_BPF = -g -O2 \
-target $(BPF_TARGET_ARCH) \
-D__TARGET_ARCH_$(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/') \
-I. \
$(LIBBPF_CFLAGS) \
-I/usr/include \
-I/usr/include/$(shell uname -m)-linux-gnu
CFLAGS_USER = -g -Wall -I.
LDFLAGS_USER := $(LIBBPF_LIBS) -lelf -lz -lm
# BPF‐related sources and objects
HOST_BPF_SRC = host_qemu_tracer.bpf.c
HOST_BPF_OBJ = $(HOST_BPF_SRC:.bpf.c=.bpf.o)
HOST_BPF_SKEL = $(HOST_BPF_SRC:.bpf.c=.skel.h)
SERVER_BPF_SRC = server_tracer.bpf.c
SERVER_BPF_OBJ = $(SERVER_BPF_SRC:.bpf.c=.bpf.o)
SERVER_BPF_SKEL = $(SERVER_BPF_SRC:.bpf.c=.skel.h)
GUEST_BPF_SRC = guest_tracer.bpf.c
GUEST_BPF_OBJ = $(GUEST_BPF_SRC:.bpf.c=.bpf.o)
GUEST_BPF_SKEL = $(GUEST_BPF_SRC:.bpf.c=.skel.h)
READER_SRC = reader.c
READER_APP = reader
HOST_LOADER_SRC = host_qemu_loader.c
HOST_LOADER_APP = host_loader
SERVER_LOADER_SRC = server_loader.c
SERVER_LOADER_APP = server_loader
GUEST_LOADER_SRC = guest_loader.c
GUEST_LOADER_APP = guest_loader
LDFLAGS_COMMON = -lelf -lz
LDFLAGS_LOADER = $(LIBBPF_LIBS) $(LDFLAGS_COMMON)
.PHONY: all clean host guest reader server
all: host guest reader server
vmlinux.h:
@echo "Generating vmlinux.h via bpftool..."
@$(BPFTOOL) btf dump file /sys/kernel/btf/vmlinux format c > $@ \
|| (echo "Failed to generate vmlinux.h. Is /sys/kernel/btf/vmlinux available and bpftool installed?" && false)
$(HOST_BPF_OBJ): $(HOST_BPF_SRC) $(COMMON_BPF_DEPS)
@echo "Compiling $< → $@"
@$(CLANG) $(CFLAGS_BPF) -c $(HOST_BPF_SRC) -o $@
$(HOST_BPF_SKEL): $(HOST_BPF_OBJ)
@echo "Generating skeleton for $< → $@"
@$(BPFTOOL) gen skeleton $(HOST_BPF_OBJ) > $@
$(HOST_LOADER_APP): $(HOST_LOADER_SRC) $(HOST_BPF_SKEL) tracing_utils.h Makefile
@echo "Linking host loader: $@"
@$(CC) $(CFLAGS_USER) $(HOST_LOADER_SRC) $(HOST_BPF_SKEL) $(LDFLAGS_USER) -o $@
host: $(HOST_LOADER_APP)
$(SERVER_BPF_OBJ): $(SERVER_BPF_SRC) $(COMMON_BPF_DEPS)
@echo "Compiling $< → $@"
@$(CLANG) $(CFLAGS_BPF) -c $(SERVER_BPF_SRC) -o $@
$(SERVER_BPF_SKEL): $(SERVER_BPF_OBJ)
@echo "Generating skeleton for $< → $@"
@$(BPFTOOL) gen skeleton $(SERVER_BPF_OBJ) > $@
$(SERVER_LOADER_APP): $(SERVER_LOADER_SRC) $(SERVER_BPF_SKEL) tracing_utils.h Makefile
@echo "Linking server loader: $@"
@$(CC) $(CFLAGS_USER) $(SERVER_LOADER_SRC) $(SERVER_BPF_SKEL) $(LDFLAGS_USER) -o $@
server: $(SERVER_LOADER_APP)
$(GUEST_BPF_OBJ): $(GUEST_BPF_SRC) $(COMMON_BPF_DEPS)
@echo "Compiling $< → $@"
@$(CLANG) $(CFLAGS_BPF) -c $(GUEST_BPF_SRC) -o $@
$(GUEST_BPF_SKEL): $(GUEST_BPF_OBJ)
@echo "Generating skeleton for $< → $@"
@$(BPFTOOL) gen skeleton $(GUEST_BPF_OBJ) > $@
$(GUEST_LOADER_APP): $(GUEST_LOADER_SRC) $(GUEST_BPF_SKEL) tracing_utils.h Makefile
@echo "Linking guest loader: $@"
@$(CC) $(CFLAGS_USER) $(GUEST_LOADER_SRC) $(GUEST_BPF_SKEL) $(LDFLAGS_USER) -o $@
guest: $(GUEST_LOADER_APP)
$(READER_APP): $(READER_SRC) tracing_utils.h Makefile
@echo "Building reader: $@"
@$(CC) $(CFLAGS_USER) $(READER_SRC) -o $@
reader: $(READER_APP)
# --- Clean up ---
clean:
@echo "Cleaning up generated files..."
@rm -f $(HOST_BPF_OBJ) $(HOST_BPF_SKEL) \
$(SERVER_BPF_OBJ) $(SERVER_BPF_SKEL) \
$(GUEST_BPF_OBJ) $(GUEST_BPF_SKEL) \
$(HOST_LOADER_APP) $(GUEST_LOADER_APP) $(SERVER_LOADER_APP)\
$(READER_APP) \
vmlinux.h