Makefile (57e04eeda515ee979fec3bc3d64c408feae18acc) | Makefile (fb9a98e160f10555936e1c7041d4efda4954d1df) |
---|---|
1# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 2# Most of this file is copied from tools/lib/traceevent/Makefile 3 4LIBBPF_VERSION := $(shell \ 5 grep -oE '^LIBBPF_([0-9.]+)' libbpf.map | \ 6 sort -rV | head -n1 | cut -d'_' -f2) 7LIBBPF_MAJOR_VERSION := $(firstword $(subst ., ,$(LIBBPF_VERSION))) 8 --- 42 unchanged lines hidden (view full) --- 51ifeq ("$(origin V)", "command line") 52 VERBOSE = $(V) 53endif 54ifndef VERBOSE 55 VERBOSE = 0 56endif 57 58FEATURE_USER = .libbpf | 1# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 2# Most of this file is copied from tools/lib/traceevent/Makefile 3 4LIBBPF_VERSION := $(shell \ 5 grep -oE '^LIBBPF_([0-9.]+)' libbpf.map | \ 6 sort -rV | head -n1 | cut -d'_' -f2) 7LIBBPF_MAJOR_VERSION := $(firstword $(subst ., ,$(LIBBPF_VERSION))) 8 --- 42 unchanged lines hidden (view full) --- 51ifeq ("$(origin V)", "command line") 52 VERBOSE = $(V) 53endif 54ifndef VERBOSE 55 VERBOSE = 0 56endif 57 58FEATURE_USER = .libbpf |
59FEATURE_TESTS = libelf libelf-mmap bpf reallocarray 60FEATURE_DISPLAY = libelf bpf | 59FEATURE_TESTS = libelf libelf-mmap zlib bpf reallocarray 60FEATURE_DISPLAY = libelf zlib bpf |
61 62INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi 63FEATURE_CHECK_CFLAGS-bpf = $(INCLUDES) 64 65check_feat := 1 66NON_CHECK_FEAT_TARGETS := clean TAGS tags cscope help 67ifdef MAKECMDGOALS 68ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) --- 73 unchanged lines hidden (view full) --- 142LIB_TARGET := $(addprefix $(OUTPUT),$(LIB_TARGET)) 143LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE)) 144PC_FILE := $(addprefix $(OUTPUT),$(PC_FILE)) 145 146TAGS_PROG := $(if $(shell which etags 2>/dev/null),etags,ctags) 147 148GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ 149 cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ | 61 62INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi 63FEATURE_CHECK_CFLAGS-bpf = $(INCLUDES) 64 65check_feat := 1 66NON_CHECK_FEAT_TARGETS := clean TAGS tags cscope help 67ifdef MAKECMDGOALS 68ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) --- 73 unchanged lines hidden (view full) --- 142LIB_TARGET := $(addprefix $(OUTPUT),$(LIB_TARGET)) 143LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE)) 144PC_FILE := $(addprefix $(OUTPUT),$(PC_FILE)) 145 146TAGS_PROG := $(if $(shell which etags 2>/dev/null),etags,ctags) 147 148GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \ 149 cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ |
150 sed 's/\[.*\]//' | \ |
|
150 awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ 151 sort -u | wc -l) 152VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ 153 grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) 154 155CMD_TARGETS = $(LIB_TARGET) $(PC_FILE) 156 157all: fixdep 158 $(Q)$(MAKE) all_cmd 159 160all_cmd: $(CMD_TARGETS) check 161 | 151 awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | \ 152 sort -u | wc -l) 153VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ 154 grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) 155 156CMD_TARGETS = $(LIB_TARGET) $(PC_FILE) 157 158all: fixdep 159 $(Q)$(MAKE) all_cmd 160 161all_cmd: $(CMD_TARGETS) check 162 |
162$(BPF_IN_SHARED): force elfdep bpfdep bpf_helper_defs.h | 163$(BPF_IN_SHARED): force elfdep zdep bpfdep bpf_helper_defs.h |
163 @(test -f ../../include/uapi/linux/bpf.h -a -f ../../../include/uapi/linux/bpf.h && ( \ 164 (diff -B ../../include/uapi/linux/bpf.h ../../../include/uapi/linux/bpf.h >/dev/null) || \ 165 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h'" >&2 )) || true 166 @(test -f ../../include/uapi/linux/bpf_common.h -a -f ../../../include/uapi/linux/bpf_common.h && ( \ 167 (diff -B ../../include/uapi/linux/bpf_common.h ../../../include/uapi/linux/bpf_common.h >/dev/null) || \ 168 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 169 @(test -f ../../include/uapi/linux/netlink.h -a -f ../../../include/uapi/linux/netlink.h && ( \ 170 (diff -B ../../include/uapi/linux/netlink.h ../../../include/uapi/linux/netlink.h >/dev/null) || \ 171 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/netlink.h' differs from latest version at 'include/uapi/linux/netlink.h'" >&2 )) || true 172 @(test -f ../../include/uapi/linux/if_link.h -a -f ../../../include/uapi/linux/if_link.h && ( \ 173 (diff -B ../../include/uapi/linux/if_link.h ../../../include/uapi/linux/if_link.h >/dev/null) || \ 174 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/if_link.h' differs from latest version at 'include/uapi/linux/if_link.h'" >&2 )) || true 175 @(test -f ../../include/uapi/linux/if_xdp.h -a -f ../../../include/uapi/linux/if_xdp.h && ( \ 176 (diff -B ../../include/uapi/linux/if_xdp.h ../../../include/uapi/linux/if_xdp.h >/dev/null) || \ 177 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 178 $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(SHARED_OBJDIR) CFLAGS="$(CFLAGS) $(SHLIB_FLAGS)" 179 | 164 @(test -f ../../include/uapi/linux/bpf.h -a -f ../../../include/uapi/linux/bpf.h && ( \ 165 (diff -B ../../include/uapi/linux/bpf.h ../../../include/uapi/linux/bpf.h >/dev/null) || \ 166 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h'" >&2 )) || true 167 @(test -f ../../include/uapi/linux/bpf_common.h -a -f ../../../include/uapi/linux/bpf_common.h && ( \ 168 (diff -B ../../include/uapi/linux/bpf_common.h ../../../include/uapi/linux/bpf_common.h >/dev/null) || \ 169 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 170 @(test -f ../../include/uapi/linux/netlink.h -a -f ../../../include/uapi/linux/netlink.h && ( \ 171 (diff -B ../../include/uapi/linux/netlink.h ../../../include/uapi/linux/netlink.h >/dev/null) || \ 172 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/netlink.h' differs from latest version at 'include/uapi/linux/netlink.h'" >&2 )) || true 173 @(test -f ../../include/uapi/linux/if_link.h -a -f ../../../include/uapi/linux/if_link.h && ( \ 174 (diff -B ../../include/uapi/linux/if_link.h ../../../include/uapi/linux/if_link.h >/dev/null) || \ 175 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/if_link.h' differs from latest version at 'include/uapi/linux/if_link.h'" >&2 )) || true 176 @(test -f ../../include/uapi/linux/if_xdp.h -a -f ../../../include/uapi/linux/if_xdp.h && ( \ 177 (diff -B ../../include/uapi/linux/if_xdp.h ../../../include/uapi/linux/if_xdp.h >/dev/null) || \ 178 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 179 $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(SHARED_OBJDIR) CFLAGS="$(CFLAGS) $(SHLIB_FLAGS)" 180 |
180$(BPF_IN_STATIC): force elfdep bpfdep bpf_helper_defs.h | 181$(BPF_IN_STATIC): force elfdep zdep bpfdep bpf_helper_defs.h |
181 $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(STATIC_OBJDIR) 182 183bpf_helper_defs.h: $(srctree)/tools/include/uapi/linux/bpf.h 184 $(Q)$(srctree)/scripts/bpf_helpers_doc.py --header \ 185 --file $(srctree)/tools/include/uapi/linux/bpf.h > bpf_helper_defs.h 186 187$(OUTPUT)libbpf.so: $(OUTPUT)libbpf.so.$(LIBBPF_VERSION) 188 189$(OUTPUT)libbpf.so.$(LIBBPF_VERSION): $(BPF_IN_SHARED) 190 $(QUIET_LINK)$(CC) $(LDFLAGS) \ 191 --shared -Wl,-soname,libbpf.so.$(LIBBPF_MAJOR_VERSION) \ | 182 $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(STATIC_OBJDIR) 183 184bpf_helper_defs.h: $(srctree)/tools/include/uapi/linux/bpf.h 185 $(Q)$(srctree)/scripts/bpf_helpers_doc.py --header \ 186 --file $(srctree)/tools/include/uapi/linux/bpf.h > bpf_helper_defs.h 187 188$(OUTPUT)libbpf.so: $(OUTPUT)libbpf.so.$(LIBBPF_VERSION) 189 190$(OUTPUT)libbpf.so.$(LIBBPF_VERSION): $(BPF_IN_SHARED) 191 $(QUIET_LINK)$(CC) $(LDFLAGS) \ 192 --shared -Wl,-soname,libbpf.so.$(LIBBPF_MAJOR_VERSION) \ |
192 -Wl,--version-script=$(VERSION_SCRIPT) $^ -lelf -o $@ | 193 -Wl,--version-script=$(VERSION_SCRIPT) $^ -lelf -lz -o $@ |
193 @ln -sf $(@F) $(OUTPUT)libbpf.so 194 @ln -sf $(@F) $(OUTPUT)libbpf.so.$(LIBBPF_MAJOR_VERSION) 195 196$(OUTPUT)libbpf.a: $(BPF_IN_STATIC) 197 $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^ 198 199$(OUTPUT)libbpf.pc: 200 $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \ --- 7 unchanged lines hidden (view full) --- 208 @if [ "$(GLOBAL_SYM_COUNT)" != "$(VERSIONED_SYM_COUNT)" ]; then \ 209 echo "Warning: Num of global symbols in $(BPF_IN_SHARED)" \ 210 "($(GLOBAL_SYM_COUNT)) does NOT match with num of" \ 211 "versioned symbols in $^ ($(VERSIONED_SYM_COUNT))." \ 212 "Please make sure all LIBBPF_API symbols are" \ 213 "versioned in $(VERSION_SCRIPT)." >&2; \ 214 readelf -s --wide $(BPF_IN_SHARED) | \ 215 cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ | 194 @ln -sf $(@F) $(OUTPUT)libbpf.so 195 @ln -sf $(@F) $(OUTPUT)libbpf.so.$(LIBBPF_MAJOR_VERSION) 196 197$(OUTPUT)libbpf.a: $(BPF_IN_STATIC) 198 $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^ 199 200$(OUTPUT)libbpf.pc: 201 $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \ --- 7 unchanged lines hidden (view full) --- 209 @if [ "$(GLOBAL_SYM_COUNT)" != "$(VERSIONED_SYM_COUNT)" ]; then \ 210 echo "Warning: Num of global symbols in $(BPF_IN_SHARED)" \ 211 "($(GLOBAL_SYM_COUNT)) does NOT match with num of" \ 212 "versioned symbols in $^ ($(VERSIONED_SYM_COUNT))." \ 213 "Please make sure all LIBBPF_API symbols are" \ 214 "versioned in $(VERSION_SCRIPT)." >&2; \ 215 readelf -s --wide $(BPF_IN_SHARED) | \ 216 cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \ |
217 sed 's/\[.*\]//' | \ |
|
216 awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ 217 sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ 218 readelf -s --wide $(OUTPUT)libbpf.so | \ 219 grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | \ 220 sort -u > $(OUTPUT)libbpf_versioned_syms.tmp; \ 221 diff -u $(OUTPUT)libbpf_global_syms.tmp \ 222 $(OUTPUT)libbpf_versioned_syms.tmp; \ 223 rm $(OUTPUT)libbpf_global_syms.tmp \ --- 20 unchanged lines hidden (view full) --- 244 cp -fpR $(LIB_FILE) $(DESTDIR)$(libdir_SQ) 245 246install_headers: bpf_helper_defs.h 247 $(call QUIET_INSTALL, headers) \ 248 $(call do_install,bpf.h,$(prefix)/include/bpf,644); \ 249 $(call do_install,libbpf.h,$(prefix)/include/bpf,644); \ 250 $(call do_install,btf.h,$(prefix)/include/bpf,644); \ 251 $(call do_install,libbpf_util.h,$(prefix)/include/bpf,644); \ | 218 awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'| \ 219 sort -u > $(OUTPUT)libbpf_global_syms.tmp; \ 220 readelf -s --wide $(OUTPUT)libbpf.so | \ 221 grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | \ 222 sort -u > $(OUTPUT)libbpf_versioned_syms.tmp; \ 223 diff -u $(OUTPUT)libbpf_global_syms.tmp \ 224 $(OUTPUT)libbpf_versioned_syms.tmp; \ 225 rm $(OUTPUT)libbpf_global_syms.tmp \ --- 20 unchanged lines hidden (view full) --- 246 cp -fpR $(LIB_FILE) $(DESTDIR)$(libdir_SQ) 247 248install_headers: bpf_helper_defs.h 249 $(call QUIET_INSTALL, headers) \ 250 $(call do_install,bpf.h,$(prefix)/include/bpf,644); \ 251 $(call do_install,libbpf.h,$(prefix)/include/bpf,644); \ 252 $(call do_install,btf.h,$(prefix)/include/bpf,644); \ 253 $(call do_install,libbpf_util.h,$(prefix)/include/bpf,644); \ |
254 $(call do_install,libbpf_common.h,$(prefix)/include/bpf,644); \ |
|
252 $(call do_install,xsk.h,$(prefix)/include/bpf,644); \ 253 $(call do_install,bpf_helpers.h,$(prefix)/include/bpf,644); \ 254 $(call do_install,bpf_helper_defs.h,$(prefix)/include/bpf,644); \ 255 $(call do_install,bpf_tracing.h,$(prefix)/include/bpf,644); \ 256 $(call do_install,bpf_endian.h,$(prefix)/include/bpf,644); \ 257 $(call do_install,bpf_core_read.h,$(prefix)/include/bpf,644); 258 259install_pkgconfig: $(PC_FILE) --- 12 unchanged lines hidden (view full) --- 272 $(call QUIET_CLEAN, libbpf) $(RM) -rf $(CMD_TARGETS) \ 273 *.o *~ *.a *.so *.so.$(LIBBPF_MAJOR_VERSION) .*.d .*.cmd \ 274 *.pc LIBBPF-CFLAGS bpf_helper_defs.h \ 275 $(SHARED_OBJDIR) $(STATIC_OBJDIR) 276 $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf 277 278 279 | 255 $(call do_install,xsk.h,$(prefix)/include/bpf,644); \ 256 $(call do_install,bpf_helpers.h,$(prefix)/include/bpf,644); \ 257 $(call do_install,bpf_helper_defs.h,$(prefix)/include/bpf,644); \ 258 $(call do_install,bpf_tracing.h,$(prefix)/include/bpf,644); \ 259 $(call do_install,bpf_endian.h,$(prefix)/include/bpf,644); \ 260 $(call do_install,bpf_core_read.h,$(prefix)/include/bpf,644); 261 262install_pkgconfig: $(PC_FILE) --- 12 unchanged lines hidden (view full) --- 275 $(call QUIET_CLEAN, libbpf) $(RM) -rf $(CMD_TARGETS) \ 276 *.o *~ *.a *.so *.so.$(LIBBPF_MAJOR_VERSION) .*.d .*.cmd \ 277 *.pc LIBBPF-CFLAGS bpf_helper_defs.h \ 278 $(SHARED_OBJDIR) $(STATIC_OBJDIR) 279 $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf 280 281 282 |
280PHONY += force elfdep bpfdep cscope tags | 283PHONY += force elfdep zdep bpfdep cscope tags |
281force: 282 283elfdep: 284 @if [ "$(feature-libelf)" != "1" ]; then echo "No libelf found"; exit 1 ; fi 285 | 284force: 285 286elfdep: 287 @if [ "$(feature-libelf)" != "1" ]; then echo "No libelf found"; exit 1 ; fi 288 |
289zdep: 290 @if [ "$(feature-zlib)" != "1" ]; then echo "No zlib found"; exit 1 ; fi 291 |
|
286bpfdep: 287 @if [ "$(feature-bpf)" != "1" ]; then echo "BPF API too old"; exit 1 ; fi 288 289cscope: 290 ls *.c *.h > cscope.files 291 cscope -b -q -I $(srctree)/include -f cscope.out 292 293tags: 294 rm -f TAGS tags 295 ls *.c *.h | xargs $(TAGS_PROG) -a 296 297# Declare the contents of the .PHONY variable as phony. We keep that 298# information in a variable so we can use it in if_changed and friends. 299.PHONY: $(PHONY) 300 301# Delete partially updated (corrupted) files on error 302.DELETE_ON_ERROR: | 292bpfdep: 293 @if [ "$(feature-bpf)" != "1" ]; then echo "BPF API too old"; exit 1 ; fi 294 295cscope: 296 ls *.c *.h > cscope.files 297 cscope -b -q -I $(srctree)/include -f cscope.out 298 299tags: 300 rm -f TAGS tags 301 ls *.c *.h | xargs $(TAGS_PROG) -a 302 303# Declare the contents of the .PHONY variable as phony. We keep that 304# information in a variable so we can use it in if_changed and friends. 305.PHONY: $(PHONY) 306 307# Delete partially updated (corrupted) files on error 308.DELETE_ON_ERROR: |