-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
100 lines (80 loc) · 2.52 KB
/
Makefile
File metadata and controls
100 lines (80 loc) · 2.52 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
.PHONY: default \
debug \
pkg \
unpkg \
clean \
vmlinux \
clean_vmlinux \
format \
check_format \
container
PROJECT_ROOT=$(shell git rev-parse --show-toplevel)
BINDIR = bin
TARGET = httpsnoop
SRCDIR = src
BUILDDIR = build
VMLINUX ?= /sys/kernel/btf/vmlinux
CFORMAT = .clang-format
CC = clang-19
CFLAGS = -g -O2 -target bpf -I include
SRCS := $(wildcard $(SRCDIR)/*.bpf.c)
OBJS = $(patsubst $(SRCDIR)/%.c,$(BUILDDIR)/%.o,$(SRCS))
CONTAINER ?= $(shell type docker > /dev/null && echo yes || echo no)
CLANG_FORMAT ?= $(shell type "clang-format-19" > /dev/null && echo "clang-format-19" || echo "clang-format")
BPFTOOL ?= $(shell type "bpftool" > /dev/null && echo "bpftool" || echo "/usr/sbin/bpftool" )
USERNAME ?= $(shell whoami)
USER_ID ?= $(shell id -u)
GROUP_ID ?= $(shell id -g)
default: $(if $(filter yes, $(CONTAINER)), container, include/vmlinux.h $(BUILDDIR) $(BINDIR) $(BINDIR)/$(TARGET))
ifeq ($(CONTAINER), yes)
docker run --rm -it -v $(CURDIR):/opt/$(TARGET) -w /opt/$(TARGET) $(TARGET) make
endif
debug: CFLAGS += -DBPF_DEBUG=1
debug: default
pkg: default
$(PROJECT_ROOT)/scripts/yeet_pkg.sh --target $(TARGET)
unpkg:
$(PROJECT_ROOT)/scripts/yeet_pkg.sh -u --target $(TARGET)
container:
docker build \
--build-arg username=$(USERNAME) \
--build-arg user_id=$(USER_ID) \
--build-arg group_id=$(GROUP_ID) \
-t $(TARGET) .
$(BINDIR)/$(TARGET): $(OBJS)
$(BPFTOOL) gen object $@ $^
chmod +x $@
$(BINDIR):
mkdir -p $(BINDIR)
$(BUILDDIR):
mkdir -p $(BUILDDIR)
$(BUILDDIR)/%.bpf.o: $(SRCDIR)/%.bpf.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf $(BUILDDIR)
rm -rf $(BINDIR)
rm -rf $(TARGET).yeet
rm -rf $(TARGET)
include/vmlinux.h: $(if $(filter yes, $(CONTAINER)), /sys/kernel/btf/vmlinux, )
make vmlinux
vmlinux: $(if $(filter yes, $(CONTAINER)), container, )
ifeq ($(CONTAINER), yes)
docker run --rm -it -v $(CURDIR):/opt/$(TARGET) -w /opt/$(TARGET) $(TARGET) make vmlinux
else
$(BPFTOOL) btf dump file $(VMLINUX) format c > include/vmlinux.h
endif
clean_vmlinux:
rm include/vmlinux.h
format:
ifeq ($(CONTAINER), yes)
docker run --rm -it -v $(CURDIR):/opt/$(TARGET) -w /opt/$(TARGET) $(TARGET) make format
else
@find . -name "*.c" -exec $(CLANG_FORMAT) -i -style=file:$(CFORMAT) {} + || exit 1; \
echo "Formatted all files"
endif
check_format: $(if $(filter yes, $(CONTAINER)), container, )
ifeq ($(CONTAINER), yes)
docker run --rm -it -v $(CURDIR):/opt/$(TARGET) -w /opt/$(TARGET) $(TARGET) make check_format
else
@find . -name "*.c" -exec $(CLANG_FORMAT) -style=file:$(CFORMAT) --dry-run --Werror {} + || exit 1;
endif