1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Build userspace programs for the target system 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun# Executables compiled from a single .c file 7*4882a593Smuzhiyunuser-csingle := $(foreach m, $(userprogs), $(if $($(m)-objs),,$(m))) 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun# Executables linked based on several .o files 10*4882a593Smuzhiyunuser-cmulti := $(foreach m, $(userprogs), $(if $($(m)-objs),$(m))) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun# Objects compiled from .c files 13*4882a593Smuzhiyunuser-cobjs := $(sort $(foreach m, $(userprogs), $($(m)-objs))) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunuser-csingle := $(addprefix $(obj)/, $(user-csingle)) 16*4882a593Smuzhiyunuser-cmulti := $(addprefix $(obj)/, $(user-cmulti)) 17*4882a593Smuzhiyunuser-cobjs := $(addprefix $(obj)/, $(user-cobjs)) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyunuser_ccflags = -Wp,-MMD,$(depfile) $(KBUILD_USERCFLAGS) $(userccflags) \ 20*4882a593Smuzhiyun $($(target-stem)-userccflags) 21*4882a593Smuzhiyunuser_ldflags = $(KBUILD_USERLDFLAGS) $(userldflags) $($(target-stem)-userldflags) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun# Create an executable from a single .c file 24*4882a593Smuzhiyunquiet_cmd_user_cc_c = CC [U] $@ 25*4882a593Smuzhiyun cmd_user_cc_c = $(CC) $(user_ccflags) $(user_ldflags) -o $@ $< \ 26*4882a593Smuzhiyun $($(target-stem)-userldlibs) 27*4882a593Smuzhiyun$(user-csingle): $(obj)/%: $(src)/%.c FORCE 28*4882a593Smuzhiyun $(call if_changed_dep,user_cc_c) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun# Link an executable based on list of .o files 31*4882a593Smuzhiyunquiet_cmd_user_ld = LD [U] $@ 32*4882a593Smuzhiyun cmd_user_ld = $(CC) $(user_ldflags) -o $@ \ 33*4882a593Smuzhiyun $(addprefix $(obj)/, $($(target-stem)-objs)) \ 34*4882a593Smuzhiyun $($(target-stem)-userldlibs) 35*4882a593Smuzhiyun$(user-cmulti): FORCE 36*4882a593Smuzhiyun $(call if_changed,user_ld) 37*4882a593Smuzhiyun$(call multi_depend, $(user-cmulti), , -objs) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun# Create .o file from a .c file 40*4882a593Smuzhiyunquiet_cmd_user_cc_o_c = CC [U] $@ 41*4882a593Smuzhiyun cmd_user_cc_o_c = $(CC) $(user_ccflags) -c -o $@ $< 42*4882a593Smuzhiyun$(user-cobjs): $(obj)/%.o: $(src)/%.c FORCE 43*4882a593Smuzhiyun $(call if_changed_dep,user_cc_o_c) 44*4882a593Smuzhiyun 45*4882a593Smuzhiyuntargets += $(user-csingle) $(user-cmulti) $(user-cobjs) 46