Messages in this thread Patch in this message | | | Date | Sat, 14 Sep 2019 01:14:54 +0300 | From | Ivan Khoronzhuk <> | Subject | Re: [PATCH bpf-next 07/11] samples: bpf: add makefile.prog for separate CC build |
| |
On Fri, Sep 13, 2019 at 09:33:58PM +0000, Yonghong Song wrote: > > >On 9/10/19 11:38 AM, Ivan Khoronzhuk wrote: >> The makefile.prog is added only, will be used in sample/bpf/Makefile >> later in order to switch cross-compiling on CC from HOSTCC. >> >> The HOSTCC is supposed to build binaries and tools running on the host >> afterwards, in order to simplify build or so, like "fixdep" or else. >> In case of cross compiling "fixdep" is executed on host when the rest >> samples should run on target arch. In order to build binaries for >> target arch with CC and tools running on host with HOSTCC, lets add >> Makefile.prog for simplicity, having definition and routines similar >> to ones, used in script/Makefile.host. This allows later add >> cross-compilation to samples/bpf with minimum changes. > >So this is really Makefile.host or Makefile.user, right? It's cut and modified version of Makefile.host
>In BPF, 'prog' can refers to user prog or bpf prog. >To avoid ambiguity, maybe Makefile.host? Makefile.target? as target = host not always. Makefile.user also looks ok, but doesn't contain target, maybe "targetuser", but bpf is also target... Initially I was thinking about Makefile.targetprog, but it looks too long.
> >> >> Makefile.prog contains only stuff needed for samples/bpf, potentially >> can be reused and extended for other prog sets later and now needed > >What do you mean 'extended for other prog sets'? I am wondering whether Another kind of samples...with c++ for instance.
>we could just include 'scripts/Makefile.host'? How hard it is? It's bound to HOSTCC and it's environment. It is included by default and was used before this patchset, blocking cross complication.
> >> only for unblocking tricky samples/bpf cross compilation. >> >> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> >> --- >> samples/bpf/Makefile.prog | 77 +++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 77 insertions(+) >> create mode 100644 samples/bpf/Makefile.prog >> >> diff --git a/samples/bpf/Makefile.prog b/samples/bpf/Makefile.prog >> new file mode 100644 >> index 000000000000..3781999b9193 >> --- /dev/null >> +++ b/samples/bpf/Makefile.prog >> @@ -0,0 +1,77 @@ >> +# SPDX-License-Identifier: GPL-2.0 >> +# ========================================================================== >> +# Building binaries on the host system >> +# Binaries are not used during the compilation of the kernel, and intendent >> +# to be build for target board, target board can be host ofc. Added to build >> +# binaries to run not on host system. >> +# >> +# Only C is supported, but can be extended for C++. >The above comment is not needed. will drop it.
>samples/bpf/ only have C now. I am wondering whether your below scripts >can be simplified, e.g., removing cxxobjs. I think yes, will try
> >> +# >> +# Sample syntax (see Documentation/kbuild/makefiles.rst for reference) >> +# progs-y := xsk_example >> +# Will compile xdpsock_example.c and create an executable named xsk_example >> +# >> +# progs-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 >> +# >> +# Inherited from scripts/Makefile.host >> +# >> +__progs := $(sort $(progs-y)) >> + >> +# C code >> +# Executables compiled from a single .c file >> +prog-csingle := $(foreach m,$(__progs), \ >> + $(if $($(m)-objs)$($(m)-cxxobjs),,$(m))) >> + >> +# C executables linked based on several .o files >> +prog-cmulti := $(foreach m,$(__progs),\ >> + $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m)))) >> + >> +# Object (.o) files compiled from .c files >> +prog-cobjs := $(sort $(foreach m,$(__progs),$($(m)-objs))) >> + >> +prog-csingle := $(addprefix $(obj)/,$(prog-csingle)) >> +prog-cmulti := $(addprefix $(obj)/,$(prog-cmulti)) >> +prog-cobjs := $(addprefix $(obj)/,$(prog-cobjs)) >> + >> +##### >> +# Handle options to gcc. Support building with separate output directory >> + >> +_progc_flags = $(PROGS_CFLAGS) \ >> + $(PROGCFLAGS_$(basetarget).o) >> + >> +# $(objtree)/$(obj) for including generated headers from checkin source files >> +ifeq ($(KBUILD_EXTMOD),) >> +ifdef building_out_of_srctree >> +_progc_flags += -I $(objtree)/$(obj) >> +endif >> +endif >> + >> +progc_flags = -Wp,-MD,$(depfile) $(_progc_flags) >> + >> +# Create executable from a single .c file >> +# prog-csingle -> Executable >> +quiet_cmd_prog-csingle = CC $@ >> + cmd_prog-csingle = $(CC) $(progc_flags) $(PROGS_LDFLAGS) -o $@ $< \ >> + $(PROGS_LDLIBS) $(PROGLDLIBS_$(@F)) >> +$(prog-csingle): $(obj)/%: $(src)/%.c FORCE >> + $(call if_changed_dep,prog-csingle) >> + >> +# Link an executable based on list of .o files, all plain c >> +# prog-cmulti -> executable >> +quiet_cmd_prog-cmulti = LD $@ >> + cmd_prog-cmulti = $(CC) $(progc_flags) $(PROGS_LDFLAGS) -o $@ \ >> + $(addprefix $(obj)/,$($(@F)-objs)) \ >> + $(PROGS_LDLIBS) $(PROGLDLIBS_$(@F)) >> +$(prog-cmulti): $(prog-cobjs) FORCE >> + $(call if_changed,prog-cmulti) >> +$(call multi_depend, $(prog-cmulti), , -objs) >> + >> +# Create .o file from a single .c file >> +# prog-cobjs -> .o >> +quiet_cmd_prog-cobjs = CC $@ >> + cmd_prog-cobjs = $(CC) $(progc_flags) -c -o $@ $< >> +$(prog-cobjs): $(obj)/%.o: $(src)/%.c FORCE >> + $(call if_changed_dep,prog-cobjs) >>
-- Regards, Ivan Khoronzhuk
| |