linux/samples/bpf/Makefile.target
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0
   2# ==========================================================================
   3# Building binaries on the host system
   4# Binaries are not used during the compilation of the kernel, and intended
   5# to be build for target board, target board can be host of course. Added to
   6# build binaries to run not on host system.
   7#
   8# Sample syntax
   9# tprogs-y := xsk_example
  10# Will compile xsk_example.c and create an executable named xsk_example
  11#
  12# tprogs-y    := xdpsock
  13# xdpsock-objs := xdpsock_1.o xdpsock_2.o
  14# Will compile xdpsock_1.c and xdpsock_2.c, and then link the executable
  15# xdpsock, based on xdpsock_1.o and xdpsock_2.o
  16#
  17# Derived from scripts/Makefile.host
  18#
  19__tprogs := $(sort $(tprogs-y))
  20
  21# C code
  22# Executables compiled from a single .c file
  23tprog-csingle   := $(foreach m,$(__tprogs), \
  24                        $(if $($(m)-objs),,$(m)))
  25
  26# C executables linked based on several .o files
  27tprog-cmulti    := $(foreach m,$(__tprogs),\
  28                        $(if $($(m)-objs),$(m)))
  29
  30# Object (.o) files compiled from .c files
  31tprog-cobjs     := $(sort $(foreach m,$(__tprogs),$($(m)-objs)))
  32
  33tprog-csingle   := $(addprefix $(obj)/,$(tprog-csingle))
  34tprog-cmulti    := $(addprefix $(obj)/,$(tprog-cmulti))
  35tprog-cobjs     := $(addprefix $(obj)/,$(tprog-cobjs))
  36
  37#####
  38# Handle options to gcc. Support building with separate output directory
  39
  40_tprogc_flags   = $(TPROGS_CFLAGS) \
  41                 $(TPROGCFLAGS_$(basetarget).o)
  42
  43# $(objtree)/$(obj) for including generated headers from checkin source files
  44ifeq ($(KBUILD_EXTMOD),)
  45ifdef building_out_of_srctree
  46_tprogc_flags   += -I $(objtree)/$(obj)
  47endif
  48endif
  49
  50tprogc_flags    = -Wp,-MD,$(depfile) $(_tprogc_flags)
  51
  52# Create executable from a single .c file
  53# tprog-csingle -> Executable
  54quiet_cmd_tprog-csingle         = CC  $@
  55      cmd_tprog-csingle = $(CC) $(tprogc_flags) $(TPROGS_LDFLAGS) -o $@ $< \
  56                $(TPROGS_LDLIBS) $(TPROGLDLIBS_$(@F))
  57$(tprog-csingle): $(obj)/%: $(src)/%.c FORCE
  58        $(call if_changed_dep,tprog-csingle)
  59
  60# Link an executable based on list of .o files, all plain c
  61# tprog-cmulti -> executable
  62quiet_cmd_tprog-cmulti  = LD  $@
  63      cmd_tprog-cmulti  = $(CC) $(tprogc_flags) $(TPROGS_LDFLAGS) -o $@ \
  64                          $(addprefix $(obj)/,$($(@F)-objs)) \
  65                          $(TPROGS_LDLIBS) $(TPROGLDLIBS_$(@F))
  66$(tprog-cmulti): $(tprog-cobjs) FORCE
  67        $(call if_changed,tprog-cmulti)
  68$(call multi_depend, $(tprog-cmulti), , -objs)
  69
  70# Create .o file from a single .c file
  71# tprog-cobjs -> .o
  72quiet_cmd_tprog-cobjs   = CC  $@
  73      cmd_tprog-cobjs   = $(CC) $(tprogc_flags) -c -o $@ $<
  74$(tprog-cobjs): $(obj)/%.o: $(src)/%.c FORCE
  75        $(call if_changed_dep,tprog-cobjs)
  76
  77# Override includes for xdp_sample_user.o because $(srctree)/usr/include in
  78# TPROGS_CFLAGS causes conflicts
  79XDP_SAMPLE_CFLAGS += -Wall -O2 -lm \
  80                     -I./tools/include \
  81                     -I./tools/include/uapi \
  82                     -I./tools/lib \
  83                     -I./tools/testing/selftests/bpf
  84$(obj)/xdp_sample_user.o: $(src)/xdp_sample_user.c \
  85        $(src)/xdp_sample_user.h $(src)/xdp_sample_shared.h
  86        $(CC) $(XDP_SAMPLE_CFLAGS) -c -o $@ $<
  87