• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
2OUTPUT := .output
3CLANG ?= clang
4LLVM_STRIP ?= llvm-strip
5BPFTOOL ?= bin/bpftool
6LIBBPF_SRC := $(abspath ../src/cc/libbpf/src)
7LIBBPF_OBJ := $(abspath $(OUTPUT)/libbpf.a)
8INCLUDES := -I$(OUTPUT) -I../src/cc/libbpf/include/uapi
9CFLAGS := -g -O2 -Wall
10BPFCFLAGS := -g -O2 -Wall
11INSTALL ?= install
12prefix ?= /usr/local
13ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/' | sed 's/ppc64le/powerpc/' | sed 's/mips.*/mips/')
14
15ifeq ($(wildcard $(ARCH)/),)
16$(error Architecture $(ARCH) is not supported yet. Please open an issue)
17endif
18
19APPS = \
20	bashreadline \
21	bindsnoop \
22	biolatency \
23	biopattern \
24	biosnoop \
25	biostacks \
26	bitesize \
27	cachestat \
28	cpudist \
29	cpufreq \
30	drsnoop \
31	execsnoop \
32	exitsnoop \
33	filelife \
34	filetop \
35	fsdist \
36	fsslower \
37	funclatency \
38	gethostlatency \
39	hardirqs \
40	klockstat \
41	ksnoop \
42	llcstat \
43	mountsnoop \
44	numamove \
45	offcputime \
46	oomkill \
47	opensnoop \
48	readahead \
49	runqlat \
50	runqlen \
51	runqslower \
52	softirqs \
53	solisten \
54	statsnoop \
55	syscount \
56	tcpconnect \
57	tcpconnlat \
58	tcprtt \
59	tcpsynbl \
60	vfsstat \
61	#
62
63FSDIST_ALIASES = btrfsdist ext4dist nfsdist xfsdist
64FSSLOWER_ALIASES = btrfsslower ext4slower nfsslower xfsslower
65APP_ALIASES = $(FSDIST_ALIASES) $(FSSLOWER_ALIASES)
66
67COMMON_OBJ = \
68	$(OUTPUT)/trace_helpers.o \
69	$(OUTPUT)/syscall_helpers.o \
70	$(OUTPUT)/errno_helpers.o \
71	$(OUTPUT)/map_helpers.o \
72	$(OUTPUT)/uprobe_helpers.o \
73	#
74
75.PHONY: all
76all: $(APPS) $(APP_ALIASES)
77
78ifeq ($(V),1)
79Q =
80msg =
81else
82Q = @
83msg = @printf '  %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))";
84MAKEFLAGS += --no-print-directory
85endif
86
87.PHONY: clean
88clean:
89	$(call msg,CLEAN)
90	$(Q)rm -rf $(OUTPUT) $(APPS) $(APP_ALIASES)
91
92$(OUTPUT) $(OUTPUT)/libbpf:
93	$(call msg,MKDIR,$@)
94	$(Q)mkdir -p $@
95
96$(APPS): %: $(OUTPUT)/%.o $(LIBBPF_OBJ) $(COMMON_OBJ) | $(OUTPUT)
97	$(call msg,BINARY,$@)
98	$(Q)$(CC) $(CFLAGS) $^ $(LDFLAGS) -lelf -lz -o $@
99
100$(patsubst %,$(OUTPUT)/%.o,$(APPS)): %.o: %.skel.h
101
102$(OUTPUT)/%.o: %.c $(wildcard %.h) $(LIBBPF_OBJ) | $(OUTPUT)
103	$(call msg,CC,$@)
104	$(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $(filter %.c,$^) -o $@
105
106$(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o | $(OUTPUT)
107	$(call msg,GEN-SKEL,$@)
108	$(Q)$(BPFTOOL) gen skeleton $< > $@
109
110$(OUTPUT)/%.bpf.o: %.bpf.c $(LIBBPF_OBJ) $(wildcard %.h) $(ARCH)/vmlinux.h | $(OUTPUT)
111	$(call msg,BPF,$@)
112	$(Q)$(CLANG) $(BPFCFLAGS) -target bpf -D__TARGET_ARCH_$(ARCH)	      \
113		     -I$(ARCH)/ $(INCLUDES) -c $(filter %.c,$^) -o $@ &&      \
114	$(LLVM_STRIP) -g $@
115
116# Build libbpf.a
117$(LIBBPF_OBJ): $(wildcard $(LIBBPF_SRC)/*.[ch]) | $(OUTPUT)/libbpf
118	$(call msg,LIB,$@)
119	$(Q)$(MAKE) -C $(LIBBPF_SRC) BUILD_STATIC_ONLY=1		      \
120		    OBJDIR=$(dir $@)libbpf DESTDIR=$(dir $@)		      \
121		    INCLUDEDIR= LIBDIR= UAPIDIR=			      \
122		    install
123
124$(FSSLOWER_ALIASES): fsslower
125	$(call msg,SYMLINK,$@)
126	$(Q)ln -f -s $^ $@
127
128$(FSDIST_ALIASES): fsdist
129	$(call msg,SYMLINK,$@)
130	$(Q)ln -f -s $^ $@
131
132install: $(APPS) $(APP_ALIASES)
133	$(call msg, INSTALL libbpf-tools)
134	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
135	$(Q)$(INSTALL) $(APPS) $(DESTDIR)$(prefix)/bin
136	$(Q)cp -a $(APP_ALIASES) $(DESTDIR)$(prefix)/bin
137
138# delete failed targets
139.DELETE_ON_ERROR:
140# keep intermediate (.skel.h, .bpf.o, etc) targets
141.SECONDARY:
142