Alexei Starovoitov | 1bc38b8 | 2018-10-05 16:40:00 -0700 | [diff] [blame] | 1 | # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 2 | # Most of this file is copied from tools/lib/traceevent/Makefile |
| 3 | |
Alexei Starovoitov | d71fa5c | 2020-08-18 21:27:58 -0700 | [diff] [blame] | 4 | RM ?= rm |
| 5 | srctree = $(abs_srctree) |
| 6 | |
Andrii Nakryiko | 61c7aa5 | 2021-08-15 00:06:00 -0700 | [diff] [blame] | 7 | VERSION_SCRIPT := libbpf.map |
Andrii Nakryiko | dadb81d | 2019-08-14 13:05:48 -0700 | [diff] [blame] | 8 | LIBBPF_VERSION := $(shell \ |
Andrii Nakryiko | 61c7aa5 | 2021-08-15 00:06:00 -0700 | [diff] [blame] | 9 | grep -oE '^LIBBPF_([0-9.]+)' $(VERSION_SCRIPT) | \ |
Andrii Nakryiko | dadb81d | 2019-08-14 13:05:48 -0700 | [diff] [blame] | 10 | sort -rV | head -n1 | cut -d'_' -f2) |
Quentin Monnet | 0b46b75 | 2021-09-08 14:32:26 -0700 | [diff] [blame] | 11 | LIBBPF_MAJOR_VERSION := $(word 1,$(subst ., ,$(LIBBPF_VERSION))) |
| 12 | LIBBPF_MINOR_VERSION := $(word 2,$(subst ., ,$(LIBBPF_VERSION))) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 13 | |
| 14 | MAKEFLAGS += --no-print-directory |
| 15 | |
Shuah Khan | 55d554f | 2019-09-26 19:13:44 -0600 | [diff] [blame] | 16 | # This will work when bpf is built in tools env. where srctree |
| 17 | # isn't set and when invoked from selftests build, where srctree |
| 18 | # is a ".". building_out_of_srctree is undefined for in srctree |
| 19 | # builds |
| 20 | ifndef building_out_of_srctree |
Uwe Kleine-König | e19b7ce | 2016-11-22 09:30:26 +0100 | [diff] [blame] | 21 | srctree := $(patsubst %/,%,$(dir $(CURDIR))) |
Naveen N. Rao | d5ef314 | 2016-01-11 13:48:00 +0000 | [diff] [blame] | 22 | srctree := $(patsubst %/,%,$(dir $(srctree))) |
| 23 | srctree := $(patsubst %/,%,$(dir $(srctree))) |
| 24 | #$(info Determined 'srctree' to be $(srctree)) |
| 25 | endif |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 26 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 27 | INSTALL = install |
| 28 | |
| 29 | # Use DESTDIR for installing into a different root directory. |
| 30 | # This is useful for building a package. The program will be |
| 31 | # installed in this directory as if it was the root directory. |
| 32 | # Then the build tool can move it later. |
| 33 | DESTDIR ?= |
| 34 | DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' |
| 35 | |
Naveen N. Rao | d5ef314 | 2016-01-11 13:48:00 +0000 | [diff] [blame] | 36 | include $(srctree)/tools/scripts/Makefile.arch |
| 37 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 38 | ifeq ($(LP64), 1) |
| 39 | libdir_relative = lib64 |
| 40 | else |
| 41 | libdir_relative = lib |
| 42 | endif |
| 43 | |
| 44 | prefix ?= /usr/local |
| 45 | libdir = $(prefix)/$(libdir_relative) |
| 46 | man_dir = $(prefix)/share/man |
| 47 | man_dir_SQ = '$(subst ','\'',$(man_dir))' |
| 48 | |
| 49 | export man_dir man_dir_SQ INSTALL |
| 50 | export DESTDIR DESTDIR_SQ |
| 51 | |
Stanislav Fomichev | eeedd35 | 2019-01-15 13:13:46 -0800 | [diff] [blame] | 52 | include $(srctree)/tools/scripts/Makefile.include |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 53 | |
| 54 | # copy a bit from Linux kbuild |
| 55 | |
| 56 | ifeq ("$(origin V)", "command line") |
| 57 | VERBOSE = $(V) |
| 58 | endif |
| 59 | ifndef VERBOSE |
| 60 | VERBOSE = 0 |
| 61 | endif |
| 62 | |
Masahiro Yamada | 5c81664 | 2022-02-11 14:14:11 +0900 | [diff] [blame] | 63 | INCLUDES = -I$(or $(OUTPUT),.) \ |
Quentin Monnet | 0b46b75 | 2021-09-08 14:32:26 -0700 | [diff] [blame] | 64 | -I$(srctree)/tools/include -I$(srctree)/tools/include/uapi |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 65 | |
| 66 | export prefix libdir src obj |
| 67 | |
| 68 | # Shell quotes |
| 69 | libdir_SQ = $(subst ','\'',$(libdir)) |
| 70 | libdir_relative_SQ = $(subst ','\'',$(libdir_relative)) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 71 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 72 | OBJ = $@ |
| 73 | N = |
| 74 | |
Daniel Borkmann | 1d38226 | 2019-03-23 01:49:10 +0100 | [diff] [blame] | 75 | LIB_TARGET = libbpf.a libbpf.so.$(LIBBPF_VERSION) |
| 76 | LIB_FILE = libbpf.a libbpf.so* |
Luca Boccassi | dd399ac | 2019-03-28 11:33:53 +0000 | [diff] [blame] | 77 | PC_FILE = libbpf.pc |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 78 | |
| 79 | # Set compile option CFLAGS |
| 80 | ifdef EXTRA_CFLAGS |
| 81 | CFLAGS := $(EXTRA_CFLAGS) |
| 82 | else |
Andrii Nakryiko | 0a62291 | 2020-09-29 15:06:03 -0700 | [diff] [blame] | 83 | CFLAGS := -g -O2 |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 84 | endif |
| 85 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 86 | # Append required CFLAGS |
Kumar Kartikeya Dwivedi | 3a74ac2 | 2021-11-06 05:12:40 +0530 | [diff] [blame] | 87 | override CFLAGS += -std=gnu89 |
Andrii Nakryiko | 8d70823 | 2020-08-18 14:33:50 -0700 | [diff] [blame] | 88 | override CFLAGS += $(EXTRA_WARNINGS) -Wno-switch-enum |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 89 | override CFLAGS += -Werror -Wall |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 90 | override CFLAGS += $(INCLUDES) |
Andrey Ignatov | ab9e084 | 2018-10-15 22:50:34 -0700 | [diff] [blame] | 91 | override CFLAGS += -fvisibility=hidden |
Ivan Khoronzhuk | 71dd77f | 2019-08-15 15:13:54 +0300 | [diff] [blame] | 92 | override CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 |
Jean-Philippe Brucker | 4980beb | 2021-12-16 16:38:40 +0000 | [diff] [blame] | 93 | override CFLAGS += $(CLANG_CROSS_FLAGS) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 94 | |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 95 | # flags specific for shared library |
Andrii Nakryiko | b0efc21 | 2020-09-29 15:06:04 -0700 | [diff] [blame] | 96 | SHLIB_FLAGS := -DSHARED -fPIC |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 97 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 98 | ifeq ($(VERBOSE),1) |
| 99 | Q = |
| 100 | else |
| 101 | Q = @ |
| 102 | endif |
| 103 | |
Masahiro Yamada | 505d308 | 2017-03-09 16:16:33 -0800 | [diff] [blame] | 104 | # Disable command line variables (CFLAGS) override from top |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 105 | # level Makefile (perf), otherwise build Makefile will get |
| 106 | # the same command line setup. |
| 107 | MAKEOVERRIDES= |
| 108 | |
Jiri Olsa | 7c422f5 | 2015-09-23 12:34:02 +0200 | [diff] [blame] | 109 | all: |
| 110 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 111 | export srctree OUTPUT CC LD CFLAGS V |
Jiri Olsa | ab6201d | 2015-09-23 12:33:56 +0200 | [diff] [blame] | 112 | include $(srctree)/tools/build/Makefile.include |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 113 | |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 114 | SHARED_OBJDIR := $(OUTPUT)sharedobjs/ |
| 115 | STATIC_OBJDIR := $(OUTPUT)staticobjs/ |
| 116 | BPF_IN_SHARED := $(SHARED_OBJDIR)libbpf-in.o |
| 117 | BPF_IN_STATIC := $(STATIC_OBJDIR)libbpf-in.o |
Namhyung Kim | fa633a0 | 2019-12-23 15:13:26 +0900 | [diff] [blame] | 118 | BPF_HELPER_DEFS := $(OUTPUT)bpf_helper_defs.h |
Andrii Nakryiko | 2f38304 | 2021-09-13 15:23:09 -0700 | [diff] [blame] | 119 | BPF_GENERATED := $(BPF_HELPER_DEFS) |
Daniel Borkmann | 1d38226 | 2019-03-23 01:49:10 +0100 | [diff] [blame] | 120 | |
| 121 | LIB_TARGET := $(addprefix $(OUTPUT),$(LIB_TARGET)) |
| 122 | LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE)) |
Luca Boccassi | dd399ac | 2019-03-28 11:33:53 +0000 | [diff] [blame] | 123 | PC_FILE := $(addprefix $(OUTPUT),$(PC_FILE)) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 124 | |
Toke Høiland-Jørgensen | a9eb048 | 2019-10-04 17:34:44 +0200 | [diff] [blame] | 125 | TAGS_PROG := $(if $(shell which etags 2>/dev/null),etags,ctags) |
| 126 | |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 127 | GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ |
Kevin Laatz | 10d30e3 | 2019-08-27 02:25:27 +0000 | [diff] [blame] | 128 | cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ |
Thadeu Lima de Souza Cascardo | aa91593 | 2019-12-13 07:11:14 -0300 | [diff] [blame] | 129 | sed 's/\[.*\]//' | \ |
Andrii Nakryiko | 056431a | 2022-05-18 11:59:13 -0700 | [diff] [blame] | 130 | awk '/GLOBAL/ && /DEFAULT/ && !/UND|ABS/ {print $$NF}' | \ |
Kevin Laatz | 10d30e3 | 2019-08-27 02:25:27 +0000 | [diff] [blame] | 131 | sort -u | wc -l) |
Yauheni Kaliuta | 5598329 | 2020-05-25 09:18:46 +0300 | [diff] [blame] | 132 | VERSIONED_SYM_COUNT = $(shell readelf --dyn-syms --wide $(OUTPUT)libbpf.so | \ |
Jiri Olsa | 1fd6cee | 2020-11-18 22:13:50 +0100 | [diff] [blame] | 133 | sed 's/\[.*\]//' | \ |
Yonghong Song | 0908a66 | 2022-02-04 13:43:55 -0800 | [diff] [blame] | 134 | awk '/GLOBAL/ && /DEFAULT/ && !/UND|ABS/ {print $$NF}' | \ |
Andrey Ignatov | 306b267 | 2018-11-23 16:44:34 -0800 | [diff] [blame] | 135 | grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) |
| 136 | |
Stanislav Fomichev | 6bf6aff | 2019-12-02 13:59:31 -0800 | [diff] [blame] | 137 | CMD_TARGETS = $(LIB_TARGET) $(PC_FILE) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 138 | |
Stanislav Fomichev | 8e26888 | 2019-03-06 11:59:27 -0800 | [diff] [blame] | 139 | all: fixdep |
| 140 | $(Q)$(MAKE) all_cmd |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 141 | |
Andrey Ignatov | 306b267 | 2018-11-23 16:44:34 -0800 | [diff] [blame] | 142 | all_cmd: $(CMD_TARGETS) check |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 143 | |
Quentin Monnet | 0b46b75 | 2021-09-08 14:32:26 -0700 | [diff] [blame] | 144 | $(BPF_IN_SHARED): force $(BPF_GENERATED) |
Daniel Díaz | f15d5e6 | 2017-08-15 11:33:30 -0500 | [diff] [blame] | 145 | @(test -f ../../include/uapi/linux/bpf.h -a -f ../../../include/uapi/linux/bpf.h && ( \ |
Arnaldo Carvalho de Melo | 971e827 | 2016-07-11 16:38:05 -0300 | [diff] [blame] | 146 | (diff -B ../../include/uapi/linux/bpf.h ../../../include/uapi/linux/bpf.h >/dev/null) || \ |
Ingo Molnar | 8255e1e | 2017-07-30 11:51:30 +0200 | [diff] [blame] | 147 | echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h'" >&2 )) || true |
Daniel Díaz | f15d5e6 | 2017-08-15 11:33:30 -0500 | [diff] [blame] | 148 | @(test -f ../../include/uapi/linux/bpf_common.h -a -f ../../../include/uapi/linux/bpf_common.h && ( \ |
Arnaldo Carvalho de Melo | 971e827 | 2016-07-11 16:38:05 -0300 | [diff] [blame] | 149 | (diff -B ../../include/uapi/linux/bpf_common.h ../../../include/uapi/linux/bpf_common.h >/dev/null) || \ |
Ingo Molnar | 8255e1e | 2017-07-30 11:51:30 +0200 | [diff] [blame] | 150 | echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf_common.h' differs from latest version at 'include/uapi/linux/bpf_common.h'" >&2 )) || true |
Magnus Karlsson | 1cad078 | 2019-02-21 10:21:26 +0100 | [diff] [blame] | 151 | @(test -f ../../include/uapi/linux/if_xdp.h -a -f ../../../include/uapi/linux/if_xdp.h && ( \ |
| 152 | (diff -B ../../include/uapi/linux/if_xdp.h ../../../include/uapi/linux/if_xdp.h >/dev/null) || \ |
| 153 | echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/if_xdp.h' differs from latest version at 'include/uapi/linux/if_xdp.h'" >&2 )) || true |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 154 | $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(SHARED_OBJDIR) CFLAGS="$(CFLAGS) $(SHLIB_FLAGS)" |
| 155 | |
Quentin Monnet | 0b46b75 | 2021-09-08 14:32:26 -0700 | [diff] [blame] | 156 | $(BPF_IN_STATIC): force $(BPF_GENERATED) |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 157 | $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(STATIC_OBJDIR) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 158 | |
Namhyung Kim | fa633a0 | 2019-12-23 15:13:26 +0900 | [diff] [blame] | 159 | $(BPF_HELPER_DEFS): $(srctree)/tools/include/uapi/linux/bpf.h |
Joe Stringer | 923a932 | 2021-03-02 09:19:41 -0800 | [diff] [blame] | 160 | $(QUIET_GEN)$(srctree)/scripts/bpf_doc.py --header \ |
Namhyung Kim | fa633a0 | 2019-12-23 15:13:26 +0900 | [diff] [blame] | 161 | --file $(srctree)/tools/include/uapi/linux/bpf.h > $(BPF_HELPER_DEFS) |
Andrii Nakryiko | e01a75c | 2019-10-08 10:59:40 -0700 | [diff] [blame] | 162 | |
Daniel Borkmann | 1d38226 | 2019-03-23 01:49:10 +0100 | [diff] [blame] | 163 | $(OUTPUT)libbpf.so: $(OUTPUT)libbpf.so.$(LIBBPF_VERSION) |
| 164 | |
Andrii Nakryiko | 61c7aa5 | 2021-08-15 00:06:00 -0700 | [diff] [blame] | 165 | $(OUTPUT)libbpf.so.$(LIBBPF_VERSION): $(BPF_IN_SHARED) $(VERSION_SCRIPT) |
Jean-Philippe Brucker | 4980beb | 2021-12-16 16:38:40 +0000 | [diff] [blame] | 166 | $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) \ |
Ivan Khoronzhuk | 793a349 | 2019-10-11 03:28:05 +0300 | [diff] [blame] | 167 | --shared -Wl,-soname,libbpf.so.$(LIBBPF_MAJOR_VERSION) \ |
Andrii Nakryiko | 61c7aa5 | 2021-08-15 00:06:00 -0700 | [diff] [blame] | 168 | -Wl,--version-script=$(VERSION_SCRIPT) $< -lelf -lz -o $@ |
Daniel Borkmann | 1d38226 | 2019-03-23 01:49:10 +0100 | [diff] [blame] | 169 | @ln -sf $(@F) $(OUTPUT)libbpf.so |
Andrii Nakryiko | dadb81d | 2019-08-14 13:05:48 -0700 | [diff] [blame] | 170 | @ln -sf $(@F) $(OUTPUT)libbpf.so.$(LIBBPF_MAJOR_VERSION) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 171 | |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 172 | $(OUTPUT)libbpf.a: $(BPF_IN_STATIC) |
Alexei Starovoitov | d71fa5c | 2020-08-18 21:27:58 -0700 | [diff] [blame] | 173 | $(QUIET_LINK)$(RM) -f $@; $(AR) rcs $@ $^ |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 174 | |
Luca Boccassi | dd399ac | 2019-03-28 11:33:53 +0000 | [diff] [blame] | 175 | $(OUTPUT)libbpf.pc: |
| 176 | $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \ |
| 177 | -e "s|@LIBDIR@|$(libdir_SQ)|" \ |
| 178 | -e "s|@VERSION@|$(LIBBPF_VERSION)|" \ |
| 179 | < libbpf.pc.template > $@ |
| 180 | |
Andrii Nakryiko | 2f38304 | 2021-09-13 15:23:09 -0700 | [diff] [blame] | 181 | check: check_abi check_version |
Andrey Ignatov | 306b267 | 2018-11-23 16:44:34 -0800 | [diff] [blame] | 182 | |
Andrii Nakryiko | 61c7aa5 | 2021-08-15 00:06:00 -0700 | [diff] [blame] | 183 | check_abi: $(OUTPUT)libbpf.so $(VERSION_SCRIPT) |
Andrey Ignatov | 306b267 | 2018-11-23 16:44:34 -0800 | [diff] [blame] | 184 | @if [ "$(GLOBAL_SYM_COUNT)" != "$(VERSIONED_SYM_COUNT)" ]; then \ |
Yonghong Song | 1bd6352 | 2019-09-30 14:02:03 -0700 | [diff] [blame] | 185 | echo "Warning: Num of global symbols in $(BPF_IN_SHARED)" \ |
Andrey Ignatov | 306b267 | 2018-11-23 16:44:34 -0800 | [diff] [blame] | 186 | "($(GLOBAL_SYM_COUNT)) does NOT match with num of" \ |
| 187 | "versioned symbols in $^ ($(VERSIONED_SYM_COUNT))." \ |
| 188 | "Please make sure all LIBBPF_API symbols are" \ |
| 189 | "versioned in $(VERSION_SCRIPT)." >&2; \ |
Andrii Nakryiko | b568405 | 2019-11-27 12:01:34 -0800 | [diff] [blame] | 190 | readelf -s --wide $(BPF_IN_SHARED) | \ |
Kevin Laatz | 10d30e3 | 2019-08-27 02:25:27 +0000 | [diff] [blame] | 191 | cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ |
Thadeu Lima de Souza Cascardo | aa91593 | 2019-12-13 07:11:14 -0300 | [diff] [blame] | 192 | sed 's/\[.*\]//' | \ |
Aurelien Jarno | 3464afd | 2019-12-01 20:57:28 +0100 | [diff] [blame] | 193 | awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ |
Andrii Nakryiko | 9efc779 | 2019-05-22 10:51:28 -0700 | [diff] [blame] | 194 | sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ |
Yauheni Kaliuta | 5598329 | 2020-05-25 09:18:46 +0300 | [diff] [blame] | 195 | readelf --dyn-syms --wide $(OUTPUT)libbpf.so | \ |
Jiri Olsa | 1fd6cee | 2020-11-18 22:13:50 +0100 | [diff] [blame] | 196 | sed 's/\[.*\]//' | \ |
Yonghong Song | 0908a66 | 2022-02-04 13:43:55 -0800 | [diff] [blame] | 197 | awk '/GLOBAL/ && /DEFAULT/ && !/UND|ABS/ {print $$NF}'| \ |
Andrii Nakryiko | 9efc779 | 2019-05-22 10:51:28 -0700 | [diff] [blame] | 198 | grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | \ |
| 199 | sort -u > $(OUTPUT)libbpf_versioned_syms.tmp; \ |
| 200 | diff -u $(OUTPUT)libbpf_global_syms.tmp \ |
| 201 | $(OUTPUT)libbpf_versioned_syms.tmp; \ |
| 202 | rm $(OUTPUT)libbpf_global_syms.tmp \ |
| 203 | $(OUTPUT)libbpf_versioned_syms.tmp; \ |
Andrey Ignatov | 306b267 | 2018-11-23 16:44:34 -0800 | [diff] [blame] | 204 | exit 1; \ |
| 205 | fi |
| 206 | |
Quentin Monnet | 929bef4 | 2021-10-06 12:10:49 +0100 | [diff] [blame] | 207 | HDR_MAJ_VERSION := $(shell grep -oE '^$(pound)define LIBBPF_MAJOR_VERSION ([0-9]+)$$' libbpf_version.h | cut -d' ' -f3) |
| 208 | HDR_MIN_VERSION := $(shell grep -oE '^$(pound)define LIBBPF_MINOR_VERSION ([0-9]+)$$' libbpf_version.h | cut -d' ' -f3) |
Andrii Nakryiko | 2f38304 | 2021-09-13 15:23:09 -0700 | [diff] [blame] | 209 | |
| 210 | check_version: $(VERSION_SCRIPT) libbpf_version.h |
| 211 | @if [ "$(HDR_MAJ_VERSION)" != "$(LIBBPF_MAJOR_VERSION)" ]; then \ |
| 212 | echo "Error: libbpf major version mismatch detected: " \ |
| 213 | "'$(HDR_MAJ_VERSION)' != '$(LIBBPF_MAJOR_VERSION)'" >&2; \ |
| 214 | exit 1; \ |
| 215 | fi |
| 216 | @if [ "$(HDR_MIN_VERSION)" != "$(LIBBPF_MINOR_VERSION)" ]; then \ |
| 217 | echo "Error: libbpf minor version mismatch detected: " \ |
| 218 | "'$(HDR_MIN_VERSION)' != '$(LIBBPF_MINOR_VERSION)'" >&2; \ |
| 219 | exit 1; \ |
| 220 | fi |
| 221 | |
Daniel Borkmann | 1d38226 | 2019-03-23 01:49:10 +0100 | [diff] [blame] | 222 | define do_install_mkdir |
| 223 | if [ ! -d '$(DESTDIR_SQ)$1' ]; then \ |
| 224 | $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \ |
| 225 | fi |
| 226 | endef |
| 227 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 228 | define do_install |
| 229 | if [ ! -d '$(DESTDIR_SQ)$2' ]; then \ |
| 230 | $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \ |
| 231 | fi; \ |
Georgi Valkov | e7fb646 | 2021-03-08 10:30:38 -0800 | [diff] [blame] | 232 | $(INSTALL) $(if $3,-m $3,) $1 '$(DESTDIR_SQ)$2' |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 233 | endef |
| 234 | |
| 235 | install_lib: all_cmd |
Daniel Borkmann | 1d38226 | 2019-03-23 01:49:10 +0100 | [diff] [blame] | 236 | $(call QUIET_INSTALL, $(LIB_TARGET)) \ |
| 237 | $(call do_install_mkdir,$(libdir_SQ)); \ |
| 238 | cp -fpR $(LIB_FILE) $(DESTDIR)$(libdir_SQ) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 239 | |
Andrii Nakryiko | f366006 | 2022-06-27 14:15:13 -0700 | [diff] [blame] | 240 | SRC_HDRS := bpf.h libbpf.h btf.h libbpf_common.h libbpf_legacy.h \ |
Quentin Monnet | b79c2ce | 2021-10-07 20:44:27 +0100 | [diff] [blame] | 241 | bpf_helpers.h bpf_tracing.h bpf_endian.h bpf_core_read.h \ |
Andrii Nakryiko | d72e296 | 2022-04-04 16:41:56 -0700 | [diff] [blame] | 242 | skel_internal.h libbpf_version.h usdt.bpf.h |
Quentin Monnet | b79c2ce | 2021-10-07 20:44:27 +0100 | [diff] [blame] | 243 | GEN_HDRS := $(BPF_GENERATED) |
Andrii Nakryiko | 232c9e8 | 2021-06-02 17:40:24 -0700 | [diff] [blame] | 244 | |
Quentin Monnet | b79c2ce | 2021-10-07 20:44:27 +0100 | [diff] [blame] | 245 | INSTALL_PFX := $(DESTDIR)$(prefix)/include/bpf |
| 246 | INSTALL_SRC_HDRS := $(addprefix $(INSTALL_PFX)/, $(SRC_HDRS)) |
| 247 | INSTALL_GEN_HDRS := $(addprefix $(INSTALL_PFX)/, $(notdir $(GEN_HDRS))) |
| 248 | |
| 249 | $(INSTALL_SRC_HDRS): $(INSTALL_PFX)/%.h: %.h |
| 250 | $(call QUIET_INSTALL, $@) \ |
| 251 | $(call do_install,$<,$(prefix)/include/bpf,644) |
| 252 | |
| 253 | $(INSTALL_GEN_HDRS): $(INSTALL_PFX)/%.h: $(OUTPUT)%.h |
| 254 | $(call QUIET_INSTALL, $@) \ |
| 255 | $(call do_install,$<,$(prefix)/include/bpf,644) |
| 256 | |
| 257 | install_headers: $(BPF_GENERATED) $(INSTALL_SRC_HDRS) $(INSTALL_GEN_HDRS) |
Ian Rogers | daa45f3 | 2022-11-16 16:43:52 -0800 | [diff] [blame] | 258 | $(call QUIET_INSTALL, libbpf_headers) |
Jakub Kicinski | eb54e52 | 2017-07-25 11:17:11 -0700 | [diff] [blame] | 259 | |
Luca Boccassi | dd399ac | 2019-03-28 11:33:53 +0000 | [diff] [blame] | 260 | install_pkgconfig: $(PC_FILE) |
| 261 | $(call QUIET_INSTALL, $(PC_FILE)) \ |
| 262 | $(call do_install,$(PC_FILE),$(libdir_SQ)/pkgconfig,644) |
| 263 | |
Nikolay Borisov | 9358135 | 2020-05-26 20:46:12 +0300 | [diff] [blame] | 264 | install: install_lib install_pkgconfig install_headers |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 265 | |
Andrii Nakryiko | 5f10c1a | 2021-02-03 12:34:45 -0800 | [diff] [blame] | 266 | clean: |
Andrii Nakryiko | 2031af2 | 2020-01-09 21:17:14 -0800 | [diff] [blame] | 267 | $(call QUIET_CLEAN, libbpf) $(RM) -rf $(CMD_TARGETS) \ |
Quentin Monnet | 0b46b75 | 2021-09-08 14:32:26 -0700 | [diff] [blame] | 268 | *~ .*.d .*.cmd LIBBPF-CFLAGS $(BPF_GENERATED) \ |
Andrii Nakryiko | 2031af2 | 2020-01-09 21:17:14 -0800 | [diff] [blame] | 269 | $(SHARED_OBJDIR) $(STATIC_OBJDIR) \ |
| 270 | $(addprefix $(OUTPUT), \ |
| 271 | *.o *.a *.so *.so.$(LIBBPF_MAJOR_VERSION) *.pc) |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 272 | |
Andrii Nakryiko | 2f38304 | 2021-09-13 15:23:09 -0700 | [diff] [blame] | 273 | PHONY += force cscope tags check check_abi check_version |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 274 | force: |
| 275 | |
Toke Høiland-Jørgensen | a9eb048 | 2019-10-04 17:34:44 +0200 | [diff] [blame] | 276 | cscope: |
| 277 | ls *.c *.h > cscope.files |
| 278 | cscope -b -q -I $(srctree)/include -f cscope.out |
| 279 | |
| 280 | tags: |
Alexei Starovoitov | d71fa5c | 2020-08-18 21:27:58 -0700 | [diff] [blame] | 281 | $(RM) -f TAGS tags |
Toke Høiland-Jørgensen | a9eb048 | 2019-10-04 17:34:44 +0200 | [diff] [blame] | 282 | ls *.c *.h | xargs $(TAGS_PROG) -a |
| 283 | |
Wang Nan | 1b76c13 | 2015-07-01 02:13:51 +0000 | [diff] [blame] | 284 | # Declare the contents of the .PHONY variable as phony. We keep that |
| 285 | # information in a variable so we can use it in if_changed and friends. |
| 286 | .PHONY: $(PHONY) |
Jakub Sitnicki | ab81e20 | 2019-10-20 13:23:44 +0200 | [diff] [blame] | 287 | |
| 288 | # Delete partially updated (corrupted) files on error |
| 289 | .DELETE_ON_ERROR: |
Xin Liu | 7068194 | 2022-12-02 16:17:38 +0800 | [diff] [blame] | 290 | |
| 291 | help: |
| 292 | @echo 'libbpf common targets:' |
| 293 | @echo ' HINT: use "V=1" to enable verbose build' |
| 294 | @echo ' all - build libraries and pkgconfig' |
| 295 | @echo ' clean - remove all generated files' |
Randy Dunlap | 94e38c9 | 2023-07-21 23:52:36 -0700 | [diff] [blame] | 296 | @echo ' check - check ABI and version info' |
Xin Liu | 7068194 | 2022-12-02 16:17:38 +0800 | [diff] [blame] | 297 | @echo '' |
| 298 | @echo 'libbpf install targets:' |
| 299 | @echo ' HINT: use "prefix"(defaults to "/usr/local") or "DESTDIR" (defaults to "/")' |
Randy Dunlap | 94e38c9 | 2023-07-21 23:52:36 -0700 | [diff] [blame] | 300 | @echo ' to adjust target destination, e.g. "make prefix=/usr/local install"' |
Xin Liu | 7068194 | 2022-12-02 16:17:38 +0800 | [diff] [blame] | 301 | @echo ' install - build and install all headers, libraries and pkgconfig' |
| 302 | @echo ' install_headers - install only headers to include/bpf' |
| 303 | @echo '' |
| 304 | @echo 'libbpf make targets:' |
| 305 | @echo ' tags - use ctags to make tag information for source code browsing' |
| 306 | @echo ' cscope - use cscope to make interactive source code browsing database' |