6e1051a54e
Use the libbpf skeleton facility and other utilities provided by XDP samples helper. A lot of the code in xdp_monitor and xdp_redirect_cpu has been moved to the xdp_sample_user.o helper, so we remove the duplicate functions here that are no longer needed. Thanks to BPF skeleton, we no longer depend on order of tracepoints to uninstall them on startup. Instead, the sample mask is used to install the needed tracepoints. Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20210821002010.845777-15-memxor@gmail.com
87 lines
2.9 KiB
Makefile
87 lines
2.9 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# ==========================================================================
|
|
# Building binaries on the host system
|
|
# Binaries are not used during the compilation of the kernel, and intended
|
|
# to be build for target board, target board can be host of course. Added to
|
|
# build binaries to run not on host system.
|
|
#
|
|
# Sample syntax
|
|
# tprogs-y := xsk_example
|
|
# Will compile xsk_example.c and create an executable named xsk_example
|
|
#
|
|
# tprogs-y := xdpsock
|
|
# xdpsock-objs := xdpsock_1.o xdpsock_2.o
|
|
# Will compile xdpsock_1.c and xdpsock_2.c, and then link the executable
|
|
# xdpsock, based on xdpsock_1.o and xdpsock_2.o
|
|
#
|
|
# Derived from scripts/Makefile.host
|
|
#
|
|
__tprogs := $(sort $(tprogs-y))
|
|
|
|
# C code
|
|
# Executables compiled from a single .c file
|
|
tprog-csingle := $(foreach m,$(__tprogs), \
|
|
$(if $($(m)-objs),,$(m)))
|
|
|
|
# C executables linked based on several .o files
|
|
tprog-cmulti := $(foreach m,$(__tprogs),\
|
|
$(if $($(m)-objs),$(m)))
|
|
|
|
# Object (.o) files compiled from .c files
|
|
tprog-cobjs := $(sort $(foreach m,$(__tprogs),$($(m)-objs)))
|
|
|
|
tprog-csingle := $(addprefix $(obj)/,$(tprog-csingle))
|
|
tprog-cmulti := $(addprefix $(obj)/,$(tprog-cmulti))
|
|
tprog-cobjs := $(addprefix $(obj)/,$(tprog-cobjs))
|
|
|
|
#####
|
|
# Handle options to gcc. Support building with separate output directory
|
|
|
|
_tprogc_flags = $(TPROGS_CFLAGS) \
|
|
$(TPROGCFLAGS_$(basetarget).o)
|
|
|
|
# $(objtree)/$(obj) for including generated headers from checkin source files
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
ifdef building_out_of_srctree
|
|
_tprogc_flags += -I $(objtree)/$(obj)
|
|
endif
|
|
endif
|
|
|
|
tprogc_flags = -Wp,-MD,$(depfile) $(_tprogc_flags)
|
|
|
|
# Create executable from a single .c file
|
|
# tprog-csingle -> Executable
|
|
quiet_cmd_tprog-csingle = CC $@
|
|
cmd_tprog-csingle = $(CC) $(tprogc_flags) $(TPROGS_LDFLAGS) -o $@ $< \
|
|
$(TPROGS_LDLIBS) $(TPROGLDLIBS_$(@F))
|
|
$(tprog-csingle): $(obj)/%: $(src)/%.c FORCE
|
|
$(call if_changed_dep,tprog-csingle)
|
|
|
|
# Link an executable based on list of .o files, all plain c
|
|
# tprog-cmulti -> executable
|
|
quiet_cmd_tprog-cmulti = LD $@
|
|
cmd_tprog-cmulti = $(CC) $(tprogc_flags) $(TPROGS_LDFLAGS) -o $@ \
|
|
$(addprefix $(obj)/,$($(@F)-objs)) \
|
|
$(TPROGS_LDLIBS) $(TPROGLDLIBS_$(@F))
|
|
$(tprog-cmulti): $(tprog-cobjs) FORCE
|
|
$(call if_changed,tprog-cmulti)
|
|
$(call multi_depend, $(tprog-cmulti), , -objs)
|
|
|
|
# Create .o file from a single .c file
|
|
# tprog-cobjs -> .o
|
|
quiet_cmd_tprog-cobjs = CC $@
|
|
cmd_tprog-cobjs = $(CC) $(tprogc_flags) -c -o $@ $<
|
|
$(tprog-cobjs): $(obj)/%.o: $(src)/%.c FORCE
|
|
$(call if_changed_dep,tprog-cobjs)
|
|
|
|
# Override includes for xdp_sample_user.o because $(srctree)/usr/include in
|
|
# TPROGS_CFLAGS causes conflicts
|
|
XDP_SAMPLE_CFLAGS += -Wall -O2 -lm \
|
|
-I./tools/include \
|
|
-I./tools/include/uapi \
|
|
-I./tools/lib \
|
|
-I./tools/testing/selftests/bpf
|
|
$(obj)/xdp_sample_user.o: $(src)/xdp_sample_user.c \
|
|
$(src)/xdp_sample_user.h $(src)/xdp_sample_shared.h
|
|
$(CC) $(XDP_SAMPLE_CFLAGS) -c -o $@ $<
|