# 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)
