Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tools build: Add support for host programs format

In some cases, like for fixdep and shortly for jevents, we need to build a tool
to run on the host that will be used in building a tool, such as perf, that is
being cross compiled, so do like the kernel and provide HOSTCC, HOSTLD and HOSTAR
to do that.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Requested-by: Andi Kleen <andi@firstfloor.org>
Requested-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/20160927141846.GA6589@krava
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Jiri Olsa and committed by
Arnaldo Carvalho de Melo
0c3b7e42 18ef15c6

+26 -4
+5
tools/build/Build.include
··· 90 90 # - per object C flags 91 91 # - BUILD_STR macro to allow '-D"$(variable)"' constructs 92 92 c_flags = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) 93 + 94 + ### 95 + ## HOSTCC C flags 96 + 97 + host_c_flags = -Wp,-MD,$(depfile),-MT,$@ $(CHOSTFLAGS) -D"BUILD_STR(s)=\#s" $(CHOSTFLAGS_$(basetarget).o) $(CHOSTFLAGS_$(obj))
+6
tools/build/Makefile
··· 14 14 $(call allow-override,CC,$(CROSS_COMPILE)gcc) 15 15 $(call allow-override,LD,$(CROSS_COMPILE)ld) 16 16 17 + HOSTCC ?= gcc 18 + HOSTLD ?= ld 19 + HOSTAR ?= ar 20 + 21 + export HOSTCC HOSTLD HOSTAR 22 + 17 23 ifeq ($(V),1) 18 24 Q = 19 25 else
+15 -4
tools/build/Makefile.build
··· 58 58 quiet_cmd_cc_o_c = CC $@ 59 59 cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< 60 60 61 + quiet_cmd_host_cc_o_c = HOSTCC $@ 62 + cmd_host_cc_o_c = $(HOSTCC) $(host_c_flags) -c -o $@ $< 63 + 61 64 quiet_cmd_cpp_i_c = CPP $@ 62 65 cmd_cpp_i_c = $(CC) $(c_flags) -E -o $@ $< 63 66 ··· 73 70 # If there's nothing to link, create empty $@ object. 74 71 quiet_cmd_ld_multi = LD $@ 75 72 cmd_ld_multi = $(if $(strip $(obj-y)),\ 76 - $(LD) -r -o $@ $(filter $(obj-y),$^),rm -f $@; $(AR) rcs $@) 73 + $(LD) -r -o $@ $(filter $(obj-y),$^),rm -f $@; $(AR) rcs $@) 74 + 75 + quiet_cmd_host_ld_multi = HOSTLD $@ 76 + cmd_host_ld_multi = $(if $(strip $(obj-y)),\ 77 + $(HOSTLD) -r -o $@ $(filter $(obj-y),$^),rm -f $@; $(HOSTAR) rcs $@) 78 + 79 + ifneq ($(filter $(obj),$(hostprogs)),) 80 + host = host_ 81 + endif 77 82 78 83 # Build rules 79 84 $(OUTPUT)%.o: %.c FORCE 80 85 $(call rule_mkdir) 81 - $(call if_changed_dep,cc_o_c) 86 + $(call if_changed_dep,$(host)cc_o_c) 82 87 83 88 $(OUTPUT)%.o: %.S FORCE 84 89 $(call rule_mkdir) 85 - $(call if_changed_dep,cc_o_c) 90 + $(call if_changed_dep,$(host)cc_o_c) 86 91 87 92 $(OUTPUT)%.i: %.c FORCE 88 93 $(call rule_mkdir) ··· 130 119 131 120 $(in-target): $(obj-y) FORCE 132 121 $(call rule_mkdir) 133 - $(call if_changed,ld_multi) 122 + $(call if_changed,$(host)ld_multi) 134 123 135 124 __build: $(in-target) 136 125 @: